private void testCompleteTaskViaWrongRuntimeManager() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance processInstance = ksession1.startProcess("UserTask"); manager.disposeRuntimeEngine(runtime1); RuntimeEngine runtime2 = manager2.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession2 = runtime2.getKieSession(); assertNotNull(ksession2); ProcessInstance processInstance2 = ksession2.startProcess("UserTask"); manager2.disposeRuntimeEngine(runtime2); runtime2 = manager2.getRuntimeEngine(ProcessInstanceIdContext.get(processInstance2.getId())); List<Long> tasks1 = runtime2.getTaskService().getTasksByProcessInstanceId(processInstance.getId()); assertEquals(1, tasks1.size()); runtime2.getTaskService().start(task1Id, "john"); runtime2.getTaskService().complete(task1Id, "john", null); fail("Should not be allowed to complete task via wrong runtime manager"); } catch (IllegalStateException re) {
protected Map<String, Object> getParametersMap(RuntimeEngine runtime) { RuntimeManager manager = ((RuntimeEngineImpl)runtime).getManager(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("ksession", runtime.getKieSession()); try { parameters.put("taskService", runtime.getTaskService()); } catch (UnsupportedOperationException e) { // in case task service was not configured } parameters.put("runtimeManager", manager); parameters.put("classLoader", getRuntimeManager().getEnvironment().getClassLoader()); parameters.put("entityManagerFactory", runtime.getKieSession().getEnvironment().get(EnvironmentName.ENTITY_MANAGER_FACTORY)); parameters.put("kieContainer", getRuntimeManager().getKieContainer()); return parameters; }
RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ProcessInstance processInstance = ksession.startProcess("signalbroadcast"); manager.disposeRuntimeEngine(runtime); runtime = manager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); List<TaskSummary> tasks = runtime.getTaskService().getTasksAssignedAsPotentialOwner("john", "en-UK"); assertNotNull(tasks); assertEquals(0, tasks.size()); ksession.signalEvent("Message-Msg", null); manager.disposeRuntimeEngine(runtime); runtime = manager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); tasks = runtime.getTaskService().getTasksAssignedAsPotentialOwner("john", "en-UK"); assertNotNull(tasks); assertEquals(1, tasks.size()); ksession = runtime.getKieSession(); tasks = runtime.getTaskService().getTasksAssignedAsPotentialOwner("john", "en-UK"); assertNotNull(tasks); assertEquals(3, tasks.size()); runtime.getTaskService().start(task.getId(), "john");
@Test public void testStartTwoProcessIntancesOnSameSession() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-ScriptTask.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-UserTask.bpmn2"), ResourceType.BPMN2) .get(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); // since there is no process instance yet we need to get new session RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); long ksession1Id = ksession.getIdentifier(); assertTrue(ksession1Id == 2); ProcessInstance pi1 = ksession.startProcess("UserTask"); assertEquals(ProcessInstance.STATE_ACTIVE, pi1.getState()); try { ProcessInstance pi2 = ksession.startProcess("UserTask"); fail("Invalid session was used for (" + pi2.getId() + ") process instance"); } catch (RuntimeException e) { } manager.close(); }
assertNotNull(managerV2); RuntimeEngine runtime = managerV1.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ProcessInstance pi1 = ksession.startProcess(REMOVENONACTIVEBEFORETASK_ID_V1); assertNotNull(pi1); assertEquals(ProcessInstance.STATE_ACTIVE, pi1.getState()); assertTaskAndComplete(runtime.getTaskService(), REMOVENONACTIVEBEFORETASK_ID_V1, pi1.getId(), "Active Task"); managerV1.disposeRuntimeEngine(runtime); MigrationSpec migrationSpec = new MigrationSpec(DEPLOYMENT_ID_V1, pi1.getId(), DEPLOYMENT_ID_V2, REMOVENONACTIVEBEFORETASK_ID_V2); MigrationManager migrationManager = new MigrationManager(migrationSpec); MigrationReport report = migrationManager.migrate(); assertMigratedProcessInstance(REMOVENONACTIVEBEFORETASK_ID_V2, pi1.getId(), ProcessInstance.STATE_ACTIVE); runtime = managerV2.getRuntimeEngine(EmptyContext.get()); TaskService taskService = runtime.getTaskService(); assertMigratedTaskAndComplete(taskService, REMOVENONACTIVEBEFORETASK_ID_V2, pi1.getId(), "Non-active Task");
@Test public void testCreationOfSessionWithPersistence() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-ScriptTask.bpmn2"), ResourceType.BPMN2) .get(); RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); long sessionId = ksession.getIdentifier(); assertTrue(sessionId == 1); runtime = manager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); assertEquals(sessionId, ksession.getIdentifier()); manager.disposeRuntimeEngine(runtime); ksession = manager.getRuntimeEngine(EmptyContext.get()).getKieSession(); assertEquals(sessionId, ksession.getIdentifier());
@Test public void testBusinessRuleTask() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .addAsset(ResourceFactory.newClassPathResource("BPMN2-BusinessRuleTask.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-BusinessRuleTask.drl"), ResourceType.DRL) .get(); RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); long sessionId = ksession.getIdentifier(); assertTrue(sessionId == 1); runtime = manager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); assertEquals(sessionId, ksession.getIdentifier()); ProcessInstance pi = ksession.createProcessInstance("BPMN2-BusinessRuleTask", null); ksession.insert(pi); ksession.startProcessInstance(pi.getId()); assertNull(ksession.getProcessInstance(pi.getId())); AuditService logService = runtime.getAuditService(); manager.disposeRuntimeEngine(runtime);
RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); long ksession1Id = ksession.getIdentifier(); assertTrue(ksession1Id == 1); RuntimeEngine runtime2 = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession2 = runtime2.getKieSession(); long ksession2Id = ksession2.getIdentifier(); assertTrue(ksession2Id == 2); ProcessInstance pi1 = ksession.startProcess("UserTask"); ProcessInstance pi2 = ksession2.startProcess("UserTask"); assertEquals(ProcessInstance.STATE_ACTIVE, pi1.getState()); assertEquals(ProcessInstance.STATE_ACTIVE, pi2.getState()); runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())); ksession = runtime.getKieSession(); assertEquals(ksession1Id, ksession.getIdentifier()); runtime2 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi2.getId())); ksession2 = runtime2.getKieSession(); assertEquals(ksession2Id, ksession2.getIdentifier()); manager.close();
@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()); }
.newDefaultBuilder(ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION)) .userGroupCallback(userGroupCallback) .get(); RuntimeEngine engine = manager.getRuntimeEngine(EmptyContext.get()); assertNotNull(engine); ProcessInstance processInstance = engine.getKieSession().startProcess("UserTask", params); List<TaskSummary> tasks = engine.getTaskService().getTasksAssignedAsPotentialOwner("john", "en-UK"); assertNotNull(tasks); assertEquals(1, tasks.size()); engine.getTaskService().start(taskId, "john"); engine.getTaskService().complete(taskId, "john", null); processInstance = engine.getKieSession().getProcessInstance(processInstance.getId()); assertNull(processInstance); manager.disposeRuntimeEngine(engine);
RuntimeEngine runtime1 = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession1 = runtime1.getKieSession(); ksession1.signalEvent("SampleEvent", null); List<? extends ProcessInstanceLog> logs = runtime1.getAuditService().findProcessInstances(); assertEquals(1, logs.size()); manager.disposeRuntimeEngine(runtime1); runtime1 = manager.getRuntimeEngine(EmptyContext.get()); ksession1 = runtime1.getKieSession(); ksession1.signalEvent("SampleEvent", null); logs = runtime1.getAuditService().findProcessInstances(); assertEquals(1, logs.size()); manager.disposeRuntimeEngine(runtime1); runtime1 = manager.getRuntimeEngine(EmptyContext.get()); ksession1 = runtime1.getKieSession(); ksession1.signalEvent("SampleEvent", null); logs = runtime1.getAuditService().findProcessInstances(); assertEquals(2, logs.size()); manager.disposeRuntimeEngine(runtime1);
@Test public void testBusinessRuleTaskWithRuleAwareListener() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .addAsset(ResourceFactory.newClassPathResource("BPMN2-BusinessRuleTask.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-BusinessRuleTask.drl"), ResourceType.DRL) .get(); RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); long sessionId = ksession.getIdentifier(); assertTrue(sessionId == 1); runtime = manager.getRuntimeEngine(EmptyContext.get()); ksession = runtime.getKieSession(); assertEquals(sessionId, ksession.getIdentifier()); ksession.addEventListener(new RuleAwareProcessEventLister()); ProcessInstance pi = ksession.startProcess("BPMN2-BusinessRuleTask"); assertNull(ksession.getProcessInstance(pi.getId())); AuditService logService = runtime.getAuditService(); manager.disposeRuntimeEngine(runtime);
protected ExecutableRunner getRunner( Long processInstanceId, ProcessJobContext ctx ) { RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); if (runtime == null) { throw new RuntimeException("No runtime engine found, could not be initialized yet"); } try { if (runtime.getKieSession() instanceof CommandBasedStatefulKnowledgeSession) { CommandBasedStatefulKnowledgeSession cmd = (CommandBasedStatefulKnowledgeSession) runtime.getKieSession(); if (ctx != null) { ctx.setKnowledgeRuntime((InternalKnowledgeRuntime) ( (SingleSessionCommandService) cmd.getRunner() ).getKieSession() ); } return new DisposableCommandService(cmd.getRunner(), manager, runtime, schedulerService.retryEnabled()); } else if (runtime.getKieSession() instanceof InternalKnowledgeRuntime && ctx != null) { ctx.setKnowledgeRuntime((InternalKnowledgeRuntime) runtime.getKieSession()); } return new DisposableCommandService(getRunner(), manager, runtime, schedulerService.retryEnabled()); } catch (Throwable e) { // since the DisposableCommandService was not created dispose runtime engine directly manager.disposeRuntimeEngine(runtime); throw new RuntimeException(e); } }
@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()); }
@Test public void testCreationOfRuntimeManagerWithinTransaction() throws Exception { System.setProperty("jbpm.tm.jndi.lookup", "java:comp/UserTransaction"); UserTransaction ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-ScriptTask.bpmn2"), ResourceType.BPMN2) .get(); manager = RuntimeManagerFactory.Factory.get().newPerRequestRuntimeManager(environment); assertNotNull(manager); RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ksession.startProcess("ScriptTask"); ut.commit(); System.clearProperty("jbpm.tm.jndi.lookup"); }
@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); } }
assertNotNull(manager); RuntimeEngine runtime = manager.getRuntimeEngine(CaseContext.get("CASE-001")); KieSession ksession = runtime.getKieSession(); ProcessInstance pi = ksession.startProcess("TimerInitFailure", params); assertEquals(ProcessInstance.STATE_ACTIVE, pi.getState()); manager.disposeRuntimeEngine(runtime); runtime = manager.getRuntimeEngine(CaseContext.get("CASE-001")); runtime.getKieSession(); TaskService taskService = runtime.getTaskService(); runtime = manager.getRuntimeEngine(CaseContext.get("CASE-001")); AuditService auditService = runtime.getAuditService(); ProcessInstanceLog log = auditService.findProcessInstance(pi.getId()); assertEquals(ProcessInstance.STATE_COMPLETED, log.getStatus().intValue());
@Test public void testEndMessageEventProcess() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("events/EndMessageEvent.bpmn2"), ResourceType.BPMN2) .registerableItemsFactory(new DefaultRegisterableItemsFactory(){ @Override public Map<String, WorkItemHandler> getWorkItemHandlers(RuntimeEngine runtime) { Map<String, WorkItemHandler> handlers = new HashMap<String, WorkItemHandler>(); handlers.putAll(super.getWorkItemHandlers(runtime)); handlers.put("Send Task", new SendTaskHandler()); return handlers; } }) .get(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); // since there is no process instance yet we need to get new session RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession(); ProcessInstance pi1 = ksession.startProcess("test-process"); assertEquals(ProcessInstance.STATE_COMPLETED, pi1.getState()); manager.close(); }
final NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Hello", 1); RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-TimerStart.bpmn2"), ResourceType.BPMN2) .registerableItemsFactory(new DefaultRegisterableItemsFactory(){ RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); List<? extends ProcessInstanceLog> logs = runtime1.getAuditService().findProcessInstances(); assertEquals(1, logs.size()); manager.disposeRuntimeEngine(runtime1); countDownListener.waitTillCompleted(2000); runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); logs = runtime1.getAuditService().findProcessInstances(); assertEquals(1, logs.size()); manager.disposeRuntimeEngine(runtime1); countDownListener.waitTillCompleted(); runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); logs = runtime1.getAuditService().findProcessInstances(); assertEquals(2, logs.size()); manager.disposeRuntimeEngine(runtime1);
@Test public void testSignalStartMultipleProcesses() { // independent = true RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newDefaultBuilder() .userGroupCallback(userGroupCallback) .addAsset(ResourceFactory.newClassPathResource("BPMN2-SignalMultipleProcessesMain.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-SignalMultipleProcessesOne.bpmn2"), ResourceType.BPMN2) .addAsset(ResourceFactory.newClassPathResource("BPMN2-SignalMultipleProcessesTwo.bpmn2"), ResourceType.BPMN2) .get(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); // since there is no process instance yet we need to get new session RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); long ksession1Id = ksession.getIdentifier(); assertTrue(ksession1Id == 2); Map<String, Object> inputParams = new HashMap<String, Object>(); inputParams.put("processInput", "MyCoolParam"); ksession.startProcess("main-process", inputParams); AuditService auditService = runtime.getAuditService(); List<? extends ProcessInstanceLog> processInstanceLogs = auditService.findProcessInstances(); assertEquals(3, processInstanceLogs.size()); manager.close(); }