RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession(); long ksession1Id = ksession.getIdentifier(); assertTrue(ksession1Id == 2); RuntimeEngine runtime2 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession2 = runtime2.getKieSession(); ProcessInstance pi1 = ksession.startProcess("UserTask"); ProcessInstance pi2 = ksession2.startProcess("UserTask"); runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())); ksession = runtime.getKieSession(); assertEquals(ksession1Id, ksession.getIdentifier()); manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())).getKieSession(); fail("Session for this (" + pi1.getId() + ") process instance is no more accessible"); } catch (RuntimeException e) { runtime2 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi2.getId()));; ksession2 = runtime2.getKieSession(); assertEquals(ksession2Id, ksession2.getIdentifier()); manager.getRuntimeEngine(ProcessInstanceIdContext.get(pi2.getId())).getKieSession(); fail("Session for this (" + pi2.getId() + ") process instance is no more accessible"); } catch (RuntimeException e) {
RuntimeEngine runtimeEngine = getRuntimeEngine(ProcessInstanceIdContext.get()); runtimeEngine.getKieSession().signalEvent(type, event); runtimeEngine = getRuntimeEngine(ProcessInstanceIdContext.get(Long.parseLong(piId))); runtimeEngine.getKieSession().signalEvent(type, event); Context<?> context = ((RuntimeEngineImpl) engine).getContext(); if (context != null && context instanceof ProcessInstanceIdContext && ((ProcessInstanceIdContext) context).getContextId() != null) { engine.getKieSession().signalEvent(type, event, ((ProcessInstanceIdContext) context).getContextId());
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<Long, List<TimerInstance>> cancelActiveTimersBeforeMigration(RuntimeManager manager) { RuntimeEngine engineBefore = manager.getRuntimeEngine(ProcessInstanceIdContext.get(migrationSpec.getProcessInstanceId())); try { Map<Long, List<TimerInstance>> timerMigrated = engineBefore.getKieSession().execute(new ExecutableCommand<Map<Long, List<TimerInstance>>>() { manager.disposeRuntimeEngine(engineBefore);
assertEquals(0, descriptor.getRequiredRoles().size()); RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); assertNotNull(engine); KieSession kieSession = engine.getKieSession(); assertEquals(((SessionConfiguration) kieSession.getSessionConfiguration()).getSignalManagerFactory(), DefaultSignalManagerFactory.class.getName()); long processInstanceId = processInstance.getId(); manager.disposeRuntimeEngine(engine); engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); kieSession = engine.getKieSession(); engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); kieSession = engine.getKieSession(); processInstanceId = processInstance.getId(); engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); processInstanceId = processInstance.getId();
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(); }
RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession = runtime.getKieSession(); Account accountClosed = new Account("C"); FactHandle accountOpen_FH = ksession.insert( accountOpen ); FactHandle accountClosed_FH = ksession.insert(accountClosed); OrderEligibility thisYearEligibility = new OrderEligibility(thisYearOrder); FactHandle lye_FH = ksession.insert( lastYearEligibility ); FactHandle tye_FH = ksession.insert(thisYearEligibility); ksession.delete(tye_FH); manager.close();
assertNotNull(managerV2); RuntimeEngine runtime = managerV1.getRuntimeEngine(EmptyContext.get()); KieSession ksession = runtime.getKieSession(); assertNotNull(ksession); ProcessInstance pi1 = ksession.startProcess(CYCLE_TIMER_ID_V1, params); assertNotNull(pi1); assertEquals(ProcessInstance.STATE_ACTIVE, pi1.getState()); JPAAuditLogService auditService = new JPAAuditLogService(emf); ProcessInstanceLog log = auditService.findProcessInstance(pi1.getId()); assertNotNull(log); assertEquals(CYCLE_TIMER_ID_V1, log.getProcessId()); assertEquals(DEPLOYMENT_ID_V1, log.getExternalId()); managerV1.disposeRuntimeEngine(runtime); MigrationSpec migrationSpec = new MigrationSpec(DEPLOYMENT_ID_V1, pi1.getId(), DEPLOYMENT_ID_V2, CYCLE_TIMER_ID_V2); countdownListener.waitTillCompleted(); runtime = managerV2.getRuntimeEngine(ProcessInstanceIdContext.get(pi1.getId())); ksession = runtime.getKieSession(); assertNotNull(ksession); ksession.signalEvent("endMe", null, pi1.getId()); managerV2.disposeRuntimeEngine(runtime);
@Override public void run() { UserTransaction ut = null; try { ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); // call ksession so it will initiate first tx engine.getKieSession(); TaskService taskService = engine.getTaskService(); taskService.start(firstTaskId, USER_JOHN); taskService.complete(firstTaskId, USER_JOHN, null); System.out.println("Task for john completed"); manager.disposeRuntimeEngine(engine); ut.commit(); } catch (Exception e) { e.printStackTrace(); try { ut.rollback(); } catch (Exception e1) { e1.printStackTrace(); } } } });
@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(); }
@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(); }
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; }
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId())); KieSession ksessionById = runtime.getKieSession(); long taskId = ((InternalTaskService) runtime.getTaskService()).addTask(task, content); if (isAutoClaim(ksessionById, workItem, task)) { try { runtime.getTaskService().claim(taskId, (String) workItem.getParameter("SwimlaneActorId")); } catch (PermissionDeniedException e) { logger.warn("User {} is not allowed to auto claim task due to permission violation", workItem.getParameter("SwimlaneActorId"));
@Test public void testCreationOfSessionTaskServiceNotConfigured() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newEmptyBuilder() .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); // ksession for process instance #1 // 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); try { runtime.getTaskService(); fail("Should fail as task service is not configured"); } catch (UnsupportedOperationException e) { assertEquals("TaskService was not configured", e.getMessage()); } manager.close(); }
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(); } } }
assertNotNull(manager); RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); assertNotNull(engine); AsyncAuditLogProducer asyncAuditLogProducer = null; KieSession kieSession = engine.getKieSession(); for (ProcessEventListener listener : kieSession.getProcessEventListeners()) { if (listener instanceof AsyncAuditLogProducer) { asyncAuditLogProducer = (AsyncAuditLogProducer) listener; manager.close(); manager = RuntimeManagerFactory.Factory.get().newPerProcessInstanceRuntimeManager(environment); assertNotNull(manager); RuntimeEngine engine2 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession kieSession2 = engine2.getKieSession(); AsyncAuditLogProducer asyncAuditLogProducer2 = null; for (ProcessEventListener listener : kieSession2.getProcessEventListeners()) { if (listener instanceof AsyncAuditLogProducer) { asyncAuditLogProducer2 = (AsyncAuditLogProducer) listener;
@Override public void execute(JobContext ctx) { RuntimeManager runtimeManager = null; RuntimeEngine engine = null; CommandExecutor executor = null; if (deploymentId != null && processInstanceId != null) { runtimeManager = RuntimeManagerRegistry.get().getManager(deploymentId); engine = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); executor = engine.getTaskService(); } else { executor = TaskDeadlinesServiceImpl.getInstance(); } try { executor.execute(new ExecuteDeadlinesCommand(taskId, deadlineId, type)); } catch (NullPointerException e) { logger.error("TaskDeadlineService instance is not available, most likely was not properly initialized - Job did not run!"); } finally { if (runtimeManager != null && engine != null) { runtimeManager.disposeRuntimeEngine(engine); } } }
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);
@Override public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId())); Task task = runtime.getTaskService().getTaskByWorkItemId(workItem.getId()); if (task != null) { try { String adminUser = ADMIN_USER; List<OrganizationalEntity> businessAdmins = task.getPeopleAssignments().getBusinessAdministrators(); for (OrganizationalEntity admin : businessAdmins) { if (admin instanceof Group) { continue; } if (!admin.getId().equals(ADMIN_USER)) { adminUser = admin.getId(); break; } } logger.debug("Task {} is going to be exited by {} who is business admin", task.getId(), adminUser); runtime.getTaskService().exit(task.getId(), adminUser); } catch (PermissionDeniedException e) { logger.info(e.getMessage()); } } }
@Override public void beforeProcessStarted(ProcessStartedEvent event) { mapper.saveMapping(new EnvironmentAwareProcessInstanceContext( event.getKieRuntime().getEnvironment(), event.getProcessInstance().getId()), ksessionId, managerId); saveLocalRuntime(event.getProcessInstance().getId(), runtime); ((RuntimeEngineImpl)runtime).setContext(ProcessInstanceIdContext.get(event.getProcessInstance().getId())); createLockOnNewProcessInstance(event.getProcessInstance().getId(), runtime); }