Skip to content

Commit

Permalink
JBPM-7661: NodeInstanceLog for node left events should be fired on be… (
Browse files Browse the repository at this point in the history
#1318)

* JBPM-7661: NodeInstanceLog for node left events should be fired on beforeNodeLeft

* Fix jbpm-in-container test
  • Loading branch information
nmirasch authored and mswiderski committed Sep 28, 2018
1 parent 64d9bf0 commit 57cccfc
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 23 deletions.
Expand Up @@ -123,8 +123,6 @@ public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {


@Override @Override
public void afterNodeLeft(ProcessNodeLeftEvent event) { public void afterNodeLeft(ProcessNodeLeftEvent event) {
NodeInstanceLog log = (NodeInstanceLog) builder.buildEvent(event, null);
persist(log, event);
} }


@Override @Override
Expand Down Expand Up @@ -217,9 +215,10 @@ public void afterSLAViolated(SLAViolatedEvent event) {


@Override @Override
public void beforeNodeLeft(ProcessNodeLeftEvent event) { public void beforeNodeLeft(ProcessNodeLeftEvent event) {

NodeInstanceLog log = (NodeInstanceLog) builder.buildEvent(event, null);

persist(log, event);
} }

@Override @Override
public void beforeVariableChanged(ProcessVariableChangedEvent event) { public void beforeVariableChanged(ProcessVariableChangedEvent event) {


Expand Down
Expand Up @@ -115,6 +115,7 @@ public void testLogger1() {
assertEquals("com.sample.ruleflow", processInstance.getProcessId()); assertEquals("com.sample.ruleflow", processInstance.getProcessId());
assertNotNull(nodeInstance.getDate()); assertNotNull(nodeInstance.getDate());
} }
assertRuleFlowSampleLogsSorting(nodeInstances, processInstanceId);
logService.clear(); logService.clear();
} }


Expand All @@ -137,6 +138,7 @@ public void testLogger2() {
logger.debug(" -> {}", nodeInstance.getDate()); logger.debug(" -> {}", nodeInstance.getDate());
} }
assertEquals(6, nodeInstances.size()); assertEquals(6, nodeInstances.size());
assertRuleFlowSampleLogsSorting(nodeInstances, processInstance.getProcessInstanceId());
} }
logService.clear(); logService.clear();
} }
Expand Down Expand Up @@ -167,4 +169,57 @@ public void testLogger3() {
assertEquals(14, nodeInstances.size()); assertEquals(14, nodeInstances.size());
logService.clear(); logService.clear();
} }

private void assertRuleFlowSampleLogsSorting(List<NodeInstanceLog> nodeInstanceLogs, long processInstanceId){
assertLogContent(nodeInstanceLogs.get(0),
processInstanceId,
"com.sample.ruleflow",
0,
"StartNode",
"Start");
assertLogContent(nodeInstanceLogs.get(1),
processInstanceId,
"com.sample.ruleflow",
1,
"StartNode",
"Start");
assertLogContent(nodeInstanceLogs.get(2),
processInstanceId,
"com.sample.ruleflow",
0,
"WorkItemNode",
"Task");
assertLogContent(nodeInstanceLogs.get(3),
processInstanceId,
"com.sample.ruleflow",
1,
"WorkItemNode",
"Task");
assertLogContent(nodeInstanceLogs.get(4),
processInstanceId,
"com.sample.ruleflow",
0,
"EndNode",
"End");
assertLogContent(nodeInstanceLogs.get(5),
processInstanceId,
"com.sample.ruleflow",
1,
"EndNode",
"End");
}

private void assertLogContent(NodeInstanceLog log,
long nodeInstanceId,
String processId,
Integer type,
String nodeType,
String nodeName){

assertEquals(nodeInstanceId,log.getProcessInstanceId().longValue());
assertEquals(processId,log.getProcessId());
assertEquals(type,log.getType());
assertEquals(nodeType, log.getNodeType());
assertEquals(nodeName,log.getNodeName());
}
} }
Expand Up @@ -143,6 +143,6 @@ public boolean hasTaskCompleted(Long taskId) {
} }


public List<NodeInstanceDesc> getProcessInstanceHistory(Long processInstanceId) { public List<NodeInstanceDesc> getProcessInstanceHistory(Long processInstanceId) {
return (List<NodeInstanceDesc>) runtimeDataService.getProcessInstanceFullHistory(processInstanceId, new QueryContext(0, 40)); return (List<NodeInstanceDesc>) runtimeDataService.getProcessInstanceFullHistory(processInstanceId, new QueryContext(0, 80));
} }
} }
Expand Up @@ -70,9 +70,9 @@ public void testNodeInstanceLogs() {
long pid = startProcess(ProcessDefinitions.SCRIPT_TASK); long pid = startProcess(ProcessDefinitions.SCRIPT_TASK);
List<NodeInstanceDesc> logs = ejb.getProcessInstanceFullHistory(pid); List<NodeInstanceDesc> logs = ejb.getProcessInstanceFullHistory(pid);
Assertions.assertThat(logs.size()).isEqualTo(6); Assertions.assertThat(logs.size()).isEqualTo(6);
String[] expected = {"_A3185DDF-23A7-48B7-A2FE-7C0FE39F6691", "_3C8F4385-5348-479C-83EE-0C2DC2004F1A", String[] expected = {"_DC07735C-FA99-414C-AEAC-9F4CE0CF24F9", "_DC07735C-FA99-414C-AEAC-9F4CE0CF24F9",
"_DC07735C-FA99-414C-AEAC-9F4CE0CF24F9", "_DC07735C-FA99-414C-AEAC-9F4CE0CF24F9", "_3C8F4385-5348-479C-83EE-0C2DC2004F1A", "_3C8F4385-5348-479C-83EE-0C2DC2004F1A",
"_3C8F4385-5348-479C-83EE-0C2DC2004F1A", "_A3185DDF-23A7-48B7-A2FE-7C0FE39F6691"}; "_A3185DDF-23A7-48B7-A2FE-7C0FE39F6691", "_A3185DDF-23A7-48B7-A2FE-7C0FE39F6691"};
for (int i = 0; i < logs.size(); ++i) { for (int i = 0; i < logs.size(); ++i) {
NodeInstanceDesc node = logs.get(i); NodeInstanceDesc node = logs.get(i);
Assertions.assertThat(node.getNodeId()).isEqualTo(expected[i]); Assertions.assertThat(node.getNodeId()).isEqualTo(expected[i]);
Expand Down
Expand Up @@ -145,7 +145,6 @@ public boolean isInversionOfControl() {
} }


public void cancel() { public void cancel() {
nodeInstanceContainer.removeNodeInstance(this);
boolean hidden = false; boolean hidden = false;
Node node = getNode(); Node node = getNode();
if (node != null && node.getMetaData().get("hidden") != null) { if (node != null && node.getMetaData().get("hidden") != null) {
Expand All @@ -154,7 +153,13 @@ public void cancel() {
if (!hidden) { if (!hidden) {
InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime(); InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime();
((InternalProcessRuntime) kruntime.getProcessRuntime()) ((InternalProcessRuntime) kruntime.getProcessRuntime())
.getProcessEventSupport().fireAfterNodeLeft(this, kruntime); .getProcessEventSupport().fireBeforeNodeLeft(this, kruntime);
}
nodeInstanceContainer.removeNodeInstance(this);
if (!hidden) {
InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime();
((InternalProcessRuntime) kruntime.getProcessRuntime())
.getProcessEventSupport().fireAfterNodeLeft(this, kruntime);
} }
} }


Expand Down
Expand Up @@ -76,11 +76,18 @@ public void internalTrigger(final NodeInstance from, String type) {
if (!exceptionHandled) { if (!exceptionHandled) {
handleException(faultName, exceptionScopeInstance); handleException(faultName, exceptionScopeInstance);
} }
((NodeInstanceContainer) getNodeInstanceContainer()).nodeInstanceCompleted(this, null);
boolean hidden = false; boolean hidden = false;
if (getNode().getMetaData().get("hidden") != null) { if (getNode().getMetaData().get("hidden") != null) {
hidden = true; hidden = true;
} }
if (!hidden) {
InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime();
((InternalProcessRuntime) kruntime.getProcessRuntime())
.getProcessEventSupport().fireBeforeNodeLeft(this, kruntime);
}

((NodeInstanceContainer) getNodeInstanceContainer()).nodeInstanceCompleted(this, null);

if (!hidden) { if (!hidden) {
InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime(); InternalKnowledgeRuntime kruntime = getProcessInstance().getKnowledgeRuntime();
((InternalProcessRuntime) kruntime.getProcessRuntime()) ((InternalProcessRuntime) kruntime.getProcessRuntime())
Expand Down
6 changes: 3 additions & 3 deletions jbpm-flow/src/test/java/org/jbpm/process/EventTest.java
Expand Up @@ -64,7 +64,7 @@ public void addLogger() {
"bnt-4", "bnl-4", "bnt-4", "bnl-4",
"bnt-5", "bnl-5", "bnt-5", "bnl-5",
"bpc", "bpc",
"anl-1", "bnl-1", "anl-1",
"apc", "apc",
"anl-5", "ant-5", "anl-5", "ant-5",
"anl-4", "ant-4", "anl-4", "ant-4",
Expand Down Expand Up @@ -446,7 +446,7 @@ public void execute(ProcessContext context) throws Exception {
"bnt-1", "bnl-1", "bnt-1", "bnl-1",
"bnt-8", "bnl-8", "bnt-8", "bnl-8",
"bpc", "bpc",
"anl-1", "bnl-1", "anl-1",
"apc", "apc",
"anl-8", "ant-8", "anl-8", "ant-8",
"anl-1", "ant-1", "anl-1", "ant-1",
Expand Down Expand Up @@ -725,7 +725,7 @@ public void execute(ProcessContext context) throws Exception {
"apc", "apc",
"anl-8", "ant-8", "anl-8", "ant-8",
"anl-1", "anl-1",
"anl-1:3", "bnl-1:3", "anl-1:3",
"anl-1:6", "ant-1:6", "anl-1:6", "ant-1:6",
"anl-1:5", "ant-1:5", "anl-1:5", "ant-1:5",
"anl-1:4" "anl-1:4"
Expand Down
Expand Up @@ -197,38 +197,38 @@ public void testGetProcessInstanceHistory() throws IOException {
// assert if logs are ordered by log.id ASC // assert if logs are ordered by log.id ASC
Iterator<NodeInstanceDesc> iterator = nodeInstanceLogs.iterator(); Iterator<NodeInstanceDesc> iterator = nodeInstanceLogs.iterator();
NodeInstanceDesc log0 = iterator.next(); NodeInstanceDesc log0 = iterator.next();
assertEquals("End", log0.getName()); assertEquals("Start", log0.getName());


NodeInstanceDesc log1 = iterator.next(); NodeInstanceDesc log1 = iterator.next();
assertEquals("Hello", log1.getName()); assertEquals("Hello", log1.getName());


NodeInstanceDesc log2 = iterator.next(); NodeInstanceDesc log2 = iterator.next();
assertEquals("Start", log2.getName()); assertEquals("End", log2.getName());


Collection<NodeInstanceDesc> fullNodeInstanceLogs = runtimeDataService.getProcessInstanceFullHistory( Collection<NodeInstanceDesc> fullNodeInstanceLogs = runtimeDataService.getProcessInstanceFullHistory(
processInstance.getId(), new QueryContext()); processInstance.getId(), new QueryContext());


// assert if logs are ordered by log.date DESC, log.id DESC // assert if logs are ordered by log.date DESC, log.id DESC
Iterator<NodeInstanceDesc> fullIterator = fullNodeInstanceLogs.iterator(); Iterator<NodeInstanceDesc> fullIterator = fullNodeInstanceLogs.iterator();
NodeInstanceDesc fullLog0 = fullIterator.next(); NodeInstanceDesc fullLog0 = fullIterator.next();
assertEquals("Start", fullLog0.getName()); assertEquals("End", fullLog0.getName());
assertEquals(true, fullLog0.isCompleted()); assertEquals(true, fullLog0.isCompleted());


NodeInstanceDesc fullLog1 = fullIterator.next(); NodeInstanceDesc fullLog1 = fullIterator.next();
assertEquals("Hello", fullLog1.getName()); assertEquals("End", fullLog1.getName());
assertEquals(true, fullLog1.isCompleted()); assertEquals(false, fullLog1.isCompleted());


NodeInstanceDesc fullLog2 = fullIterator.next(); NodeInstanceDesc fullLog2 = fullIterator.next();
assertEquals("End", fullLog2.getName()); assertEquals("Hello", fullLog2.getName());
assertEquals(true, fullLog2.isCompleted()); assertEquals(true, fullLog2.isCompleted());


NodeInstanceDesc fullLog3 = fullIterator.next(); NodeInstanceDesc fullLog3 = fullIterator.next();
assertEquals("End", fullLog3.getName()); assertEquals("Hello", fullLog3.getName());
assertEquals(false, fullLog3.isCompleted()); assertEquals(false, fullLog3.isCompleted());


NodeInstanceDesc fullLog4 = fullIterator.next(); NodeInstanceDesc fullLog4 = fullIterator.next();
assertEquals("Hello", fullLog4.getName()); assertEquals("Start", fullLog4.getName());
assertEquals(false, fullLog4.isCompleted()); assertEquals(true, fullLog4.isCompleted());


NodeInstanceDesc fullLog5 = fullIterator.next(); NodeInstanceDesc fullLog5 = fullIterator.next();
assertEquals("Start", fullLog5.getName()); assertEquals("Start", fullLog5.getName());
Expand Down
Expand Up @@ -303,6 +303,7 @@ public void testIndependentNoWaitForCompletionAbortParent() {


// signal the subprocess to continue // signal the subprocess to continue
ksession.signalEvent("continue", null, id); ksession.signalEvent("continue", null, id);
assertLeft(process, P2_SIGNAL_END);
assertLeft(process, P3_SIGNAL); assertLeft(process, P3_SIGNAL);
assertTriggered(process, P3_SCRIPT); assertTriggered(process, P3_SCRIPT);
assertChangedVariable(process, "variable", null, "new value"); assertChangedVariable(process, "variable", null, "new value");
Expand Down Expand Up @@ -348,6 +349,7 @@ public void testIndependentNoWaitForCompletionAbortSubprocess() {


ksession.signalEvent("finish", null, pi.getId()); ksession.signalEvent("finish", null, pi.getId());
assertLeft(process, P2_SIGNAL_END); assertLeft(process, P2_SIGNAL_END);
assertLeft(process, P3_SIGNAL);
assertNextNode(process, P2_END); assertNextNode(process, P2_END);
assertProcessCompleted(process, PROCESS_ID_2); assertProcessCompleted(process, PROCESS_ID_2);


Expand Down Expand Up @@ -437,6 +439,7 @@ public void testDependentNoWaitForCompletionAbortSubprocess() {
// signal the parent process to finish // signal the parent process to finish
ksession.signalEvent("finish", null, pi.getId()); ksession.signalEvent("finish", null, pi.getId());
assertLeft(process, P2_SIGNAL_END); assertLeft(process, P2_SIGNAL_END);
assertLeft(process, P3_SIGNAL);
assertNextNode(process, P2_END); assertNextNode(process, P2_END);
assertProcessCompleted(process, PROCESS_ID_2); assertProcessCompleted(process, PROCESS_ID_2);


Expand Down Expand Up @@ -477,6 +480,7 @@ public void testDependentNoWaitForCompletionAbortParent() {
// signal the subprocess to continue // signal the subprocess to continue
ksession.signalEvent("continue", null, id); ksession.signalEvent("continue", null, id);
assertLeft(process, P3_SIGNAL); assertLeft(process, P3_SIGNAL);
assertLeft(process, P2_SIGNAL_END);
assertTriggered(process, P3_SCRIPT); assertTriggered(process, P3_SCRIPT);
assertChangedVariable(process, "variable", null, "new value"); assertChangedVariable(process, "variable", null, "new value");
assertLeft(process, P3_SCRIPT); assertLeft(process, P3_SCRIPT);
Expand Down Expand Up @@ -546,7 +550,9 @@ public void testDependentAbort() {
ksession.abortProcessInstance(pi.getId()); ksession.abortProcessInstance(pi.getId());


assertProcessCompleted(process, PROCESS_ID_2); assertProcessCompleted(process, PROCESS_ID_2);
assertLeft(process, "dependent process");
assertProcessCompleted(process, PROCESS_ID_3); assertProcessCompleted(process, PROCESS_ID_3);
assertLeft(process, P3_SIGNAL);


Assertions.assertThat(listener.wasProcessCompleted(PROCESS_ID_2)).isFalse(); Assertions.assertThat(listener.wasProcessCompleted(PROCESS_ID_2)).isFalse();
Assertions.assertThat(listener.wasProcessCompleted(PROCESS_ID_3)).isFalse(); Assertions.assertThat(listener.wasProcessCompleted(PROCESS_ID_3)).isFalse();
Expand Down Expand Up @@ -581,7 +587,9 @@ public void testDependentAbort2() {


// carry on with execution of superprocess // carry on with execution of superprocess
assertProcessCompleted(process, PROCESS_ID_3); assertProcessCompleted(process, PROCESS_ID_3);
assertLeft(process, P3_SIGNAL);
assertProcessCompleted(process, PROCESS_ID_2); assertProcessCompleted(process, PROCESS_ID_2);
assertLeft(process, "dependent process");


Assertions.assertThat(listener.wasProcessAborted(PROCESS_ID_2)).isTrue(); Assertions.assertThat(listener.wasProcessAborted(PROCESS_ID_2)).isTrue();
Assertions.assertThat(listener.wasProcessAborted(PROCESS_ID_3)).isTrue(); Assertions.assertThat(listener.wasProcessAborted(PROCESS_ID_3)).isTrue();
Expand Down

0 comments on commit 57cccfc

Please sign in to comment.