Constructor<T> constructor = clazz.getConstructor(KieSession.class); instance = constructor.newInstance(engine.getKieSession()); } catch (Exception e) { Constructor<T> constructor = clazz.getConstructor(TaskService.class); instance = constructor.newInstance(engine.getTaskService()); } catch (Exception e) {
public ScheduledTaskDeadline call() throws Exception { 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); } } return null; }
@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"));
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) {
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(); }
@Override public void run() { UserTransaction ut = null; try { ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); engine.getKieSession(); TaskService taskService = engine.getTaskService(); taskService.start(secondTaskId, USER_MARY); taskService.complete(secondTaskId, USER_MARY, null); System.out.println("Task for mary completed"); manager.disposeRuntimeEngine(engine); ut.commit(); } catch (Exception e) { e.printStackTrace(); try { ut.rollback(); } catch (Exception e1) { e1.printStackTrace(); } } } });
public void testUserTaskFailure() { RuntimeEngine runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get()); KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ksession1.startProcess("UserTaskWithRollback"); TaskService taskService = runtime1.getTaskService(); List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK"); assertEquals(1, tasks.size()); taskService.start(taskId, "john"); fail("Start task should fail due to broken script"); } catch (Throwable e) {
public void minimumRestBuilderExample() throws Exception { RuntimeEngine runtimeEngine = RemoteRuntimeEngineFactory.newRestBuilder() .addUserName("user") .addPassword("pass") .addUrl(new URL("http://localhost:8080/business-central")) .build(); runtimeEngine.getTaskService().claim(23l, "user"); // This will throw a MissingRequiredInfoException because the deployment id is required here runtimeEngine.getKieSession().startProcess("org.test.process"); }
@Test public void testCreationOfSessionTaskServiceNotConfigured() { RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get() .newEmptyBuilder() .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); try { runtime.getTaskService(); fail("Should fail as task service is not configured"); } catch (UnsupportedOperationException e) { assertEquals("TaskService was not configured", e.getMessage()); } manager.disposeRuntimeEngine(runtime); manager.close(); }
@SuppressWarnings("unchecked") public List<ChecklistItem> getTasks(long processInstanceId) { RuntimeEngine runtime = getRuntime(); KieSession ksession = runtime.getKieSession(); ProcessInstance processInstance = ksession.getProcessInstance(processInstanceId); Map<String, ChecklistItem> orderingIds = new HashMap<String, ChecklistItem>(); ksession.getKieBase().getProcess(processInstance.getProcessId()); Collection<ChecklistItem> result = ChecklistItemFactory.getPendingChecklistItems(process); result.addAll(ChecklistItemFactory.getLoggedChecklistItems(process, (List<NodeInstanceLog>) runtime.getAuditService().findNodeInstances(processInstance.getId()))); for (ChecklistItem item: result) { if (item.getOrderingNb() != null && item.getOrderingNb().trim().length() > 0) { TaskService taskService = runtime.getTaskService(); List<Long> taskIds = taskService.getTasksByProcessInstanceId(processInstanceId); List<ChecklistItem> result = new ArrayList<ChecklistItem>();
public TaskService getTaskService() { RuntimeEngine runtime = manager.getRuntimeEngine(EmptyContext.get()); return runtime.getTaskService(); }
public void completeTask(String userId, long taskId) { RuntimeEngine runtime = getRuntime(); runtime.getTaskService().start(taskId, userId); runtime.getTaskService().complete(taskId, userId, null); manager.disposeRuntimeEngine(runtime); }
public void abortTask(String userId, long taskId) { RuntimeEngine runtime = getRuntime(); runtime.getTaskService().start(taskId, userId); runtime.getTaskService().fail(taskId, userId, null); manager.disposeRuntimeEngine(runtime); }
@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(); TaskService taskService = runtime1.getTaskService(); List<TaskSummary> tasks = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK"); assertEquals(1, tasks.size()); taskService.start(taskId, "john"); taskService.complete(taskId, "john", results); fail("Complete task should fail due to broken script"); } catch (Throwable e) {
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"); MigrationSpec migrationSpec = new MigrationSpec(DEPLOYMENT_ID_V1, pi1.getId(), DEPLOYMENT_ID_V2, REMOVENONACTIVEBEFORETASK_ID_V2); MigrationManager migrationManager = new MigrationManager(migrationSpec); MigrationReport report = migrationManager.migrate(); assertTrue(report.isSuccessful()); 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");
@Override public void run() { UserTransaction ut = null; try { ut = InitialContext.doLookup("java:comp/UserTransaction"); ut.begin(); RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId)); engine.getKieSession(); TaskService taskService = engine.getTaskService(); taskService.start(secondTaskId, USER_MARY); taskService.complete(secondTaskId, USER_MARY, null); System.out.println("Task for mary completed"); manager.disposeRuntimeEngine(engine); ut.commit(); } catch (Exception e) { e.printStackTrace(); try { ut.rollback(); } catch (Exception e1) { e1.printStackTrace(); } } } });
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; }
@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(); }
public void minimumRestBuilderExample() throws Exception { RemoteRestRuntimeEngineFactory factory = RemoteRestRuntimeEngineFactory.newBuilder() .addUserName("user") .addPassword("pass") .addUrl(new URL("http://localhost:8080/business-central")) .build(); RuntimeEngine runtimeEngine = factory.newRuntimeEngine(); runtimeEngine.getTaskService().claim(23l, "user"); // This will throw a MissingRequiredInfoException because the deployment id is required here runtimeEngine.getKieSession().startProcess("org.test.process"); } }
@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); } } }