@Override public void run() { try { Thread.sleep(1000); RuntimeEngine engine = runtimeManager.getRuntimeEngine(EmptyContext.get());// only for singleton logger.debug("staring a thread...."); engine.getKieSession().insert("doing it async"); logger.debug("Completing the work item"); engine.getKieSession().getWorkItemManager().completeWorkItem(workItem.getId(), null); runtimeManager.disposeRuntimeEngine(engine); } catch (Exception e) { logger.error("Error when executing async operation", e); } }
@Test public void testScriptTaskFromKjarByName() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(GROUP_ID, ARTIFACT_ID, VERSION) .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testScriptTaskFromKjarByNameNamedKbaseKsession() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(GROUP_ID, ARTIFACT_ID, VERSION, "defaultKieBase", "defaultKieSession") .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
public void afterTaskCompletedEvent(TaskEvent event) { Task task = event.getTask(); long processInstanceId = task.getTaskData().getProcessInstanceId(); if (processInstanceId <= 0) { return; } RuntimeManager manager = getManager(task); if (manager == null) { throw new RuntimeException("No RuntimeManager registered with identifier: " + task.getTaskData().getDeploymentId()); } RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); KieSession session = runtime.getKieSession(); if (session != null) { logger.debug(">> I've recieved an event for a known session (" + task.getTaskData().getProcessSessionId()+")"); processTaskState(task); } else { logger.error("EE: I've recieved an event but the session is not known by this handler ( "+task.getTaskData().getProcessSessionId()+")"); } }
@Test public void testScriptTaskFromClasspathContainer() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newClasspathKmoduleDefaultBuilder() .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
protected KieRuntime getKieRuntimeForSubprocess() { KieRuntime kruntime = ((ProcessInstance) getProcessInstance()).getKnowledgeRuntime(); RuntimeManager manager = (RuntimeManager) kruntime.getEnvironment().get(EnvironmentName.RUNTIME_MANAGER); if (manager != null) { org.kie.api.runtime.manager.Context<?> context = ProcessInstanceIdContext.get(); String caseId = (String) kruntime.getEnvironment().get(EnvironmentName.CASE_ID); if (caseId != null) { context = CaseContext.get(caseId); } RuntimeEngine runtime = manager.getRuntimeEngine(context); kruntime = (KieRuntime) runtime.getKieSession(); } return kruntime; }
@Test public void testScriptTaskFromClasspathContainerNamedKbaseKsession() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newClasspathKmoduleDefaultBuilder("defaultKieBase", "defaultKieSession") .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
protected Environment getEnvironment(JobContext jobContext) { JobContext ctxorig = jobContext; if (ctxorig instanceof SelfRemovalJobContext) { ctxorig = ((SelfRemovalJobContext) ctxorig).getJobContext(); } // first attempt to get knowledge runtime's environment if job context is a process one if (ctxorig instanceof ProcessJobContext) { return ((ProcessJobContext) ctxorig).getKnowledgeRuntime().getEnvironment(); } else { // next if we have manager set use it to get ksession's environment of active RuntimeEngine // while running this there must be an active RuntimeEngine present if (manager != null) { RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(getProcessInstancId(ctxorig))); return engine.getKieSession().getEnvironment(); } else { // last resort use the runtime environment's environment template return environment.getEnvironment(); } } }
@Test public void testBasicScriptFailure() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); try { ksession1.startProcess("BrokenScriptTask"); fail("Start process should fail due to broken script"); } catch (Throwable e) { // expected } manager.disposeRuntimeEngine(runtime1); ExecutionErrorManager errorManager = ((AbstractRuntimeManager) manager).getExecutionErrorManager(); ExecutionErrorStorage storage = errorManager.getStorage(); List<ExecutionError> errors = storage.list(0, 10); assertNotNull(errors); assertEquals(1, errors.size()); assertExecutionError(errors.get(0), "Process", "BrokenScriptTask", "Hello"); }
public void processTaskState(Task task) { long workItemId = task.getTaskData().getWorkItemId(); long processInstanceId = task.getTaskData().getProcessInstanceId(); RuntimeManager manager = getManager(task); RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); KieSession session = runtime.getKieSession(); if (task.getTaskData().getStatus() == Status.Completed) { String userId = task.getTaskData().getActualOwner().getId(); Map<String, Object> results = new HashMap<String, Object>(); Map<String, Object> taskOutcome = task.getTaskData().getTaskOutputVariables(); if (taskOutcome != null) { results.putAll(taskOutcome); // results.put("Result", taskOutcome); } results.put("ActorId", userId); session.getWorkItemManager().completeWorkItem(workItemId, results); } else { session.getWorkItemManager().abortWorkItem(workItemId); } }
public void testMultiInstanceCallactivityCompleteAtTheSameTime(Context<?> startContext) { // start first process instance with first manager RuntimeEngine runtime1 = manager.getRuntimeEngine(startContext); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); List<String> items = new ArrayList<String>(); for (int i = 0; i < numberOfChildProcesses; i++) { items.add(i + ""); } Map<String, Object> params = new HashMap<String, Object>(); params.put("items", items); ProcessInstance processInstance = ksession1.startProcess("test.Parent", params); manager.disposeRuntimeEngine(runtime1); countDownListener.waitTillCompleted(); JPAAuditLogService auditService = new JPAAuditLogService(emf); // process instance 1 should be completed by signal ProcessInstanceLog pi1Log = auditService.findProcessInstance(processInstance.getId()); assertNotNull(pi1Log); assertEquals(ProcessInstance.STATE_COMPLETED, pi1Log.getStatus().intValue()); auditService.dispose(); // close manager which will close session maintained by the manager manager.close(); }
@Test public void testInMemorySessionCleanup() { for ( int i = 0; i < 20; i++ ) { Context<?> context = getContext(); RuntimeEngine runtime = manager.getRuntimeEngine(context); KieSession ksession = runtime.getKieSession(); ProcessInstance pi = ksession.startProcess("ScriptTask"); assertEquals(ProcessInstance.STATE_COMPLETED, pi.getState()); manager.disposeRuntimeEngine( runtime ); if ("case".equals(strategy)) { ((PerCaseRuntimeManager) manager).destroyCase((CaseContext) context); } } InMemorySessionFactory factory = (InMemorySessionFactory) ((AbstractRuntimeManager) manager).getFactory(); int expectedSessionsInFactory = getExpectedSessionsInFactory(); assertEquals(expectedSessionsInFactory, factory.getSessions().size()); }
@Test public void testCustomTaskFromKjar() { KieServices ks = KieServices.Factory.get(); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION)) .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("customtask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testScriptTaskFromKjarUsingNamedKbaseKsession() { KieServices ks = KieServices.Factory.get(); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION), "defaultKieBase", "defaultKieSession") .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testScriptTaskFromKjar() { KieServices ks = KieServices.Factory.get(); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder(ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION)) .userGroupCallback(userGroupCallback) .get(); manager = RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = engine.getKieSession().startProcess("ScriptTask", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testScriptFailureAfterUserTask() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance pi = ksession1.startProcess("UserTaskWithRollback"); runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi.getId())); ksession1 = runtime1.getKieSession(); assertEquals(1, tasks.size()); assertNotNull(errors); assertEquals(1, errors.size()); assertExecutionError(errors.get(0), "Process", "UserTaskWithRollback", "Script Task 1");
private void testAdHocSubprocess() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance processInstance = ksession1.startProcess("jbpm-abort-ht-issue.ad-hoc-abort-ht"); manager.disposeRuntimeEngine(runtime1); // then signal via first manager, should only signal instances owned by that manager runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstance.getId())); ksession1 = runtime1.getKieSession(); ksession1.addEventListener(new TaskCleanUpProcessEventListener(runtime1.getTaskService())); ksession1.signalEvent("Milestone", null, processInstance.getId()); manager.disposeRuntimeEngine(runtime1); JPAAuditLogService auditService = new JPAAuditLogService(emf); // process instance 1 should be completed by signal ProcessInstanceLog pi1Log = auditService.findProcessInstance(processInstance.getId()); assertNotNull(pi1Log); assertEquals(ProcessInstance.STATE_COMPLETED, pi1Log.getStatus().intValue()); auditService.dispose(); // close manager which will close session maintained by the manager manager.close(); }
@Test public void testFailureAfterUserTaskNoWorkItemHandler() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance pi = ksession1.startProcess("UserTaskWithCustomTask"); runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi.getId())); ksession1 = runtime1.getKieSession(); assertEquals(1, tasks.size()); assertNotNull(errors); assertEquals(1, errors.size()); assertExecutionError(errors.get(0), "Process", "UserTaskWithCustomTask", "Manual Task 2"); String errorMessage = errors.get(0).getErrorMessage();
@SuppressWarnings("unchecked") @Test public void testPerProcessInstanceManagerDestorySession() { assertEquals(0, sessions.size()); assertNotNull(manager); sessions = em.createQuery("from SessionInfo").getResultList(); assertEquals(0, sessions.size()); RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); runtime.getKieSession(); assertEquals(1, sessions.size()); KieSession ksession = runtime.getKieSession(); ProcessInstance pi1 = ksession.startProcess("UserTask"); manager.disposeRuntimeEngine(runtime); runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())); ksession = runtime.getKieSession(); assertEquals(ksession1Id, ksession.getId()); sessions = em.createQuery("from SessionInfo").getResultList(); manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())).getKieSession(); fail("Session for this (" + pi1.getId() + ") process instance is no more accessible"); } catch (RuntimeException e) {
RuntimeEngine runtime = managerV1.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ProcessInstance pi1 = ksession.startProcess(ADDTASKAFTERACTIVE_EXPR_ID_V1, params); assertNotNull(pi1); assertEquals(ProcessInstance.STATE_ACTIVE, pi1.getState()); List<TaskSummary> tasks = taskService.getTasksByStatusByProcessInstanceId(pi1.getId(), Arrays.asList(Status.Reserved), "en-UK"); assertNotNull(tasks); assertEquals(1, tasks.size()); MigrationSpec migrationSpec = new MigrationSpec(DEPLOYMENT_ID_V1, pi1.getId(), DEPLOYMENT_ID_V2, ADDTASKAFTERACTIVE_EXPR_ID_V2); MigrationManager migrationManager = new MigrationManager(migrationSpec); MigrationReport report = migrationManager.migrate(); assertTrue(report.isSuccessful()); assertMigratedProcessInstance(ADDTASKAFTERACTIVE_EXPR_ID_V2, pi1.getId(), ProcessInstance.STATE_ACTIVE); runtime = managerV2.getRuntimeEngine(EmptyContext.get()); taskService = runtime.getTaskService(); assertMigratedTaskAndComplete(taskService, ADDTASKAFTERACTIVE_EXPR_ID_V2, pi1.getId(), "Active Task test");