use of org.kie.api.event.process.ProcessNodeLeftEvent in project jbpm by kiegroup.
the class ErrorEventTest method testEventSubprocessErrorThrowOnTask.
@Test
public void testEventSubprocessErrorThrowOnTask() throws Exception {
KieBase kbase = createKnowledgeBase("BPMN2-EventSubprocessError.bpmn2");
final List<Long> executednodes = new ArrayList<Long>();
ProcessEventListener listener = new DefaultProcessEventListener() {
@Override
public void afterNodeLeft(ProcessNodeLeftEvent event) {
if (event.getNodeInstance().getNodeName().equals("Script Task 1")) {
executednodes.add(event.getNodeInstance().getId());
}
}
};
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(listener);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new TestWorkItemHandler() {
@Override
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
throw new MyError();
}
@Override
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
manager.abortWorkItem(workItem.getId());
}
});
ProcessInstance processInstance = ksession.startProcess("BPMN2-EventSubprocessError");
assertProcessInstanceFinished(processInstance, ksession);
assertProcessInstanceAborted(processInstance);
assertNodeTriggered(processInstance.getId(), "start", "User Task 1", "Sub Process 1", "start-sub", "Script Task 1", "end-sub");
assertEquals(1, executednodes.size());
}
use of org.kie.api.event.process.ProcessNodeLeftEvent in project jbpm by kiegroup.
the class ErrorEventTest method testEventSubprocessErrorWithErrorCode.
@Test
public void testEventSubprocessErrorWithErrorCode() throws Exception {
KieBase kbase = createKnowledgeBase("subprocess/EventSubprocessErrorHandlingWithErrorCode.bpmn2");
final List<Long> executednodes = new ArrayList<Long>();
ProcessEventListener listener = new DefaultProcessEventListener() {
@Override
public void afterNodeLeft(ProcessNodeLeftEvent event) {
if (event.getNodeInstance().getNodeName().equals("Script2")) {
executednodes.add(event.getNodeInstance().getId());
}
}
};
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(listener);
ProcessInstance processInstance = ksession.startProcess("order-fulfillment-bpm.ccc");
assertProcessInstanceFinished(processInstance, ksession);
assertNodeTriggered(processInstance.getId(), "start", "Script1", "starterror", "Script2", "end2", "eventsubprocess");
assertProcessVarValue(processInstance, "CapturedException", "java.lang.RuntimeException: XXX");
assertEquals(1, executednodes.size());
}
use of org.kie.api.event.process.ProcessNodeLeftEvent in project jbpm by kiegroup.
the class EscalationEventTest method testEventSubprocessEscalation.
@Test
public void testEventSubprocessEscalation() throws Exception {
KieBase kbase = createKnowledgeBase("escalation/BPMN2-EventSubprocessEscalation.bpmn2");
final List<Long> executednodes = new ArrayList<Long>();
ProcessEventListener listener = new DefaultProcessEventListener() {
@Override
public void afterNodeLeft(ProcessNodeLeftEvent event) {
if (event.getNodeInstance().getNodeName().equals("Script Task 1")) {
executednodes.add(event.getNodeInstance().getId());
}
}
};
ksession = createKnowledgeSession(kbase);
ksession.addEventListener(listener);
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
ProcessInstance processInstance = ksession.startProcess("BPMN2-EventSubprocessEscalation");
assertProcessInstanceActive(processInstance);
ksession = restoreSession(ksession, true);
ksession.addEventListener(listener);
WorkItem workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
assertProcessInstanceFinished(processInstance, ksession);
assertNodeTriggered(processInstance.getId(), "start", "User Task 1", "end", "Sub Process 1", "start-sub", "Script Task 1", "end-sub");
assertEquals(1, executednodes.size());
}
use of org.kie.api.event.process.ProcessNodeLeftEvent in project jbpm by kiegroup.
the class DynamicProcessTest method testDynamicProcess.
@Test
public void testDynamicProcess() throws Exception {
RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.jbpm.HelloWorld");
factory.name("HelloWorldProcess").version("1.0").packageName("org.jbpm").startNode(1).name("Start").done().humanTaskNode(2).name("Task1").actorId("krisv").taskName("MyTask").done().endNode(3).name("End").done().connection(1, 2).connection(2, 3);
final RuleFlowProcess process = factory.validate().getProcess();
Resource resource = ResourceFactory.newByteArrayResource(XmlRuleFlowProcessDumper.INSTANCE.dump(process).getBytes());
// source path or target path must be set to be added into kbase
resource.setSourcePath("/tmp/dynamicProcess.bpmn2");
KieBase kbase = createKnowledgeBaseFromResources(resource);
StatefulKnowledgeSession ksession = createKnowledgeSession(kbase);
TestWorkItemHandler testHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", testHandler);
ksession.addEventListener(new ProcessEventListener() {
public void beforeVariableChanged(ProcessVariableChangedEvent arg0) {
}
public void beforeProcessStarted(ProcessStartedEvent arg0) {
logger.info("{}", arg0);
}
public void beforeProcessCompleted(ProcessCompletedEvent arg0) {
logger.info("{}", arg0);
}
public void beforeNodeTriggered(ProcessNodeTriggeredEvent arg0) {
logger.info("{}", arg0);
}
public void beforeNodeLeft(ProcessNodeLeftEvent arg0) {
logger.info("{}", arg0);
}
public void afterVariableChanged(ProcessVariableChangedEvent arg0) {
}
public void afterProcessStarted(ProcessStartedEvent arg0) {
}
public void afterProcessCompleted(ProcessCompletedEvent arg0) {
}
public void afterNodeTriggered(ProcessNodeTriggeredEvent arg0) {
}
public void afterNodeLeft(ProcessNodeLeftEvent arg0) {
}
});
final ProcessInstanceImpl processInstance = (ProcessInstanceImpl) ksession.startProcess("org.jbpm.HelloWorld");
HumanTaskNode node = new HumanTaskNode();
node.setName("Task2");
node.setId(4);
insertNodeInBetween(process, 2, 3, node);
((CommandBasedStatefulKnowledgeSession) ksession).getRunner().execute(new ExecutableCommand<Void>() {
public Void execute(Context context) {
StatefulKnowledgeSession ksession = (StatefulKnowledgeSession) ((RegistryContext) context).lookup(KieSession.class);
((ProcessInstanceImpl) ksession.getProcessInstance(processInstance.getId())).updateProcess(process);
return null;
}
});
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(testHandler.getWorkItem().getId(), null);
assertProcessInstanceActive(processInstance);
ksession.getWorkItemManager().completeWorkItem(testHandler.getWorkItem().getId(), null);
assertProcessInstanceFinished(processInstance, ksession);
ksession.dispose();
}
use of org.kie.api.event.process.ProcessNodeLeftEvent in project jbpm by kiegroup.
the class PersistentStatefulSessionTest method testProcessListener.
@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() {
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());
}
Aggregations