public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { String message = (String) workItem.getParameter("Message"); logger.debug("Sending message: {}", message); manager.completeWorkItem(workItem.getId(), null); }
public WorkItemExceptionInfo(WorkItem workItem, Throwable cause, boolean onExecute) { this.timeThrown = new Date(); this.cause = cause; this.onExecute = onExecute; this.processInstanceId = workItem.getProcessInstanceId(); this.workItemId = workItem.getId(); this.workItemName = workItem.getName(); this.workItemParameters = Collections.unmodifiableMap(workItem.getParameters()); }
@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); }
@Test public void testSignalBoundaryEventNoInteruptOnMultiInstanceSubprocess() throws Exception { KieBase kbase = createKnowledgeBase( "subprocess/BPMN2-MultiInstanceSubprocessWithBoundarySignalNoInterupting.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); Map<String, Object> params = new HashMap<String, Object>(); List<String> approvers = new ArrayList<String>(); approvers.add("john"); approvers.add("john"); params.put("approvers", approvers); ProcessInstance processInstance = ksession.startProcess("boundary-catch-error-event", params); assertProcessInstanceActive(processInstance); List<WorkItem> workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(2); ksession.signalEvent("Outside", null, processInstance.getId()); assertProcessInstanceActive(processInstance.getId(), ksession); for (WorkItem wi : workItems) { ksession.getWorkItemManager().completeWorkItem(wi.getId(), null); } assertProcessInstanceFinished(processInstance, ksession); ksession.dispose(); }
@Test public void testMultipleStartEventsRegularStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-MultipleStartEventProcessLongInterval.bpmn2"); ksession = createKnowledgeSession(kbase); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ProcessInstance processInstance = ksession .startProcess("MultipleStartEvents"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); WorkItem workItem = workItemHandler.getWorkItem(); assertThat(workItem).isNotNull(); assertThat(workItem.getParameter("ActorId")).isEqualTo("john"); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); assertProcessInstanceFinished(processInstance, ksession); }
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ksession.addEventListener(new DefaultProcessEventListener() { @Override public void afterNodeLeft(ProcessNodeLeftEvent event) { .startProcess("BoundaryEventWithNonEffectiveSignal"); ksession.signalEvent(signal, signal); ksession.getWorkItemManager().completeWorkItem( handler.getWorkItem().getId(), null); ksession.getWorkItemManager().completeWorkItem( handler.getWorkItem().getId(), null); assertThat(eventAfterNodeLeftTriggered.isFalse()).isTrue();
@Test public void compensationInSubSubProcesses() throws Exception { KieSession ksession = createKnowledgeSession("compensation/BPMN2-Compensation-InSubSubProcess.bpmn2"); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "0"); ProcessInstance processInstance = ksession.startProcess("CompensateSubSubSub", params); ksession.signalEvent("Compensation", "_C-2", processInstance.getId()); ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItem().getId(), null); ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItem().getId(), null); ksession.getWorkItemManager().completeWorkItem(workItemHandler.getWorkItem().getId(), null); // compensation activity (assoc. with script task) signaled *after* script task assertProcessInstanceCompleted(processInstance.getId(), ksession); assertProcessVarValue(processInstance, "x", "2"); }
@Test public void createProcessStartItDisposeAndLoadItAgain() { String processId = "minimalProcess"; String workName = "MyWork"; KieBase kbase = createKieBase(ProcessCreatorForHelp.newProcessWithOneWork( processId, workName )); StatefulKnowledgeSession ksession = createSession(kbase); long ksessionId = ksession.getIdentifier(); DummyWorkItemHandler handler = new DummyWorkItemHandler(); ksession.getWorkItemManager() .registerWorkItemHandler(workName, handler); long process1Id = ksession.startProcess(processId).getId(); ksession = disposeAndReloadSession(ksession, ksessionId, kbase); ksession.getWorkItemManager().registerWorkItemHandler(workName, handler); long workItemId = handler.getLatestWorkItem().getId(); ksession.getWorkItemManager().completeWorkItem(workItemId, null); Assert.assertNotNull(ksession); Assert.assertNull( ksession.getProcessInstance( process1Id ) ); }
@Test public void testUserTaskParametrizedInput() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-UserTaskWithParametrizedInput.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ProcessInstance processInstance = ksession.startProcess("UserTask"); assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE); ksession = restoreSession(ksession, true); WorkItem workItem = workItemHandler.getWorkItem(); assertNotNull(workItem); assertEquals("Executing task of process instance " + processInstance.getId() + " as work item with Hello", workItem.getParameter("Description").toString().trim()); ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null); assertProcessInstanceFinished(processInstance, ksession); ksession.dispose(); }
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler testHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", testHandler); ksession.addEventListener(new ProcessEventListener() { public void beforeVariableChanged(ProcessVariableChangedEvent arg0) { ksession.startProcess("org.jbpm.HelloWorld"); ksession.getWorkItemManager().completeWorkItem(testHandler.getWorkItem().getId(), null); assertProcessInstanceActive(processInstance); ksession.getWorkItemManager().completeWorkItem(testHandler.getWorkItem().getId(), null); assertProcessInstanceFinished(processInstance, ksession);
@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); }
int origNumObjects = ksession.getObjects().size(); long id = ksession.getIdentifier(); ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); ksession.insert( "TestString" ); logger.debug( "Started process instance {}", processInstance.getId() ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null ); ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null );
protected Task createTaskBasedOnWorkItemParams(KieSession session, WorkItem workItem) { InternalTask task = (InternalTask) TaskModelProvider.getFactory().newTask(); String taskName = (String) workItem.getParameter("NodeName"); CaseData caseFile = null; String locale = (String) workItem.getParameter("Locale"); if (locale == null) { locale = "en-UK"; String formName = (String) workItem.getParameter("TaskName"); if(formName != null){ task.setFormName(formName); String comment = (String) workItem.getParameter("Comment"); if (comment == null) { comment = ""; String description = (String) workItem.getParameter("Description"); if (description == null) { description = comment; String priorityString = (String) workItem.getParameter("Priority"); int priority = 0; if (priorityString != null) { taskData.setWorkItemId(workItem.getId()); taskData.setProcessInstanceId(workItem.getProcessInstanceId()); if (session != null) { if (session.getProcessInstance(workItem.getProcessInstanceId()) != null) { taskData.setProcessId(session.getProcessInstance(workItem.getProcessInstanceId()).getProcess().getId());
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); String [] fireballVarHolder = new String[1]; processParams.put("fireball", fireballVarHolder); ProcessInstance processInstance = ksession.createProcessInstance(PROCESS_NAME, processParams); ksession.insert(processInstance); ksession.startProcessInstance(processInstance.getId()); ksession.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), results); assertNull( ksession.getProcessInstance(processInstance.getId())); } finally {
@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 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 testSignalBetweenProcesses() throws Exception { KieBase kbase = createKnowledgeBase( "BPMN2-IntermediateCatchSignalSingle.bpmn2", "BPMN2-IntermediateThrowEventSignal.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession .startProcess("BPMN2-IntermediateCatchSignalSingle"); ksession.getWorkItemManager().completeWorkItem( handler.getWorkItem().getId(), null); ProcessInstance processInstance2 = ksession .startProcess("SignalIntermediateEvent"); assertProcessInstanceFinished(processInstance2, ksession); assertProcessInstanceFinished(processInstance, ksession); }
ksession = createKnowledgeSession(kbase); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); ProcessInstance processInstance = ksession.startProcess("ParentProcess", params); assertProcessInstanceActive(processInstance); WorkItem workItem = workItemHandler.getWorkItem(); assertNotNull(workItem); assertEquals("john", workItem.getParameter("ActorId")); long childPI = workItem.getProcessInstanceId(); assertNotEquals("Child process instance must be different", processInstance.getId(), childPI); ksession.abortProcessInstance(childPI); assertProcessInstanceFinished(processInstance, ksession); assertEquals(ProcessInstance.STATE_ABORTED, log.getStatus().intValue()); log = logService.findProcessInstance(processInstance.getId()); assertNotNull(log); assertEquals("Parent process should be completed and not aborted", ProcessInstance.STATE_COMPLETED, log.getStatus().intValue());
@Override public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { manager.completeWorkItem(workItem.getId(), outputDataSupplier.apply(workItem.getParameters())); }