@Test public void testMultipleMessageSignalSubprocess() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-MultipleMessageSignalSubprocess.bpmn2"); ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("com.sample.bpmn.Multiple_MessageSignal_Subprocess"); logger.debug("Parent Process ID: " + processInstance.getId()); ksession.signalEvent("Message-Message 1","Test",processInstance.getId()); assertProcessInstanceActive(processInstance.getId(), ksession); ksession.signalEvent("Message-Message 1","Test",processInstance.getId()); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test public void testIntermediateCatchEventMessage() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventMessage.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); ksession = restoreSession(ksession, true); // now signal process instance ksession.signalEvent("Message-HelloMessage", "SomeValue", processInstance.getId()); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test public void testSignalStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(list.size()).isEqualTo(1); }
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(); }
@Test public void testIntermediateCatchEventSignal() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertThat(processInstance.getState()).isEqualTo(ProcessInstance.STATE_ACTIVE); ksession = restoreSession(ksession, true); // now signal process instance ksession.signalEvent("MyMessage", "SomeValue", processInstance.getId()); assertProcessInstanceCompleted(processInstance.getId(), ksession); }
@Test public void testEventSubprocessWithEmbeddedSignals() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-EventSubprocessErrorSignalEmbedded.bpmn2"); ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("project2.myerrorprocess"); assertProcessInstanceActive(processInstance.getId(), ksession); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.signalEvent("signal1", null, processInstance.getId()); assertProcessInstanceActive(processInstance.getId(), ksession); for (NodeInstance nodeInstance: ((WorkflowProcessInstance) processInstance).getNodeInstances()) { System.out.println("Active node instance " + nodeInstance); } ksession.signalEvent("signal2", null, processInstance.getId()); assertProcessInstanceActive(processInstance.getId(), ksession); ksession.signalEvent("signal3", null, processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testMessageStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-MessageStart.bpmn2"); KieSession ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("Message-HelloMessage", "NewValue"); assertThat(list.size()).isEqualTo(1); }
KieSession ksession1 = runtime1.getKieSession(); assertNotNull(ksession1); ProcessInstance processInstance = ksession1.startProcess("IntermediateCatchEventWithRef"); manager.disposeRuntimeEngine(runtime1); KieSession ksession2 = runtime2.getKieSession(); assertNotNull(ksession2); ProcessInstance processInstance2 = ksession2.startProcess("IntermediateCatchEventWithRef"); manager2.disposeRuntimeEngine(runtime2); runtime1 = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstance.getId())); ksession1 = runtime1.getKieSession(); ksession1.signalEvent("Signal1", "first"); manager.disposeRuntimeEngine(runtime1); ProcessInstanceLog pi1Log = auditService.findProcessInstance(processInstance.getId()); assertNotNull(pi1Log); assertEquals(ProcessInstance.STATE_COMPLETED, pi1Log.getStatus().intValue()); ProcessInstanceLog pi2Log = auditService.findProcessInstance(processInstance2.getId()); assertNotNull(pi2Log); assertEquals(ProcessInstance.STATE_ACTIVE, pi2Log.getStatus().intValue()); runtime2 = manager2.getRuntimeEngine(ProcessInstanceIdContext.get(processInstance2.getId())); ksession2 = runtime2.getKieSession(); ksession2.signalEvent("Signal1", "second"); manager2.disposeRuntimeEngine(runtime2); pi2Log = auditService.findProcessInstance(processInstance2.getId());
@Test public void testMessageBoundaryEventOnTask() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-BoundaryMessageEventOnTask.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler()); ProcessInstance processInstance = ksession .startProcess("BoundaryMessageOnTask"); ksession.signalEvent("Message-HelloMessage", "message data"); assertProcessInstanceFinished(processInstance, ksession); assertNodeTriggered(processInstance.getId(), "StartProcess", "User Task", "Boundary event", "Condition met", "End2"); }
@Test public void testEventSubprocessWithExpression() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-EventSubprocessSignalExpression.bpmn2"); ksession = createKnowledgeSession(kbase); Map<String, Object> params = new HashMap<>(); params.put("x", "signalling"); ProcessInstance processInstance = ksession.startProcess("BPMN2-EventSubprocessSignalExpression", params); assertProcessInstanceActive(processInstance.getId(), ksession); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.signalEvent("signalling", null, processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testMessageStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-MessageStart.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.signalEvent("Message-HelloMessage", "NewValue"); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); }
@Test public void testSignalBoundaryEventOnTaskWithSignalName() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-BoundarySignalWithNameEventOnTaskbpmn2.bpmn"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler()); ksession.addEventListener(LOGGING_EVENT_LISTENER); ProcessInstance processInstance = ksession .startProcess("BoundarySignalOnTask"); ksession.signalEvent("MySignal", "value"); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testEventBasedSplitWithSubprocess() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-ExclusiveEventBasedGatewayInSubprocess.bpmn2"); ksession = createKnowledgeSession(kbase); // Stop ProcessInstance processInstance = ksession.startProcess("com.sample.bpmn.testEBGInSubprocess"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.signalEvent("StopSignal", "", processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); // Continue and Stop processInstance = ksession.startProcess("com.sample.bpmn.testEBGInSubprocess"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.signalEvent("ContinueSignal", "", processInstance.getId()); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.signalEvent("StopSignal", "", processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testSignalStart() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SignalStart.bpmn2"); ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance().getId()); } }); ksession.signalEvent("MySignal", "NewValue"); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); }
@Test public void testIntermediateCatchEventSignalAndBoundarySignalEvent() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-BoundaryEventWithSignals.bpmn2"); ksession = createKnowledgeSession(kbase); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession.startProcess("boundaryeventtest"); assertProcessInstanceActive(processInstance); ksession = restoreSession(ksession, true); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); // now signal process instance ksession.signalEvent("moveon", "", processInstance.getId()); assertProcessInstanceActive(processInstance); WorkItem wi = handler.getWorkItem(); assertThat(wi).isNotNull(); // signal boundary event on user task ksession.signalEvent("moveon", "", processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testMultipleEnabledOnSingleConditionalSequenceFlow() throws Exception { System.setProperty("jbpm.enable.multi.con", "true"); KieBase kbase = createKnowledgeBase("BPMN2-MultiConnEnabled.bpmn2"); ksession = createKnowledgeSession(kbase); final List<Long> list = new ArrayList<Long>(); ksession.addEventListener(new DefaultProcessEventListener() { public void afterNodeTriggered(org.kie.api.event.process.ProcessNodeTriggeredEvent event) { if ("Task2".equals(event.getNodeInstance().getNodeName())) { list.add(event.getNodeInstance().getNodeId()); } } }); assertEquals(0, list.size()); ProcessInstance processInstance = ksession.startProcess("BPMN2-MultiConnEnabled"); assertProcessInstanceActive(processInstance); ksession.signalEvent("signal", null, processInstance.getId()); assertProcessInstanceCompleted(processInstance); assertEquals(1, list.size()); System.clearProperty("jbpm.enable.multi.con"); }
@Test public void testSignalStartWithCustomEvent() throws Exception { KieBase kbase = createKnowledgeBase("BPMN2-SingalStartWithCustomEvent.bpmn2"); ksession = createKnowledgeSession(kbase); final List<ProcessInstance> list = new ArrayList<ProcessInstance>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance()); } }); NotAvailableGoodsReport report = new NotAvailableGoodsReport("test"); ksession.signalEvent("SignalNotAvailableGoods", report); assertThat(getNumberOfProcessInstances("org.jbpm.example.SignalObjectProcess")).isEqualTo(1); assertThat(list.size()).isEqualTo(1); assertProcessVarValue(list.get(0), "report", "NotAvailableGoodsReport{type:test}"); }
@Test public void compensationTwiceViaSignal() throws Exception { KieSession ksession = createKnowledgeSession("compensation/BPMN2-Compensation-IntermediateThrowEvent.bpmn2"); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", "0"); String processId = "CompensateIntermediateThrowEvent"; ProcessInstance processInstance = ksession.startProcess(processId, params); // twice ksession.signalEvent("Compensation", CompensationScope.IMPLICIT_COMPENSATION_PREFIX + processId, processInstance.getId()); 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(timeout=10000) public void testEventSubprocessMessageWithLocalVars() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 1); KieBase kbase = createKnowledgeBase("subprocess/BPMN2-EventSubProcessWithLocalVariables.bpmn2"); final Set<String> variablevalues = new HashSet<String>(); ProcessEventListener listener = new DefaultProcessEventListener() { @Override public void afterNodeLeft(ProcessNodeLeftEvent event) { @SuppressWarnings("unchecked") Map<String, String> variable = (Map<String, String>)event.getNodeInstance().getVariable("richiesta"); if (variable != null) { variablevalues.addAll(variable.keySet()); } } }; ksession = createKnowledgeSession(kbase); ksession.addEventListener(listener); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("EventSPWithVars"); assertProcessInstanceActive(processInstance); Map<String, String> data = new HashMap<String, String>(); ksession.signalEvent("Message-MAIL", data, processInstance.getId()); countDownListener.waitTillCompleted(); processInstance = ksession.getProcessInstance(processInstance.getId()); assertThat(processInstance).isNull(); assertThat(variablevalues.size()).isEqualTo(2); assertThat(variablevalues.contains("SCRIPT1")).isTrue(); assertThat(variablevalues.contains("SCRIPT2")).isTrue(); }
@Test(timeout=10000) public void testSignalStartWithTransformation() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("StartProcess", 1); KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-SignalStartWithTransformation.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); final List<ProcessInstance> list = new ArrayList<ProcessInstance>(); ksession.addEventListener(new DefaultProcessEventListener() { public void beforeProcessStarted(ProcessStartedEvent event) { list.add(event.getProcessInstance()); } }); ksession.signalEvent("MySignal", "NewValue"); countDownListener.waitTillCompleted(); assertThat(getNumberOfProcessInstances("Minimal")).isEqualTo(1); assertThat(list).isNotNull(); assertThat(list.size()).isEqualTo(1); String var = getProcessVarValue(list.get(0), "x"); assertThat(var).isEqualTo("NEWVALUE"); }