This is an automated email from the ASF dual-hosted git repository.

pefernan pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 88cf55fead [incubator-kie-issues-576] Data Audit apps for kogito 
(#3267)
88cf55fead is described below

commit 88cf55fead45645716314bcb747ea95f82f76986
Author: Enrique <[email protected]>
AuthorDate: Wed Dec 27 15:09:45 2023 +0100

    [incubator-kie-issues-576] Data Audit apps for kogito (#3267)
    
    * [incubator-kie-issues-576] add tests for data audit
    
    * fixing formatting
    
    * fix interfaces
    
    * fix job data event
    
    * fix tests
    
    * fix modify event
    
    * fix is transition
    
    * fix events
---
 .../process/runtime/KogitoNodeInstance.java        |   8 +
 .../runtime/KogitoWorkflowProcessInstance.java     |   4 +
 .../process/ProcessInstanceNodeEventBody.java      |  44 +++++-
 .../event/process/ProcessInstanceSLAEventBody.java |  38 +++++
 .../process/ProcessInstanceStateEventBody.java     |  12 ++
 .../usertask/UserTaskInstanceStateEventBody.java   |  26 ++--
 .../event/impl/ProcessInstanceEventBatch.java      | 169 ++++++++++++++++-----
 .../kie/kogito/event/job/JobInstanceDataEvent.java |  37 +++++
 .../process/ProcessInstanceNodeDataEvent.java      |   1 +
 .../org/jbpm/process/instance/ProcessInstance.java |   2 -
 .../process/instance/event/UserTaskEventImpl.java  |   2 +-
 .../instance/event/UserTaskStateEventImpl.java     |   2 +
 .../humantask/HumanTaskWorkItemDecoratorImpl.java  |   9 ++
 .../org/jbpm/workflow/instance/NodeInstance.java   |   3 -
 .../workflow/instance/impl/NodeInstanceImpl.java   |   2 +
 .../instance/impl/WorkflowProcessInstanceImpl.java |  10 +-
 .../kie/kogito/codegen/tests/PublishEventIT.java   |   4 +-
 17 files changed, 307 insertions(+), 66 deletions(-)

diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
index f91e8b1957..a1483dd85e 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
@@ -18,7 +18,9 @@
  */
 package org.kie.kogito.internal.process.runtime;
 
+import java.util.Collections;
 import java.util.Date;
+import java.util.Map;
 
 import org.kie.api.runtime.process.NodeInstance;
 
@@ -67,4 +69,10 @@ public interface KogitoNodeInstance extends NodeInstance {
      * @return actual leave time
      */
     Date getLeaveTime();
+
+    Date getSlaDueDate();
+
+    default Map<String, Object> getMetaData() {
+        return Collections.emptyMap();
+    }
 }
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoWorkflowProcessInstance.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoWorkflowProcessInstance.java
index 078a990854..7023cb2890 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoWorkflowProcessInstance.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoWorkflowProcessInstance.java
@@ -50,6 +50,8 @@ public interface KogitoWorkflowProcessInstance extends 
WorkflowProcessInstance,
      */
     String getNodeIdInError();
 
+    String getNodeInstanceIdInError();
+
     /**
      * Returns error message associated with this process instance in case it 
is in an error
      * state. It will consists of
@@ -88,4 +90,6 @@ public interface KogitoWorkflowProcessInstance extends 
WorkflowProcessInstance,
      */
     Collection<AdHocFragment> adHocFragments();
 
+    Date getSlaDueDate();
+
 }
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
index 704f9be1ac..ca6621c0b1 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
@@ -29,6 +29,14 @@ public class ProcessInstanceNodeEventBody {
 
     public static final int EVENT_TYPE_EXIT = 2;
 
+    public static final int EVENT_TYPE_ABORTED = 3;
+
+    public static final int EVENT_TYPE_SKIPPED = 4;
+
+    public static final int EVENT_TYPE_OBSOLETE = 5;
+
+    public static final int EVENT_TYPE_ERROR = 6;
+
     // common fields for events
 
     private Date eventDate;
@@ -47,7 +55,7 @@ public class ProcessInstanceNodeEventBody {
 
     // custom data fields
 
-    private String connectionNodeInstanceId; // only for entering and leaving
+    private String connectionNodeDefinitionId; // only for entering and leaving
 
     private String nodeDefinitionId; // definition on bpmn2
 
@@ -57,6 +65,10 @@ public class ProcessInstanceNodeEventBody {
 
     private String nodeInstanceId;
 
+    private String workItemId;
+
+    private Date slaDueDate;
+
     private Map<String, Object> data;
 
     private ProcessInstanceNodeEventBody() {
@@ -87,8 +99,8 @@ public class ProcessInstanceNodeEventBody {
         return processInstanceId;
     }
 
-    public String getConnectionNodeInstanceId() {
-        return connectionNodeInstanceId;
+    public String getConnectionNodeDefinitionId() {
+        return connectionNodeDefinitionId;
     }
 
     public String getNodeDefinitionId() {
@@ -107,6 +119,14 @@ public class ProcessInstanceNodeEventBody {
         return nodeInstanceId;
     }
 
+    public Date getSlaDueDate() {
+        return slaDueDate;
+    }
+
+    public String getWorkItemId() {
+        return workItemId;
+    }
+
     public Map<String, Object> getData() {
         return data;
     }
@@ -114,7 +134,7 @@ public class ProcessInstanceNodeEventBody {
     @Override
     public String toString() {
         return "ProcessInstanceNodeEventBody [eventDate=" + eventDate + ", 
eventUser=" + eventUser + ", eventType=" + eventType + ", processId=" + 
processId + ", processVersion=" + processVersion
-                + ", processInstanceId=" + processInstanceId + ", 
connectionNodeInstanceId=" + connectionNodeInstanceId + ", nodeDefinitionId=" + 
nodeDefinitionId + ", nodeName=" + nodeName
+                + ", processInstanceId=" + processInstanceId + ", 
connectionNodeInstanceId=" + connectionNodeDefinitionId + ", nodeDefinitionId=" 
+ nodeDefinitionId + ", nodeName=" + nodeName
                 + ", nodeType=" + nodeType + ", nodeInstanceId=" + 
nodeInstanceId + ", data=" + data + "]";
     }
 
@@ -181,8 +201,8 @@ public class ProcessInstanceNodeEventBody {
             return this;
         }
 
-        public Builder connectionNodeInstanceId(String 
connectionNodeInstanceId) {
-            instance.connectionNodeInstanceId = connectionNodeInstanceId;
+        public Builder connectionNodeDefinitionId(String 
connectionNodeDefinitionId) {
+            instance.connectionNodeDefinitionId = connectionNodeDefinitionId;
             return this;
         }
 
@@ -211,8 +231,20 @@ public class ProcessInstanceNodeEventBody {
             return this;
         }
 
+        public Builder slaDueDate(Date slaDueDate) {
+            instance.slaDueDate = slaDueDate;
+            return this;
+        }
+
+        public Builder workItemId(String workItemId) {
+            instance.workItemId = workItemId;
+            return this;
+        }
+
         public ProcessInstanceNodeEventBody build() {
             return instance;
         }
+
     }
+
 }
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceSLAEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceSLAEventBody.java
index 91fc9f75ec..133c0e5715 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceSLAEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceSLAEventBody.java
@@ -41,6 +41,20 @@ public class ProcessInstanceSLAEventBody {
 
     private String nodeInstanceId;
 
+    private String nodeName;
+
+    private String nodeType;
+
+    private Date slaDueDate;
+
+    public Date getSlaDueDate() {
+        return slaDueDate;
+    }
+
+    public void setSlaDueDate(Date slaDueDate) {
+        this.slaDueDate = slaDueDate;
+    }
+
     public Date getEventDate() {
         return eventDate;
     }
@@ -69,6 +83,14 @@ public class ProcessInstanceSLAEventBody {
         return nodeInstanceId;
     }
 
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    public String getNodeType() {
+        return nodeType;
+    }
+
     @Override
     public String toString() {
         return "ProcessErrorEventBody [processId=" + processId + ", 
processInstanceId=" + processInstanceId + ", nodeDefinitionId=" + 
nodeDefinitionId + ", nodeInstanceId=" + nodeInstanceId + "]";
@@ -86,6 +108,11 @@ public class ProcessInstanceSLAEventBody {
             this.instance = instance;
         }
 
+        public Builder slaDueDate(Date slaDueDate) {
+            this.instance.slaDueDate = slaDueDate;
+            return this;
+        }
+
         public Builder eventDate(Date eventDate) {
             this.instance.eventDate = eventDate;
             return this;
@@ -121,8 +148,19 @@ public class ProcessInstanceSLAEventBody {
             return this;
         }
 
+        public Builder nodeName(String nodeName) {
+            instance.nodeName = nodeName;
+            return this;
+        }
+
+        public Builder nodeType(String nodeType) {
+            instance.nodeType = nodeType;
+            return this;
+        }
+
         public ProcessInstanceSLAEventBody build() {
             return instance;
         }
     }
+
 }
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
index a6cc39229b..6c7b7a80c3 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
@@ -62,6 +62,8 @@ public class ProcessInstanceStateEventBody {
 
     private Set<String> roles;
 
+    public Date slaDueDate;
+
     public Date getEventDate() {
         return eventDate;
     }
@@ -118,6 +120,10 @@ public class ProcessInstanceStateEventBody {
         return roles;
     }
 
+    public Date getSlaDueDate() {
+        return slaDueDate;
+    }
+
     public Builder update() {
         return new Builder(this);
     }
@@ -245,8 +251,14 @@ public class ProcessInstanceStateEventBody {
             return this;
         }
 
+        public Builder slaDueDate(Date slaDueDate) {
+            instance.slaDueDate = slaDueDate;
+            return this;
+        }
+
         public ProcessInstanceStateEventBody build() {
             return instance;
         }
+
     }
 }
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/usertask/UserTaskInstanceStateEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/usertask/UserTaskInstanceStateEventBody.java
index 336f7fb418..a8423c4535 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/usertask/UserTaskInstanceStateEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/usertask/UserTaskInstanceStateEventBody.java
@@ -35,9 +35,6 @@ public class UserTaskInstanceStateEventBody {
     private String userTaskInstanceId;
     private String userTaskName;
 
-    // custom data fields
-    private Integer eventType; // CREATED, ADDED, CLAIMED....
-
     private String userTaskDescription;
     private String userTaskPriority;
     private String userTaskReferenceName;
@@ -48,6 +45,8 @@ public class UserTaskInstanceStateEventBody {
 
     private String processInstanceId;
 
+    private String eventType;
+
     public Date getEventDate() {
         return eventDate;
     }
@@ -68,10 +67,6 @@ public class UserTaskInstanceStateEventBody {
         return userTaskName;
     }
 
-    public Integer getEventType() {
-        return eventType;
-    }
-
     public String getUserTaskDescription() {
         return userTaskDescription;
     }
@@ -96,6 +91,10 @@ public class UserTaskInstanceStateEventBody {
         return processInstanceId;
     }
 
+    public String getEventType() {
+        return eventType;
+    }
+
     public Map<String, Object> metaData() {
         Map<String, Object> metadata = new HashMap<>();
         
metadata.put(UserTaskInstanceEventMetadata.USER_TASK_INSTANCE_ID_META_DATA, 
userTaskInstanceId);
@@ -107,7 +106,7 @@ public class UserTaskInstanceStateEventBody {
     @Override
     public String toString() {
         return "UserTaskInstanceStateEventBody [eventDate=" + eventDate + ", 
eventUser=" + eventUser + ", userTaskDefinitionId=" + userTaskDefinitionId + ", 
userTaskInstanceId=" + userTaskInstanceId
-                + ", userTaskName=" + userTaskName + ", eventType=" + 
eventType + ", userTaskDescription=" + userTaskDescription + ", 
userTaskPriority=" + userTaskPriority + ", userTaskReferenceName="
+                + ", userTaskName=" + userTaskName + ", userTaskDescription=" 
+ userTaskDescription + ", userTaskPriority=" + userTaskPriority + ", 
userTaskReferenceName="
                 + userTaskReferenceName
                 + ", state=" + state + ", actualOwner=" + actualOwner + ", 
processInstanceId=" + processInstanceId + "]";
     }
@@ -170,11 +169,6 @@ public class UserTaskInstanceStateEventBody {
             return this;
         }
 
-        public Builder eventType(Integer eventType) {
-            this.instance.eventType = eventType;
-            return this;
-        }
-
         public Builder userTaskDescription(String userTaskDescription) {
             this.instance.userTaskDescription = userTaskDescription;
             return this;
@@ -200,6 +194,11 @@ public class UserTaskInstanceStateEventBody {
             return this;
         }
 
+        public Builder eventType(String eventType) {
+            this.instance.eventType = eventType;
+            return this;
+        }
+
         public Builder processInstanceId(String processInstanceId) {
             this.instance.processInstanceId = processInstanceId;
             return this;
@@ -209,4 +208,5 @@ public class UserTaskInstanceStateEventBody {
             return this.instance;
         }
     }
+
 }
diff --git 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessInstanceEventBatch.java
 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessInstanceEventBatch.java
index 3991c65da0..96a34dba47 100644
--- 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessInstanceEventBatch.java
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/ProcessInstanceEventBatch.java
@@ -18,11 +18,13 @@
  */
 package org.kie.kogito.event.impl;
 
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 import org.kie.api.event.process.ProcessCompletedEvent;
 import org.kie.api.event.process.ProcessEvent;
@@ -66,7 +68,11 @@ import 
org.kie.kogito.event.usertask.UserTaskInstanceStateDataEvent;
 import org.kie.kogito.event.usertask.UserTaskInstanceStateEventBody;
 import org.kie.kogito.event.usertask.UserTaskInstanceVariableDataEvent;
 import org.kie.kogito.event.usertask.UserTaskInstanceVariableEventBody;
+import org.kie.kogito.internal.process.event.KogitoProcessVariableChangedEvent;
+import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
+import org.kie.kogito.internal.process.runtime.KogitoWorkItem;
+import org.kie.kogito.internal.process.runtime.KogitoWorkItemNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.kie.kogito.process.workitem.HumanTaskWorkItem;
 
@@ -103,23 +109,20 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
         } else if (event instanceof ProcessCompletedEvent) {
             handleProcessStateEvent((ProcessCompletedEvent) event);
         } else if (event instanceof ProcessNodeTriggeredEvent) {
-            handleProcesssNodeEvent((ProcessNodeTriggeredEvent) event);
+            handleProcessNodeEvent((ProcessNodeTriggeredEvent) event);
         } else if (event instanceof ProcessNodeLeftEvent) {
-            handleProcesssNodeEvent((ProcessNodeLeftEvent) event);
+            handleProcessNodeEvent((ProcessNodeLeftEvent) event);
         } else if (event instanceof SLAViolatedEvent) {
             handleProcesssNodeEvent((SLAViolatedEvent) event);
         } else if (event instanceof ProcessVariableChangedEvent) {
-            handleProcesssVariableEvent((ProcessVariableChangedEvent) event);
+            handleProcessVariableEvent((ProcessVariableChangedEvent) event);
         }
     }
 
-    private void handleProcesssVariableEvent(ProcessVariableChangedEvent 
event) {
-        // custom data fields for this event that are not there
-        // private String nodeContainerDefinitionId;
-        // private String nodeContainerInstanceId;
+    private void handleProcessVariableEvent(ProcessVariableChangedEvent event) 
{
 
         Map<String, Object> metadata = 
buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         ProcessInstanceVariableEventBody.Builder builder = 
ProcessInstanceVariableEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventIdentity())
@@ -130,41 +133,83 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .variableName(event.getVariableId())
                 .variableValue(event.getNewValue());
 
+        if (event instanceof KogitoProcessVariableChangedEvent) {
+            KogitoProcessVariableChangedEvent varEvent = 
(KogitoProcessVariableChangedEvent) event;
+            if (varEvent.getNodeInstance() != null && 
varEvent.getNodeInstance().getNodeInstanceContainer() != null) {
+                if (varEvent.getNodeInstance().getNodeInstanceContainer() 
instanceof KogitoNodeInstance) {
+                    builder.nodeContainerDefinitionId(((KogitoNodeInstance) 
varEvent.getNodeInstance().getNodeInstanceContainer()).getNodeDefinitionId());
+                    builder.nodeContainerInstanceId(((KogitoNodeInstance) 
varEvent.getNodeInstance().getNodeInstanceContainer()).getId());
+                }
+            }
+        }
+
         ProcessInstanceVariableEventBody body = builder.build();
-        processedEvents.add(new 
ProcessInstanceVariableDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body));
+        ProcessInstanceVariableDataEvent piEvent =
+                new 
ProcessInstanceVariableDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(piEvent);
     }
 
     private void handleProcesssNodeEvent(SLAViolatedEvent event) {
         Map<String, Object> metadata = 
buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
 
         ProcessInstanceSLAEventBody.Builder builder = 
ProcessInstanceSLAEventBody.create()
-                .eventDate(new Date())
+                .eventDate(Date.from(Instant.now()))
                 .eventUser(event.getEventIdentity())
                 .processId(event.getProcessInstance().getProcessId())
                 .processVersion(event.getProcessInstance().getProcessVersion())
                 .processInstanceId(event.getProcessInstance().getId());
 
-        if (event.getNodeInstance() != null) {
-            
builder.nodeDefinitionId(event.getNodeInstance().getNode().getNodeUniqueId())
-                    .nodeInstanceId(event.getNodeInstance().getId());
+        if (event.getNodeInstance() instanceof KogitoNodeInstance) {
+            KogitoNodeInstance ni = (KogitoNodeInstance) 
event.getNodeInstance();
+            builder.nodeDefinitionId(ni.getNode().getNodeUniqueId())
+                    .nodeInstanceId(ni.getId())
+                    .nodeName(ni.getNodeName())
+                    .nodeType(ni.getNode().getClass().getSimpleName())
+                    .slaDueDate(ni.getSlaDueDate());
+        } else {
+            builder.slaDueDate(pi.getSlaDueDate());
         }
 
         ProcessInstanceSLAEventBody body = builder.build();
-        processedEvents.add(new 
ProcessInstanceSLADataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body));
+        ProcessInstanceSLADataEvent piEvent = new 
ProcessInstanceSLADataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(piEvent);
     }
 
-    private void handleProcesssNodeEvent(ProcessNodeLeftEvent event) {
-        processedEvents.add(toProcessInstanceNodeEvent(event, 
ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT));
+    private void handleProcessNodeEvent(ProcessNodeLeftEvent event) {
+        KogitoNodeInstance nodeInstance = (KogitoNodeInstance) 
event.getNodeInstance();
+        int eventType = ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT;
+
+        if (nodeInstance.getCancelType() != null) {
+            switch (nodeInstance.getCancelType()) {
+                case ABORTED:
+                    eventType = 
ProcessInstanceNodeEventBody.EVENT_TYPE_ABORTED;
+                    break;
+                case SKIPPED:
+                    eventType = 
ProcessInstanceNodeEventBody.EVENT_TYPE_SKIPPED;
+                    break;
+                case OBSOLETE:
+                    eventType = 
ProcessInstanceNodeEventBody.EVENT_TYPE_OBSOLETE;
+                    break;
+                case ERROR:
+                    eventType = ProcessInstanceNodeEventBody.EVENT_TYPE_ERROR;
+            }
+        }
+
+        processedEvents.add(toProcessInstanceNodeEvent(event, eventType));
     }
 
-    private void handleProcesssNodeEvent(ProcessNodeTriggeredEvent event) {
+    private void handleProcessNodeEvent(ProcessNodeTriggeredEvent event) {
         processedEvents.add(toProcessInstanceNodeEvent(event, 
ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER));
 
     }
 
     private ProcessInstanceNodeDataEvent 
toProcessInstanceNodeEvent(ProcessNodeEvent event, int eventType) {
         Map<String, Object> metadata = 
buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
+        KogitoNodeInstance nodeInstance = (KogitoNodeInstance) 
event.getNodeInstance();
         ProcessInstanceNodeEventBody.Builder builder = 
ProcessInstanceNodeEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventIdentity())
@@ -175,10 +220,26 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .nodeName(event.getNodeInstance().getNodeName())
                 
.nodeType(event.getNodeInstance().getNode().getClass().getSimpleName())
                 .nodeInstanceId(event.getNodeInstance().getId())
-                
.nodeDefinitionId(event.getNodeInstance().getNode().getNodeUniqueId());
+                
.nodeDefinitionId(event.getNodeInstance().getNode().getNodeUniqueId())
+                .slaDueDate(nodeInstance.getSlaDueDate());
+
+        if (eventType == ProcessInstanceNodeEventBody.EVENT_TYPE_ENTER) {
+            builder.connectionNodeDefinitionId((String) 
nodeInstance.getMetaData().get("IncomingConnection"));
+        } else {
+            builder.connectionNodeDefinitionId((String) 
nodeInstance.getMetaData().get("OutgoingConnection"));
+        }
+
+        if (nodeInstance instanceof KogitoWorkItemNodeInstance) {
+            KogitoWorkItem workItem = ((KogitoWorkItemNodeInstance) 
nodeInstance).getWorkItem();
+            if (workItem != null) {
+                builder.workItemId(workItem.getStringId());
+            }
+        }
 
         ProcessInstanceNodeEventBody body = builder.build();
-        return new 
ProcessInstanceNodeDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        ProcessInstanceNodeDataEvent piEvent = new 
ProcessInstanceNodeDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        return piEvent;
     }
 
     private void handleProcessStateEvent(ProcessCompletedEvent event) {
@@ -194,10 +255,14 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                     .processId(pi.getProcessId())
                     .processVersion(pi.getProcessVersion())
                     .nodeDefinitionId(pi.getNodeIdInError())
+                    .nodeInstanceId(pi.getNodeInstanceIdInError())
                     .errorMessage(pi.getErrorMessage())
                     .build();
             Map<String, Object> metadata = 
buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
-            processedEvents.add(new 
ProcessInstanceErrorDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, errorBody));
+            ProcessInstanceErrorDataEvent piEvent =
+                    new 
ProcessInstanceErrorDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, errorBody);
+            piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+            processedEvents.add(piEvent);
         }
     }
 
@@ -213,10 +278,14 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                     .processId(pi.getProcessId())
                     .processVersion(pi.getProcessVersion())
                     .nodeDefinitionId(pi.getNodeIdInError())
+                    .nodeInstanceId(pi.getNodeInstanceIdInError())
                     .errorMessage(pi.getErrorMessage())
                     .build();
             Map<String, Object> metadata = 
buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
-            processedEvents.add(new 
ProcessInstanceErrorDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, errorBody));
+            ProcessInstanceErrorDataEvent piEvent =
+                    new 
ProcessInstanceErrorDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, errorBody);
+            piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+            processedEvents.add(piEvent);
         }
 
     }
@@ -239,7 +308,8 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .parentInstanceId(pi.getParentProcessInstanceId())
                 .rootProcessId(pi.getRootProcessId())
                 .rootProcessInstanceId(pi.getRootProcessInstanceId())
-                .state(event.getProcessInstance().getState());
+                .state(event.getProcessInstance().getState())
+                .slaDueDate(pi.getSlaDueDate());
 
         String securityRoles = (String) 
event.getProcessInstance().getProcess().getMetaData().get("securityRoles");
         if (securityRoles != null) {
@@ -247,7 +317,9 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
         }
 
         ProcessInstanceStateEventBody body = builder.build();
-        return new 
ProcessInstanceStateDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        ProcessInstanceStateDataEvent piEvent = new 
ProcessInstanceStateDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventIdentity(), metadata, body);
+        piEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        return piEvent;
     }
 
     private Map<String, Object> 
buildProcessMetadata(KogitoWorkflowProcessInstance pi) {
@@ -283,6 +355,7 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
     private void handleUserTaskCommentEvent(UserTaskCommentEvent event) {
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
 
         int eventType = UserTaskInstanceCommentEventBody.EVENT_TYPE_ADDED;
         if (event.getOldComment() != null && event.getNewComment() == null) {
@@ -317,13 +390,16 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
         }
 
         UserTaskInstanceCommentEventBody body = builder.build();
-        processedEvents.add(new 
UserTaskInstanceCommentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), updatedBy, metadata, body));
+        UserTaskInstanceCommentDataEvent utEvent = new 
UserTaskInstanceCommentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), updatedBy, metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
 
     }
 
     private void handleUserTaskAttachmentEvent(UserTaskAttachmentEvent event) {
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
 
         int eventType = UserTaskInstanceAttachmentEventBody.EVENT_TYPE_ADDED;
         if (event.getOldAttachment() != null && event.getNewAttachment() == 
null) {
@@ -359,15 +435,16 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
         }
 
         UserTaskInstanceAttachmentEventBody body = builder.build();
-        processedEvents
-                .add(new 
UserTaskInstanceAttachmentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), updatedBy, metadata, body));
+        UserTaskInstanceAttachmentDataEvent utEvent = new 
UserTaskInstanceAttachmentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), updatedBy, metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
 
     }
 
     private void handleUserTaskAssignmentEvent(UserTaskAssignmentEvent event) {
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         UserTaskInstanceAssignmentEventBody.Builder builder = 
UserTaskInstanceAssignmentEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventUser())
@@ -378,13 +455,16 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .users(event.getNewUsersId());
 
         UserTaskInstanceAssignmentEventBody body = builder.build();
-        processedEvents.add(new 
UserTaskInstanceAssignmentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body));
+        UserTaskInstanceAssignmentDataEvent utEvent =
+                new 
UserTaskInstanceAssignmentDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
     }
 
     private void handleUserTaskDeadlineEvent(UserTaskDeadlineEvent event) {
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         UserTaskInstanceDeadlineEventBody.Builder builder = 
UserTaskInstanceDeadlineEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventUser())
@@ -394,13 +474,19 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .notification(event.getNotification());
 
         UserTaskInstanceDeadlineEventBody body = builder.build();
-        processedEvents.add(new 
UserTaskInstanceDeadlineDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body));
+        UserTaskInstanceDeadlineDataEvent utEvent =
+                new 
UserTaskInstanceDeadlineDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
     }
 
     private void handleUserTaskStateEvent(UserTaskStateEvent event) {
+        if (event.getNewStatus() == null) {
+            return;
+        }
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         UserTaskInstanceStateEventBody.Builder builder = 
UserTaskInstanceStateEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventUser())
@@ -410,18 +496,25 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .userTaskDescription(((HumanTaskWorkItem) 
event.getWorkItem()).getTaskDescription())
                 .userTaskPriority(((HumanTaskWorkItem) 
event.getWorkItem()).getTaskPriority())
                 .userTaskReferenceName(((HumanTaskWorkItem) 
event.getWorkItem()).getReferenceName())
-                .state(((HumanTaskWorkItem) 
event.getWorkItem()).getPhaseStatus())
+                .state(event.getNewStatus())
                 .actualOwner(((HumanTaskWorkItem) 
event.getWorkItem()).getActualOwner())
+                .eventType(isTransition(event) ? event.getNewStatus() : 
"Modify")
                 .processInstanceId(event.getProcessInstance().getId());
 
         UserTaskInstanceStateEventBody body = builder.build();
-        processedEvents.add(new 
UserTaskInstanceStateDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body));
+        UserTaskInstanceStateDataEvent utEvent = new 
UserTaskInstanceStateDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
+    }
+
+    private boolean isTransition(UserTaskStateEvent event) {
+        return !Objects.equals(event.getOldStatus(), event.getNewStatus());
     }
 
     private void handleUserTaskVariableEvent(UserTaskVariableEvent event) {
         Map<String, Object> metadata = 
buildUserTaskMetadata((HumanTaskWorkItem) event.getWorkItem());
         metadata.putAll(buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance()));
-
+        KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         UserTaskInstanceVariableEventBody.Builder builder = 
UserTaskInstanceVariableEventBody.create()
                 .eventDate(new Date())
                 .eventUser(event.getEventUser())
@@ -434,8 +527,10 @@ public class ProcessInstanceEventBatch implements 
EventBatch {
                 .variableType(event.getVariableType().name());
 
         UserTaskInstanceVariableEventBody body = builder.build();
-
-        processedEvents.add(new 
UserTaskInstanceVariableDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body));
+        UserTaskInstanceVariableDataEvent utEvent =
+                new 
UserTaskInstanceVariableDataEvent(buildSource(event.getProcessInstance().getProcessId()),
 addons.toString(), event.getEventUser(), metadata, body);
+        utEvent.setKogitoBusinessKey(pi.getBusinessKey());
+        processedEvents.add(utEvent);
 
     }
 
diff --git 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/job/JobInstanceDataEvent.java
 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/job/JobInstanceDataEvent.java
new file mode 100644
index 0000000000..023bdc3d94
--- /dev/null
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/job/JobInstanceDataEvent.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.kie.kogito.event.job;
+
+import org.kie.kogito.event.AbstractDataEvent;
+
+public class JobInstanceDataEvent extends AbstractDataEvent<byte[]> {
+
+    public JobInstanceDataEvent(String type,
+            String source,
+            byte[] data,
+            String kogitoProcessInstanceId,
+            String kogitoRootProcessInstanceId,
+            String kogitoProcessId,
+            String kogitoRootProcessId,
+            String kogitoIdentity) {
+        super(type, source, data, kogitoProcessInstanceId, 
kogitoRootProcessInstanceId, kogitoProcessId,
+                kogitoRootProcessId, null, kogitoIdentity);
+    }
+}
\ No newline at end of file
diff --git 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeDataEvent.java
 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeDataEvent.java
index b58f7307ad..db118aa009 100644
--- 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeDataEvent.java
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeDataEvent.java
@@ -41,4 +41,5 @@ public class ProcessInstanceNodeDataEvent extends 
ProcessInstanceDataEvent<Proce
                 null,
                 identity);
     }
+
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessInstance.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessInstance.java
index fa7973511e..8ede0d974d 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessInstance.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/ProcessInstance.java
@@ -86,8 +86,6 @@ public interface ProcessInstance extends 
KogitoProcessInstance,
 
     int getSlaCompliance();
 
-    Date getSlaDueDate();
-
     void configureTimers();
 
     void setReferenceId(String referenceId);
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskEventImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskEventImpl.java
index 8bdbb36f42..dbc1920502 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskEventImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskEventImpl.java
@@ -90,7 +90,7 @@ public class UserTaskEventImpl extends EventObject implements 
UserTaskEvent {
 
     @Override
     public String getUserTaskDefinitionId() {
-        return getWorkItem().getStringId();
+        return getHumanTaskNodeInstance().getNodeDefinitionId();
     }
 
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskStateEventImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskStateEventImpl.java
index b2d82962cc..2cacd6063f 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskStateEventImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/UserTaskStateEventImpl.java
@@ -48,10 +48,12 @@ public class UserTaskStateEventImpl extends 
UserTaskEventImpl implements UserTas
 
     }
 
+    @Override
     public String getNewStatus() {
         return newStatus;
     }
 
+    @Override
     public String getOldStatus() {
         return oldStatus;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/humantask/HumanTaskWorkItemDecoratorImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/humantask/HumanTaskWorkItemDecoratorImpl.java
index f5a721cbbd..bea5b2cbb6 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/humantask/HumanTaskWorkItemDecoratorImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/impl/humantask/HumanTaskWorkItemDecoratorImpl.java
@@ -387,12 +387,18 @@ public class HumanTaskWorkItemDecoratorImpl implements 
InternalHumanTaskWorkItem
     @Override
     public void setTaskDescription(String taskDescription) {
         delegate.setTaskDescription(taskDescription);
+        if (delegate.getPhaseStatus() == null) {
+            return;
+        }
         getEventSupport().ifPresent(e -> 
e.fireOneUserTaskStateChange(getProcessInstance(), getNodeInstance(), 
getKieRuntime(), delegate.getPhaseStatus(), delegate.getPhaseStatus()));
     }
 
     @Override
     public void setTaskPriority(String taskPriority) {
         delegate.setTaskPriority(taskPriority);
+        if (delegate.getPhaseStatus() == null) {
+            return;
+        }
         getEventSupport().ifPresent(e -> 
e.fireOneUserTaskStateChange(getProcessInstance(), getNodeInstance(), 
getKieRuntime(), delegate.getPhaseStatus(), delegate.getPhaseStatus()));
     }
 
@@ -405,6 +411,9 @@ public class HumanTaskWorkItemDecoratorImpl implements 
InternalHumanTaskWorkItem
     public void setActualOwner(String actualOwner) {
         String currentPhaseStatus = delegate.getPhaseStatus();
         delegate.setActualOwner(actualOwner);
+        if (currentPhaseStatus == null) {
+            return;
+        }
         getEventSupport().ifPresent(e -> 
e.fireOneUserTaskStateChange(getProcessInstance(), getNodeInstance(), 
getKieRuntime(), currentPhaseStatus, currentPhaseStatus));
     }
 
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
index 98a32475c0..47e84a4f42 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
@@ -18,7 +18,6 @@
  */
 package org.jbpm.workflow.instance;
 
-import java.util.Date;
 import java.util.Map;
 
 import org.jbpm.process.instance.ContextInstance;
@@ -51,8 +50,6 @@ public interface NodeInstance extends KogitoNodeInstance {
 
     int getSlaCompliance();
 
-    Date getSlaDueDate();
-
     String getSlaTimerId();
 
     default KogitoProcessInstance getKogitoProcessInstance() {
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
index af9134308d..eecc9e3378 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
@@ -175,6 +175,7 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
         return false;
     }
 
+    @Override
     public CancelType getCancelType() {
         return cancelType;
     }
@@ -564,6 +565,7 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
         return result.toString();
     }
 
+    @Override
     public Map<String, Object> getMetaData() {
         return this.metaData;
     }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
index f095f8f1b2..e13e3d5024 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
@@ -140,6 +140,7 @@ public abstract class WorkflowProcessInstanceImpl extends 
ProcessInstanceImpl im
     private Date endDate;
 
     private String nodeIdInError;
+    private String nodeInstanceIdInError;
     private String errorMessage;
     private transient Optional<Throwable> errorCause = Optional.empty();
 
@@ -297,7 +298,7 @@ public abstract class WorkflowProcessInstanceImpl extends 
ProcessInstanceImpl im
 
     @Override
     public String getBusinessKey() {
-        return correlationKey;
+        return getCorrelationKey();
     }
 
     @Override
@@ -1106,6 +1107,11 @@ public abstract class WorkflowProcessInstanceImpl 
extends ProcessInstanceImpl im
         return nodeIdInError;
     }
 
+    @Override
+    public String getNodeInstanceIdInError() {
+        return nodeInstanceIdInError;
+    }
+
     @Override
     public String getErrorMessage() {
         return errorMessage;
@@ -1137,12 +1143,12 @@ public abstract class WorkflowProcessInstanceImpl 
extends ProcessInstanceImpl im
     @Override
     public void setErrorState(NodeInstance nodeInstanceInError, Exception e) {
         this.nodeIdInError = nodeInstanceInError.getNodeDefinitionId();
+        this.nodeInstanceIdInError = nodeInstanceInError.getId();
         this.errorCause = Optional.of(e);
         Throwable rootException = getRootException(e);
         this.errorMessage = rootException.getClass().getCanonicalName() + " - 
" + rootException.getMessage();
         setState(STATE_ERROR);
         logger.error("Unexpected error while executing node {} in process 
instance {}", nodeInstanceInError.getNode().getName(), this.getStringId(), e);
-        e.printStackTrace();
         // remove node instance that caused an error
         ((org.jbpm.workflow.instance.NodeInstanceContainer) 
nodeInstanceInError.getNodeInstanceContainer()).removeNodeInstance(nodeInstanceInError);
     }
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
 
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
index 6994a39801..60f4d83164 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
@@ -137,7 +137,7 @@ public class PublishEventIT extends AbstractCodegenIT {
 
         assertProcessInstanceEvent(event.get(), "compensateAll", "Compensate 
All", ProcessInstanceStateEventBody.EVENT_TYPE_ENDED);
 
-        List<ProcessInstanceNodeEventBody> nodes = 
findNodeInstanceEvents(events, 2);
+        List<ProcessInstanceNodeEventBody> nodes = 
findNodeInstanceEvents(events, ProcessInstanceNodeEventBody.EVENT_TYPE_EXIT);
         
assertThat(nodes).hasSize(9).extractingResultOf("getNodeType").contains("StartNode",
 "ActionNode", "BoundaryEventNode", "EndNode");
 
     }
@@ -284,7 +284,7 @@ public class PublishEventIT extends AbstractCodegenIT {
         events = publisher.extract();
         assertThat(events).hasSize(4);
 
-        triggered = findNodeInstanceEvents(events, 2);
+        triggered = findNodeInstanceEvents(events, 
ProcessInstanceNodeEventBody.EVENT_TYPE_ABORTED);
         
assertThat(triggered).hasSize(1).extractingResultOf("getNodeName").containsOnly("First
 Task");
 
         assertProcessInstanceEvent(events.get(3), "UserTasksProcess", 
"UserTasksProcess", ProcessInstance.STATE_ABORTED);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to