@Test public void testProcessListener() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("WorkItemsProcess.rf"), ResourceType.DRF); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession ksession = InfinispanKnowledgeService.newStatefulKnowledgeSession(kbase, null, env); final List<ProcessEvent> events = new ArrayList<ProcessEvent>(); ProcessEventListener listener = new ProcessEventListener() { public void afterNodeLeft(ProcessNodeLeftEvent event) { logger.debug("After node left: " + event.getNodeInstance().getNodeName()); events.add(event); } public void afterNodeTriggered(ProcessNodeTriggeredEvent event) { logger.debug("After node triggered: " + event.getNodeInstance().getNodeName()); events.add(event); } public void afterProcessCompleted(ProcessCompletedEvent event) { logger.debug("After process completed"); events.add(event); } public void afterProcessStarted(ProcessStartedEvent event) { logger.debug("After process started"); events.add(event); } public void beforeNodeLeft(ProcessNodeLeftEvent event) { logger.debug("Before node left: " + event.getNodeInstance().getNodeName()); events.add(event); } public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) { logger.debug("Before node triggered: " + event.getNodeInstance().getNodeName()); events.add(event); } public void beforeProcessCompleted(ProcessCompletedEvent event) { logger.debug("Before process completed"); events.add(event); } public void beforeProcessStarted(ProcessStartedEvent event) { logger.debug("Before process started"); events.add(event); } public void afterVariableChanged(ProcessVariableChangedEvent event) { logger.debug("After Variable Changed"); events.add(event); } public void beforeVariableChanged(ProcessVariableChangedEvent event) { logger.debug("Before Variable Changed"); events.add(event); } }; ksession.addEventListener(listener); ProcessInstance processInstance = ksession.startProcess("org.drools.test.TestProcess"); logger.debug("Started process instance " + processInstance.getId()); assertEquals(12, events.size()); assertTrue(events.get(0) instanceof ProcessStartedEvent); assertTrue(events.get(1) instanceof ProcessNodeTriggeredEvent); assertTrue(events.get(2) instanceof ProcessNodeLeftEvent); assertTrue(events.get(3) instanceof ProcessNodeTriggeredEvent); assertTrue(events.get(4) instanceof ProcessNodeLeftEvent); assertTrue(events.get(5) instanceof ProcessNodeTriggeredEvent); assertTrue(events.get(6) instanceof ProcessNodeTriggeredEvent); assertTrue(events.get(7) instanceof ProcessNodeLeftEvent); assertTrue(events.get(8) instanceof ProcessNodeTriggeredEvent); assertTrue(events.get(9) instanceof ProcessNodeLeftEvent); assertTrue(events.get(10) instanceof ProcessNodeTriggeredEvent); 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()); assertTrue(events.isEmpty()); }