@Test(timeout=10000) public void testIntermediateCatchEventTimerCycleCron() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerCycleCron.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Override public void run() { TransactionStatus status = transactionManager.getTransaction(defTransDefinition); log.debug("Attempting to abort to lock process instance for 3 secs "); // getProcessInstance does not lock reliably so let's make a change that actually does something to the entity ksession.abortProcessInstance(processInstance.getId()); // let thread 2 start once we have the transaction txAcquiredSignal.countDown(); try { // keep the lock until thread 2 let's us know it's done pessLockExceptionSignal.await(); } catch (InterruptedException e) { // do nothing } log.debug("Commited process instance aborting after 3 secs"); transactionManager.commit(status); // let main test thread know we're done threadsAreDoneLatch.countDown(); } };
processInstance = ((CorrelationAwareProcessRuntime)runtime.getKieSession()).startProcess(_processId, correlationKey, inputMap); } else { processInstance = runtime.getKieSession().startProcess(_processId, inputMap); processInstanceId = Long.valueOf(processInstance.getId()); if (ExchangePattern.IN_OUT.equals(exchangePattern)) { expressionVariables.putAll(getGlobalVariables(runtime)); expressionVariables.putAll(getProcessInstanceVariables(processInstance)); runtime.getKieSession().abortProcessInstance(processInstanceId); if (!_persistent) { _runtimeManager.disposeRuntimeEngine(runtime);
@Test(timeout=10000) public void testTimerBoundaryEventCronCycleVariable() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Send Update Timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-BoundaryTimerCycleCronVariable.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("cronStr", "0/1 * * * * ?"); ProcessInstance processInstance = ksession.startProcess("boundaryTimerCycleCron", parameters); assertProcessInstanceActive(processInstance); List<WorkItem> workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(1); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(3); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
processInstance = ((CorrelationAwareProcessRuntime)runtime.getKieSession()).startProcess(_processId, correlationKey, inputMap); } else { processInstance = runtime.getKieSession().startProcess(_processId, inputMap); processInstanceId = Long.valueOf(processInstance.getId()); if (ExchangePattern.IN_OUT.equals(exchangePattern)) { expressionVariables.putAll(getGlobalVariables(runtime)); expressionVariables.putAll(getProcessInstanceVariables(processInstance)); runtime.getKieSession().abortProcessInstance(processInstanceId); if (!_persistent) { _runtimeManager.disposeRuntimeEngine(runtime);
@Override public void run() { TransactionStatus status = transactionManager.getTransaction(defTransDefinition); log.debug("Attempting to abort to lock process instance for 3 secs "); // getProcessInstance does not lock reliably so let's make a change that actually does something to the entity ksession.abortProcessInstance(processInstance.getId()); // let thread 2 start once we have the transaction txAcquiredSignal.countDown(); try { // keep the lock until thread 2 let's us know it's done pessLockExceptionSignal.await(); } catch (InterruptedException e) { // do nothing } log.debug("Commited process instance aborting after 3 secs"); transactionManager.commit(status); // let main test thread know we're done threadsAreDoneLatch.countDown(); } };
@Test(timeout=10000) public void testMultipleTimerBoundaryEventCronCycleVariable() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Send Update Timer", 2); KieBase kbase = createKnowledgeBase("BPMN2-MultipleBoundaryTimerCycleCronVariable.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("cronStr", "0/1 * * * * ?"); ProcessInstance processInstance = ksession.startProcess("boundaryTimerCycleCron", parameters); assertProcessInstanceActive(processInstance); List<WorkItem> workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(1); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(2); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
processInstance = ((CorrelationAwareProcessRuntime)runtime.getKieSession()).startProcess(_processId, correlationKey, inputMap); } else { processInstance = runtime.getKieSession().startProcess(_processId, inputMap); processInstanceId = Long.valueOf(processInstance.getId()); if (ExchangePattern.IN_OUT.equals(exchangePattern)) { expressionVariables.putAll(getGlobalVariables(runtime)); expressionVariables.putAll(getProcessInstanceVariables(processInstance)); runtime.getKieSession().abortProcessInstance(processInstanceId); if (!_persistent) { _runtimeManager.disposeRuntimeEngine(runtime);
@Test(timeout=10000) public void testTimerBoundaryEventCronCycle() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Send Update Timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-BoundaryTimerCycleCron.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession.startProcess("boundaryTimerCycleCron"); assertProcessInstanceActive(processInstance); List<WorkItem> workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(1); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); workItems = handler.getWorkItems(); assertThat(workItems).isNotNull(); assertThat(workItems.size()).isEqualTo(3); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test(timeout=10000) public void testIntermediateTimerEventMI() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("After timer", 3); KieBase kbase = createKnowledgeBase("timer/BPMN2-IntermediateTimerEventMI.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler handler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", handler); ProcessInstance processInstance = ksession.startProcess("defaultprocessid"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance.getId(), ksession); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceAborted(processInstance.getId(), ksession); }
@Test(timeout=10000) public void testIntermediateCatchEventTimerCycleISO() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 5); KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerCycleISO.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); }
@Test(timeout=10000) public void testTimerBoundaryEventCycle2() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 3); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventCycle2.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); }
@Test(timeout=10000) @RequirePersistence(false) public void testIntermediateCatchEventTimerCycleWithError() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerCycleWithError.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); Map<String, Object> params = new HashMap<String, Object>(); params.put("x", 0); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent", params); assertProcessInstanceActive(processInstance); // now wait for 1 second for timer to trigger countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); processInstance = ksession.getProcessInstance(processInstance.getId()); Integer xValue = (Integer) ((WorkflowProcessInstance) processInstance).getVariable("x"); assertThat(xValue).isEqualTo(3); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@RequirePersistence @Test(timeout=10000) public void testNullVariableInScriptTaskProcess() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Timer", 1, true); KieBase kbase = createKnowledgeBase("BPMN2-NullVariableInScriptTaskProcess.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession .startProcess("nullVariableInScriptAfterTimer"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); ProcessInstance pi = ksession.getProcessInstance(processInstance.getId()); assertNotNull(pi); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
@Test(timeout=10000) public void testIntermediateCatchEventTimerCycle2() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("timer", 3); KieBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimerCycle2.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); // now wait for 1 second for timer to trigger countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); }
@Test(timeout=10000) @RequirePersistence(false) public void testTimerBoundaryEventCycleISO() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 2); KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventCycleISO.bpmn2"); ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); }
@Test(timeout=10000) public void testEventBasedSplitWithCronTimerAndSignal() throws Exception { System.setProperty("jbpm.enable.multi.con", "true"); ksession.addEventListener(countDownListener4); ProcessInstance processInstance = ksession.startProcess("timerWithEventBasedGateway"); assertProcessInstanceActive(processInstance.getId(), ksession); assertThat(wi.size()).isEqualTo(3); ksession.abortProcessInstance(processInstance.getId()); } finally {
@Test public void testCancelNonRegisteredWorkItemHandler() { String processId = "org.drools.actions"; new Person( "John Doe" ) ); ProcessInstance processInstance = ksession.startProcess( "org.drools.actions", parameters ); long processInstanceId = processInstance.getId(); Assert.assertEquals( ProcessInstance.STATE_ACTIVE, processInstance.getState() ); ksession.abortProcessInstance( processInstanceId ); Assert.fail( "should fail if WorkItemHandler for" + workName + "is not registered" ); } catch ( WorkItemHandlerNotFoundException wihnfe ) {
@Test(timeout=10000) @RequirePersistence public void testIntermediateCatchEventTimerCycleWithErrorWithPersistence() throws Exception { ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler()); ksession.addEventListener(countDownListener); ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent"); assertProcessInstanceActive(processInstance); final long piId = processInstance.getId(); ksession.execute(new ExecutableCommand<Void>() { ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession);
@Test @Ignore public void testCancelNonRegisteredWorkItemHandler() { String processId = "org.drools.actions"; String workName = "Unnexistent Task"; RuleFlowProcess process = getWorkItemProcess( processId, workName ); KieBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); ((KnowledgeBaseImpl) kbase).addProcess( process ); KieSession ksession = createSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler( workName, new DoNothingWorkItemHandler() ); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put( "UserName", "John Doe" ); parameters.put( "Person", new Person( "John Doe" ) ); ProcessInstance processInstance = ksession.startProcess( "org.drools.actions", parameters ); long processInstanceId = processInstance.getId(); Assert.assertEquals( ProcessInstance.STATE_ACTIVE, processInstance.getState() ); ksession.getWorkItemManager().registerWorkItemHandler( workName, null ); try { ksession.abortProcessInstance( processInstanceId ); Assert.fail( "should fail if WorkItemHandler for" + workName + "is not registered" ); } catch ( WorkItemHandlerNotFoundException wihnfe ) { } Assert.assertEquals( ProcessInstance.STATE_ABORTED, processInstance.getState() ); }