@Test public void testLane() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-Lane.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ProcessInstance processInstance = ksession.startProcess("UserTask"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); ksession = restoreSession(ksession, true); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); WorkItem workItem = workItemHandler.getWorkItem(); assertThat(workItem).isNotNull(); assertThat(workItem.getParameter("ActorId")).isEqualTo("john"); Map<String, Object> results = new HashMap<String, Object>(); results.put("ActorId", "mary"); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), results); ksession = restoreSession(ksession, true); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); workItem = workItemHandler.getWorkItem(); assertThat(workItem).isNotNull(); assertThat(workItem.getParameter("SwimlaneActorId")).isEqualTo("mary"); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { System.out.println("Aborting work item " + workItem); manager.abortWorkItem(workItem.getId()); }
Content content = taskService.getContentById(contentId); Object result = ContentMarshallerHelper.unmarshall(content.getContent(), ksession.getEnvironment(), ksession.getClass().getClassLoader()); results.put("Result", result); if (result instanceof Map) { ksession.getWorkItemManager().completeWorkItem(task.getTaskData().getWorkItemId(), results); } else { results.put("ActorId", userId); ksession.getWorkItemManager().completeWorkItem(workItemId, results); ksession.getWorkItemManager().abortWorkItem(workItemId);
public static void runCompensationEventSubProcessGeneralTest(KieSession ksession, RuleFlowProcess process, String processId, String [] workItemNames, List<String> eventList, String compensationEvent) { TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); for (String workItem : workItemNames) { ksession.getWorkItemManager().registerWorkItemHandler(workItem, workItemHandler); } ProcessInstance processInstance = ksession.startProcess(processId); // pre and sub process work item ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItems().removeLast().getId(), null); ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItems().removeLast().getId(), null); // Call general compensation ksession.signalEvent("Compensation", compensationEvent, processInstance.getId()); assertEquals("Compensation should have fired once.", 1, eventList.size()); // post work item ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItems().removeLast().getId(), null); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testEvaluationProcess() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler()); Map<String, Object> params = new HashMap<String, Object>(); params.put("employee", "UserId-12345"); ProcessInstance processInstance = ksession.startProcess("Evaluation", params); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_COMPLETED); }
@Test public void compensationInvokingSubProcess() throws Exception { KieSession ksession = createKnowledgeSession("compensation/BPMN2-UserTaskCompensation.bpmn2"); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); Map<String, Object> params = new HashMap<String, Object>(); params.put("compensation", "True"); ProcessInstance processInstance = ksession.startProcess("UserTaskCompensation", params); assertProcessInstanceCompleted(processInstance.getId(), ksession); assertProcessVarValue(processInstance, "compensation", "compensation"); }
@Test public void testEventBasedSplit4() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-EventBasedSplit4.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Email1", new SystemOutWorkItemHandler()); ksession.getWorkItemManager().registerWorkItemHandler("Email2", new SystemOutWorkItemHandler()); // Yes ProcessInstance processInstance = ksession.startProcess("com.sample.test"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); ksession = restoreSession(ksession, true); ksession.getWorkItemManager().registerWorkItemHandler("Email1", new SystemOutWorkItemHandler()); ksession.getWorkItemManager().registerWorkItemHandler("Email2", new SystemOutWorkItemHandler()); ksession.signalEvent("Message-YesMessage", "YesValue", processInstance.getId()); assertProcessInstanceCompleted(processInstance.getId(), ksession); ksession = restoreSession(ksession, true); ksession.getWorkItemManager().registerWorkItemHandler("Email1", new SystemOutWorkItemHandler()); ksession.getWorkItemManager().registerWorkItemHandler("Email2", new SystemOutWorkItemHandler()); // No processInstance = ksession.startProcess("com.sample.test"); ksession.signalEvent("Message-NoMessage", "NoValue", processInstance.getId()); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test(timeout=10000) public void testTimerBoundaryEventInterrupting() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 1); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventInterrupting.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); countDownListener.waitTillCompleted(); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test(timeout=10000) public void testTimerMultipleInstances() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-MultiInstanceLoopBoundaryTimer.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession.startProcess("boundaryTimerMultipleInstances"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); List<WorkItem> workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(3); for (WorkItem wi : workItems) { ksession.getWorkItemManager().completeWorkItem(wi.getId(), null); } assertProcessInstanceFinished(processInstance, ksession); }
@Test(timeout=10000) public void testEventSubprocessTimer() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Script Task 1", 1); KieBase kbase = createKnowledgeBase("BPMN2-EventSubprocessTimer.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ProcessInstance processInstance = ksession .startProcess("BPMN2-EventSubprocessTimer"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); WorkItem workItem = workItemHandler.getWorkItem(); assertThat(workItem).isNotNull(); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); assertProcessInstanceFinished(processInstance, ksession); assertNodeTriggered(processInstance.getId(), "start", "User Task 1", "end", "Sub Process 1", "start-sub", "Script Task 1", "end-sub"); }
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { String message = (String) workItem.getParameter("Message"); logger.debug("Sending message: {}", message); manager.completeWorkItem(workItem.getId(), null); }
public void complete(WorkItem workItem, Map<String, Object> results) { WorkItemManager manager = workItems.get(workItem); if (manager != null) { manager.completeWorkItem(workItem.getId(), results); } workItems.remove(workItem); update(); selectButton.setEnabled(getSelectedWorkItem() != null); }
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { String signal = (String) workItem.getParameter("Signal"); ksession.signalEvent(signal, null); manager.completeWorkItem(workItem.getId(), null); }
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { this.workItem = workItem; if (processId != null && strategy != null) { if (workItem.getParameter("isCheckedCheckbox") != null) { manager.completeWorkItem(workItem.getId(), workItem.getParameters()); } else { throw new ProcessWorkItemHandlerException(processId, strategy, new RuntimeException("On purpose")); } } manager.completeWorkItem(workItem.getId(), null); }
@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 testErrornousHandlerWithStrategyRetry() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("handler/BPMN2-UserTaskWithBooleanOutput.bpmn2", "handler/BPMN2-ScriptTask.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ErrornousWorkItemHandler workItemHandler = new ErrornousWorkItemHandler("ScriptTask", HandlingStrategy.RETRY); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); Map<String, Object> params = new HashMap<>(); params.put("isChecked", false); ProcessInstance processInstance = ksession.startProcess("com.sample.boolean", params); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); assertProcessVarValue(processInstance, "isChecked", "true"); }
parameters.put("y", myEntity); parameters.put("z", myVariableSerializable); long processInstanceId = ksession.startProcess( "com.sample.ruleflow", parameters ).getId(); ksession = reloadSession( ksession, kbase , env); WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.getProcessInstance( processInstanceId ); assertNotNull( processInstance ); assertEquals("SomeString", processInstance.getVariable("x")); ksession.getWorkItemManager().abortWorkItem( workItem.getId() );
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { RuntimeEngine runtime = runtimeManager.getRuntimeEngine(ProcessInstanceIdContext.get(workItem.getProcessInstanceId())); KieSession ksessionById = runtime.getKieSession(); 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")); manager.abortWorkItem(workItem.getId()); } else if (action.equals(OnErrorAction.RETHROW)) { if (e instanceof RuntimeException) {
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { Task task = createTaskBasedOnWorkItemParams(ksession, workItem); ContentData content = createTaskContentBasedOnWorkItemParams(ksession, workItem); try { long taskId = ((InternalTaskService) taskService).addTask(task, content); if (isAutoClaim(ksession, workItem, task)) { taskService.claim(taskId, (String) workItem.getParameter("SwimlaneActorId")); } } catch (Exception e) { if (action.equals(OnErrorAction.ABORT)) { manager.abortWorkItem(workItem.getId()); } else if (action.equals(OnErrorAction.RETHROW)) { if (e instanceof RuntimeException) { throw (RuntimeException) e; } else { throw new RuntimeException(e); } } else if (action.equals(OnErrorAction.LOG)) { StringBuilder logMsg = new StringBuilder(); logMsg.append(new Date()).append(": Error when creating task on task server for work item id ").append(workItem.getId()); logMsg.append(". Error reported by task server: ").append(e.getMessage()); logger.error(logMsg.toString(), e); } } }
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); } }