private void createKnowledgeSessionStartProcessEtc(KieBase kbase) { logger.info("session count=" + kbase.getKieSessions().size()); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, getKnowledgeSessionConfiguration(), env); addEventListenersToSession(ksession); 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.fireAllRules(); ksession.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), results); assertNull( ksession.getProcessInstance(processInstance.getId())); } finally { ksession.dispose();
@Test public void testLocalTransactionPerStatement() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( ResourceFactory.newByteArrayResource( ruleString.getBytes() ), ResourceType.DRL ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); } kbase.addPackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); List<?> list = new ArrayList<Object>(); ksession.setGlobal( "list", list ); ksession.insert( 1 ); ksession.insert( 2 ); ksession.insert( 3 ); ksession.fireAllRules(); assertEquals( 3, list.size() ); }
@Test(timeout=10000) @RequirePersistence public void testProcesWithHumanTaskWithTimer() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("Timer", 1); KieBase kbase = createKnowledgeBase("BPMN2-SubProcessWithTimer.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); TestWorkItemHandler workItemHandler = new TestWorkItemHandler(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = ksession.startProcess("subproc", params); ksession.getWorkItemManager().completeWorkItem( workItemHandler.getWorkItem().getId(), null); long sessionId = ksession.getIdentifier(); Environment env = ksession.getEnvironment(); ksession.dispose(); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, null, env); ksession.addEventListener(countDownListener); countDownListener.waitTillCompleted(); assertProcessInstanceFinished(processInstance, ksession); }
@Test public void testPersistenceWorkItems3() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); ksession.getWorkItemManager().registerWorkItemHandler("MyWork", new SystemOutWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); ksession.insert( "TestString" ); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState()); }
@Test public void testPersistenceState() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ClassPathResource( "StateProcess.rf" ), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); long id = ksession.getIdentifier(); ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); logger.debug( "Started process instance {}", processInstance.getId() ); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); ksession.insert(new ArrayList<Object>()); ksession.fireAllRules(); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNull( processInstance ); }
@Test public void create2ProcessInstances() throws Exception { long[] processId = new long[2]; StatefulKnowledgeSession ksession = reloadKnowledgeSession(); processId[0] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); processId[1] = ksession.createProcessInstance("org.jbpm.processinstance.helloworld", null).getId(); ksession.dispose(); assertProcessInstancesExist(processId); }
StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); long id = ksession.getIdentifier(); ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); logger.debug( "Started process instance {}", processInstance.getId() ); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); ksession.getWorkItemManager().completeWorkItem( workItem.getId(), null ); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession.signalEvent("MyEvent1", null, processInstance.getId()); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNotNull( processInstance ); ksession.signalEvent("MyEvent2", null, processInstance.getId()); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id, kbase, null, env ); processInstance = ksession.getProcessInstance( processInstance.getId() ); assertNull( processInstance );
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); ksession.dispose();
@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 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(); }
ksession.setGlobal( "list", list ); ksession.insert( 1 ); ksession.insert( 2 ); ut.commit(); ksession.insert( 3 ); ut.rollback(); ksession.fireAllRules(); ut.commit(); assertEquals( 2, ksession.insert( 3 ); ksession.insert( 4 ); ut.commit(); ksession.insert( 5 ); ksession.insert( 6 ); ut.rollback(); ksession.fireAllRules(); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( ksession.getIdentifier(), kbase, null, env ); ksession.insert( 7 ); ksession.insert( 8 ); ut.commit();
@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); }
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);
@Test public void testProcessListener() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add( new ClassPathResource( "WorkItemsProcess.rf" ), ResourceType.DRF ); InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addPackages( kbuilder.getKnowledgePackages() ); StatefulKnowledgeSession ksession = JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env ); final List<ProcessEvent> events = new ArrayList<ProcessEvent>(); ProcessEventListener listener = new ProcessEventListener() { ksession.addEventListener(listener); ProcessInstance processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); logger.debug( "Started process instance {}", processInstance.getId() ); assertTrue(events.get(11) instanceof ProcessStartedEvent); ksession.removeEventListener(listener); events.clear(); processInstance = ksession.startProcess( "org.drools.test.TestProcess" ); logger.debug( "Started process instance {}", processInstance.getId() );
str += "\n"; if ( kbuilder.hasErrors() ) { fail( kbuilder.getErrors().toString() ); kbase.addPackages( kbuilder.getKnowledgePackages() ); ksession.setGlobal( "list", list ); FactHandle atomicFH = ksession.insert( value ); ksession.fireAllRules(); ksession.update(atomicFH, value); ksession.fireAllRules(); String externalForm = atomicFH.toExternalForm(); ksession = InfinispanKnowledgeService.loadStatefulKnowledgeSession(ksession.getIdentifier(), kbase, null, env); atomicFH = ksession.execute(CommandFactory.fromExternalFactHandleCommand(externalForm)); ksession.update(atomicFH, value); ksession.fireAllRules(); list = (List<?>) ksession.getGlobal("list");
@Test public void testSignalEndWithData() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-IntermediateThrowEventSignalWithData.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); Map<String, Object> params = new HashMap<String, Object>(); ProcessInstance processInstance = ksession.startProcess("testThrowingSignalEvent", params); assertProcessInstanceActive(processInstance); ksession.signalEvent("mysignal", null, processInstance.getId()); assertProcessInstanceCompleted(processInstance); }
@Test(timeout=10000) @RequirePersistence public void testTimerBoundaryEventCycleISOWithPersistence() throws Exception { NodeLeftCountDownProcessEventListener countDownListener = new NodeLeftCountDownProcessEventListener("TimerEvent", 2); // load up the knowledge base KieBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventCycleISO.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ksession.addEventListener(countDownListener); long sessionId = ksession.getIdentifier(); Environment env = ksession.getEnvironment(); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler()); ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent"); assertProcessInstanceActive(processInstance); countDownListener.waitTillCompleted(); assertProcessInstanceActive(processInstance); logger.info("dispose"); ksession.dispose(); ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(sessionId, kbase, null, env); ksession.addEventListener(countDownListener); assertProcessInstanceActive(processInstance); ksession.abortProcessInstance(processInstance.getId()); assertProcessInstanceFinished(processInstance, ksession); }
ProcessInstance processInstance = ksession.createProcessInstance(PROCESS_ID, params); long processInstanceId = processInstance.getId(); Assert.assertTrue(processInstanceId > 0); Assert.assertEquals(ProcessInstance.STATE_PENDING, processInstance.getState()); ksession.insert(processInstance); ksession.startProcessInstance(processInstanceId); ksession.fireAllRules(); processInstance = ksession.getProcessInstance(processInstanceId); Assert.assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState()); processVar = (NonSerializableClass) ((WorkflowProcessInstance) processInstance).getVariable(VAR_NAME); Assert.assertNotNull(processVar);
@Test public void testOnEntryExitScript() throws Exception { KieBase kbase = createKnowledgeBaseWithoutDumper("BPMN2-OnEntryExitScriptProcess.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new SystemOutWorkItemHandler()); List<String> myList = new ArrayList<String>(); ksession.setGlobal("list", myList); ProcessInstance processInstance = ksession .startProcess("OnEntryExitScriptProcess"); assertProcessInstanceCompleted(processInstance); assertEquals(4, myList.size()); }
@Test public void testTerminateWithinSubprocessEnd() throws Exception { KieBase kbase = createKnowledgeBase("subprocess/BPMN2-SubprocessWithParallelSpitTerminate.bpmn2"); StatefulKnowledgeSession ksession = createKnowledgeSession(kbase); ProcessInstance processInstance = ksession.startProcess("BPMN2-SubprocessWithParallelSpitTerminate"); ksession.signalEvent("signal1", null, processInstance.getId()); assertProcessInstanceCompleted(processInstance); }