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 cd2d4ff887 [incubator-kie-issues#2009] Process Instance in `error` 
state after completing user task has wrong `nodeInstanceIdInError`. (#3965)
cd2d4ff887 is described below

commit cd2d4ff887f5b5a9b030c9264ac58c47e21661b9
Author: Pere Fernández <[email protected]>
AuthorDate: Fri Jul 4 13:10:39 2025 +0200

    [incubator-kie-issues#2009] Process Instance in `error` state after 
completing user task has wrong `nodeInstanceIdInError`. (#3965)
    
    * [incubator-kie-issues#2009] Process Instance in `error` state after 
completing user task has wrong `nodeInstanceIdInError`.
    
    * - cancelling node instances in error after retriggering the process 
instance
    - improved NodeInstanceImpl exception capturing to avoid duplicated 
wrappings
    - improved logging
    
    * - Add check to prevent NPE
    
    * - Add IT Test
    - fix typo
    
    * - rat exclusion
    
    * - fix imports order
    
    * - code review
---
 .rat-excludes                                      |   4 +
 .../workflow/instance/impl/NodeInstanceImpl.java   |  35 +++-
 .../process/impl/AbstractProcessInstance.java      |  16 +-
 .../src/main/resources/transactional_error.bpmn    | 221 +++++++++++++++++++++
 .../kogito/it/TransactionalErrorHandlingTest.java  | 158 +++++++++++++++
 .../it/JDBCTransactionalErrorHandlingIT.java}      |  14 +-
 .../PostgreSQLTransactionalErrorHandlingIT.java}   |  10 +-
 .../kie/kogito/integrationtests/HelloService.java  |   2 +-
 .../{excetpion => exception}/ServiceException.java |   2 +-
 .../src/main/resources/saga-error-handling.bpmn2   |   4 +-
 .../it/JDBCTransactionalErrorHandlingIT.java       |  13 +-
 .../src/main/resources/transactional_error.bpmn    | 221 +++++++++++++++++++++
 .../kogito/it/TransactionalErrorHandlingTest.java  | 172 ++++++++++++++++
 .../it/PostgreSQLTransactionalErrorHandlingIT.java |  13 +-
 14 files changed, 848 insertions(+), 37 deletions(-)

diff --git a/.rat-excludes b/.rat-excludes
index d6c2515214..13e313bd27 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -164,6 +164,8 @@ PMMLTree.pmml
 PMMLRegression.pmml
 # 
quarkus/integration-tests/integration-tests-quarkus-rules/src/test/resources/LoanUnit.xls.properties.test
 LoanUnit.xls.properties.test
+# 
quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/main/resources/transactional_error.bpmn
+transactional_error.bpmn
 # springboot/addons/events/decisions/src/main/resources/META-INF/kogito.addon
 kogito.addon
 # springboot/addons/events/predictions/src/main/resources/META-INF/kogito.addon
@@ -216,3 +218,5 @@ PMMLRegression.pmml
 .gitignore
 # 
springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/.gitignore
 .gitignore
+# 
springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/main/resources/transactional_error.bpmn
+transactional_error.bpmn
\ No newline at end of file
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 95dd62b8a7..61a59d6ac7 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
@@ -250,22 +250,35 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
             ((InternalProcessRuntime) kruntime.getProcessRuntime())
                     .getProcessEventSupport().fireBeforeNodeTriggered(this, 
kruntime);
         }
+
+        captureExecutionException(() -> internalTrigger(from, type));
+
+        if (!hidden) {
+            ((InternalProcessRuntime) kruntime.getProcessRuntime())
+                    .getProcessEventSupport().fireAfterNodeTriggered(this, 
kruntime);
+        }
+    }
+
+    protected void captureExecutionException(Runnable runnable) {
         try {
-            internalTrigger(from, type);
+            runnable.run();
         } catch (Exception e) {
             if 
(!WORKFLOW_PARAM_TRANSACTIONS.get(getProcessInstance().getProcess())) {
-                logger.error("Node instance causing process instance error in 
id {} in a non transactional environment", this.getStringId());
+                logger.error("Error executing node instance '{}' (node '{}' 
id: '{}') in process instance '{}' (process: '{}') in a non transactional 
environment  ", getStringId(), getNodeName(),
+                        getNodeDefinitionId(), processInstance.getId(), 
processInstance.getProcessId());
                 captureError(e);
-                return;
             } else {
-                logger.error("Node instance causing process instance error in 
id {} in a transactional environment (Wrapping)", this.getStringId());
+                // Checking if the exception has been already wrapped by the 
actual node instance to avoid unnecessary wrappings.
+                if (e instanceof ProcessInstanceExecutionException 
executionException && 
getId().equals(executionException.getFailedNodeInstanceId())) {
+                    logger.debug("Exception already wrapped by node instance 
'{}' (node '{}' id: '{}') in process instance '{}' (process: '{}')... 
propagating exception.", getStringId(),
+                            getNodeName(),
+                            getNodeDefinitionId(), processInstance.getId(), 
processInstance.getProcessId());
+                    throw executionException;
+                }
+                logger.error("Error executing node instance '{}' (node '{}' 
id: '{}') in process instance '{}' (process: '{}') in a transactional 
environment (Wrapping)", getStringId(), getNodeName(),
+                        getNodeDefinitionId(), processInstance.getId(), 
processInstance.getProcessId());
                 throw new 
ProcessInstanceExecutionException(this.getProcessInstance().getId(), 
this.getNodeDefinitionId(), this.getId(), e.getMessage(), e);
             }
-            // stop after capturing error
-        }
-        if (!hidden) {
-            ((InternalProcessRuntime) kruntime.getProcessRuntime())
-                    .getProcessEventSupport().fireAfterNodeTriggered(this, 
kruntime);
         }
     }
 
@@ -465,8 +478,10 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
             ((InternalProcessRuntime) kruntime.getProcessRuntime())
                     .getProcessEventSupport().fireBeforeNodeLeft(this, 
kruntime);
         }
+
         // trigger next node
-        nodeInstance.trigger(this, type);
+        captureExecutionException(() -> nodeInstance.trigger(this, type));
+
         Collection<Connection> outgoing = 
getNode().getOutgoingConnections(type);
         for (Connection conn : outgoing) {
             if (conn.getTo().getId().equals(nodeInstance.getNodeId())) {
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
 
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
index edfff66d24..37c5d5b6b9 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
@@ -98,7 +98,7 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
 
     protected String errorMessage;
     protected String nodeInError;
-    protected String nodeInstanceInError;
+    protected String nodeInstanceIdInError;
     protected Throwable errorCause;
     protected ProcessError processError;
 
@@ -172,7 +172,7 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
         startDate = wpi.getStartDate();
         errorMessage = wpi.getErrorMessage();
         nodeInError = wpi.getNodeIdInError();
-        nodeInstanceInError = wpi.getNodeInstanceIdInError();
+        nodeInstanceIdInError = wpi.getNodeInstanceIdInError();
         errorCause = wpi.getErrorCause().orElse(null);
 
         if (this.status == STATE_ERROR) {
@@ -835,7 +835,7 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
 
             @Override
             public String failedNodeInstanceId() {
-                return nodeInstanceInError;
+                return nodeInstanceIdInError;
             }
 
             @Override
@@ -851,13 +851,23 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
             @Override
             public void retrigger() {
                 executeInWorkflowProcessInstanceWrite(pi -> {
+                    NodeInstance nodeInstanceInError = 
pi.getNodeInstance(nodeInstanceIdInError, true);
                     NodeInstanceImpl ni = (NodeInstanceImpl) 
pi.getByNodeDefinitionId(nodeInError, pi.getNodeContainer());
+
                     clearError(pi);
+
                     
getProcessRuntime().getProcessEventSupport().fireProcessRetriggered(pi, 
pi.getKnowledgeRuntime());
                     org.kie.api.runtime.process.NodeInstanceContainer 
nodeInstanceContainer = ni.getNodeInstanceContainer();
                     if (nodeInstanceContainer instanceof NodeInstance) {
                         ((NodeInstance) 
nodeInstanceContainer).internalSetTriggerTime(new Date());
                     }
+
+                    if (nodeInstanceInError != null && 
nodeInstanceInError.getLeaveTime() == null && 
nodeInstanceInError.getCancelType() == null) {
+                        // Cancelling the node instance in error before 
retriggering if it is active to avoid duplicated node instances.
+                        // This is required when dealing with work items (ej: 
Human Tasks)
+                        nodeInstanceInError.cancel();
+                    }
+
                     ni.internalSetRetrigger(true);
                     ni.trigger(null, Node.CONNECTION_DEFAULT_TYPE);
                     return null;
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/main/resources/transactional_error.bpmn
 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/main/resources/transactional_error.bpmn
new file mode 100644
index 0000000000..1635991af1
--- /dev/null
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/main/resources/transactional_error.bpmn
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"; 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"; 
xmlns:bpsim="http://www.bpsim.org/schemas/1.0"; 
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"; 
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"; 
xmlns:drools="http://www.jboss.org/drools"; id="_HxRxkDlJED6vKMe2WKzD0Q" 
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd 
http://www. [...]
+  <bpmn2:itemDefinition id="_failItem" structureRef="Boolean"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_PriorityInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_CommentInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_DescriptionInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_CreatedByInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_GroupIdInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_ContentInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotStartedReassignInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotCompletedReassignInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotStartedNotifyInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotCompletedNotifyInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_failInputXItem" 
structureRef="Boolean"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_failOutputXItem" 
structureRef="Boolean"/>
+  <bpmn2:collaboration id="_6CAC7A4D-3A99-48DE-9CB4-FE788E60AEDB" 
name="Default Collaboration">
+    <bpmn2:participant id="_CC69D1E8-AB63-42F1-A038-911BEF77413F" name="Pool 
Participant" processRef="transactional_errors"/>
+  </bpmn2:collaboration>
+  <bpmn2:process id="transactional_errors" drools:packageName="org.kie.kogito" 
drools:version="1.0" drools:adHoc="false" name="transactional_errors" 
isExecutable="true" processType="Public">
+    <bpmn2:property id="fail" itemSubjectRef="_failItem" name="fail"/>
+    <bpmn2:sequenceFlow id="_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611" 
sourceRef="_E691E0BE-B728-4369-867D-AACC71812F87" 
targetRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801"/>
+    <bpmn2:sequenceFlow id="_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9" 
sourceRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529" 
targetRef="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD"/>
+    <bpmn2:sequenceFlow id="_20A1FF12-D2BF-4522-A23A-724F925A7584" 
sourceRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801" 
targetRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529"/>
+    <bpmn2:sequenceFlow id="_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7" 
sourceRef="_48F366CD-9D0F-4E92-AA59-1638DCD5933B" 
targetRef="_E691E0BE-B728-4369-867D-AACC71812F87"/>
+    <bpmn2:scriptTask id="_9413B17A-F1C9-444F-978D-63EFA8CD4801" 
name="ScriptTask 1" scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[ScriptTask 1]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611</bpmn2:incoming>
+      <bpmn2:outgoing>_20A1FF12-D2BF-4522-A23A-724F925A7584</bpmn2:outgoing>
+      <bpmn2:script>System.out.println("This is a previous task to see if we 
catch the error in this node");</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:userTask id="_E691E0BE-B728-4369-867D-AACC71812F87" name="Before">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Before]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7</bpmn2:incoming>
+      <bpmn2:outgoing>_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611</bpmn2:outgoing>
+      <bpmn2:ioSpecification>
+        <bpmn2:dataInput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX" drools:dtype="Object" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputXItem" 
name="TaskName"/>
+        <bpmn2:dataInput id="_E691E0BE-B728-4369-867D-AACC71812F87_failInputX" 
drools:dtype="Boolean" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_failInputXItem" 
name="fail"/>
+        <bpmn2:dataInput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX" 
drools:dtype="Object" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputXItem" 
name="Skippable"/>
+        <bpmn2:dataOutput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX" drools:dtype="Boolean" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_failOutputXItem" 
name="fail"/>
+        <bpmn2:inputSet>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX</bpmn2:dataInputRefs>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_failInputX</bpmn2:dataInputRefs>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX</bpmn2:dataInputRefs>
+        </bpmn2:inputSet>
+        <bpmn2:outputSet>
+          
<bpmn2:dataOutputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX</bpmn2:dataOutputRefs>
+        </bpmn2:outputSet>
+      </bpmn2:ioSpecification>
+      <bpmn2:dataInputAssociation>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX</bpmn2:targetRef>
+        <bpmn2:assignment>
+          <bpmn2:from 
xsi:type="bpmn2:tFormalExpression"><![CDATA[Before]]></bpmn2:from>
+          <bpmn2:to 
xsi:type="bpmn2:tFormalExpression"><![CDATA[_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX]]></bpmn2:to>
+        </bpmn2:assignment>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataInputAssociation>
+        <bpmn2:sourceRef>fail</bpmn2:sourceRef>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_failInputX</bpmn2:targetRef>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataInputAssociation>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX</bpmn2:targetRef>
+        <bpmn2:assignment>
+          <bpmn2:from 
xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+          <bpmn2:to 
xsi:type="bpmn2:tFormalExpression"><![CDATA[_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX]]></bpmn2:to>
+        </bpmn2:assignment>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataOutputAssociation>
+        
<bpmn2:sourceRef>_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX</bpmn2:sourceRef>
+        <bpmn2:targetRef>fail</bpmn2:targetRef>
+      </bpmn2:dataOutputAssociation>
+      <bpmn2:potentialOwner id="_HxTmwDlJED6vKMe2WKzD0Q">
+        <bpmn2:resourceAssignmentExpression id="_HxTmwTlJED6vKMe2WKzD0Q">
+          <bpmn2:formalExpression>jdoe</bpmn2:formalExpression>
+        </bpmn2:resourceAssignmentExpression>
+      </bpmn2:potentialOwner>
+    </bpmn2:userTask>
+    <bpmn2:endEvent id="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD">
+      <bpmn2:incoming>_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9</bpmn2:incoming>
+    </bpmn2:endEvent>
+    <bpmn2:scriptTask id="_530D47D5-4BE7-4E54-8F12-C225CB9B3529" name="It may 
fail" scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[It may fail]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_20A1FF12-D2BF-4522-A23A-724F925A7584</bpmn2:incoming>
+      <bpmn2:outgoing>_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9</bpmn2:outgoing>
+      <bpmn2:script>if(fail) {
+    throw new java.lang.RuntimeException("This is a controlled error... fail 
-&gt; true");
+}
+
+System.out.println("Congratulations there's not error!");</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:startEvent id="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+      <bpmn2:outgoing>_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7</bpmn2:outgoing>
+    </bpmn2:startEvent>
+  </bpmn2:process>
+  <bpmndi:BPMNDiagram>
+    <bpmndi:BPMNPlane bpmnElement="transactional_errors">
+      <bpmndi:BPMNShape id="shape__48F366CD-9D0F-4E92-AA59-1638DCD5933B" 
bpmnElement="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+        <dc:Bounds height="56" width="56" x="104" y="131"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529" 
bpmnElement="_530D47D5-4BE7-4E54-8F12-C225CB9B3529">
+        <dc:Bounds height="102" width="154" x="684" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__F44C0F61-F897-4D8F-884A-AEBFF906E5FD" 
bpmnElement="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD">
+        <dc:Bounds height="56" width="56" x="918" y="131"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__E691E0BE-B728-4369-867D-AACC71812F87" 
bpmnElement="_E691E0BE-B728-4369-867D-AACC71812F87">
+        <dc:Bounds height="102" width="154" x="216" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__9413B17A-F1C9-444F-978D-63EFA8CD4801" 
bpmnElement="_9413B17A-F1C9-444F-978D-63EFA8CD4801">
+        <dc:Bounds height="102" width="154" x="450" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge 
id="edge_shape__48F366CD-9D0F-4E92-AA59-1638DCD5933B_to_shape__E691E0BE-B728-4369-867D-AACC71812F87"
 bpmnElement="_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7">
+        <di:waypoint x="132" y="159"/>
+        <di:waypoint x="293" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__9413B17A-F1C9-444F-978D-63EFA8CD4801_to_shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529"
 bpmnElement="_20A1FF12-D2BF-4522-A23A-724F925A7584">
+        <di:waypoint x="527" y="159"/>
+        <di:waypoint x="684" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529_to_shape__F44C0F61-F897-4D8F-884A-AEBFF906E5FD"
 bpmnElement="_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9">
+        <di:waypoint x="761" y="159"/>
+        <di:waypoint x="946" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__E691E0BE-B728-4369-867D-AACC71812F87_to_shape__9413B17A-F1C9-444F-978D-63EFA8CD4801"
 bpmnElement="_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611">
+        <di:waypoint x="293" y="159"/>
+        <di:waypoint x="527" y="159"/>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+  <bpmn2:relationship type="BPSimData">
+    <bpmn2:extensionElements>
+      <bpsim:BPSimData>
+        <bpsim:Scenario id="default" name="Simulationscenario">
+          <bpsim:ScenarioParameters/>
+          <bpsim:ElementParameters 
elementRef="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_E691E0BE-B728-4369-867D-AACC71812F87">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+        </bpsim:Scenario>
+      </bpsim:BPSimData>
+    </bpmn2:extensionElements>
+    <bpmn2:source>_HxRxkDlJED6vKMe2WKzD0Q</bpmn2:source>
+    <bpmn2:target>_HxRxkDlJED6vKMe2WKzD0Q</bpmn2:target>
+  </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
new file mode 100644
index 0000000000..42eeeef76c
--- /dev/null
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
@@ -0,0 +1,158 @@
+/*
+ * 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.it;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.Test;
+import org.kie.kogito.usertask.model.TransitionInfo;
+
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.emptyOrNullString;
+
+public abstract class TransactionalErrorHandlingTest {
+    private static final String USER_TASK_BASE_PATH = "/usertasks/instance";
+    private static final String MANAGEMENT_INSTANCE_PATH = 
"/management/processes/{processId}/instances/{processInstanceId}";
+
+    private static final String ERRORS_PROCESS = "transactional_errors";
+
+    static {
+        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+    }
+
+    @Test
+    void testTransactionalErrorsProcess() {
+        String pId = given().contentType(ContentType.JSON)
+                .when()
+                .pathParam("processId", ERRORS_PROCESS)
+                .body(Map.of("fail", true))
+                .post("/{processId}")
+                .then()
+                .statusCode(201)
+                .body("id", not(emptyOrNullString()))
+                .extract()
+                .path("id");
+
+        String userTaskId = given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .path("[0].id");
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .body(new TransitionInfo("complete", Map.of("fail", true)))
+                .when()
+                .post("/{userTaskId}/transition", userTaskId)
+                .then()
+                .statusCode(500);
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .get("error")
+                .then()
+                .statusCode(200)
+                .body("failedNodeId", 
equalTo("_E691E0BE-B728-4369-867D-AACC71812F87"))
+                .body("id", equalTo(pId))
+                .body("message", containsString("java.lang.RuntimeException - 
This is a controlled error... fail -> true"));
+
+        given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .body("[0].id", equalTo(userTaskId));
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .post("retrigger")
+                .then()
+                .statusCode(200)
+                .body("id", equalTo(pId))
+                .body("fail", equalTo(true));
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .get("error")
+                .then()
+                .statusCode(400)
+                .body(equalTo("Process instance with id " + pId + " is not in 
error state"));
+
+        userTaskId = given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .body("[0].id", not(equalTo(userTaskId)))
+                .extract()
+                .body()
+                .path("[0].id");
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .body(new TransitionInfo("complete", Map.of("fail", false)))
+                .when()
+                .post("/{userTaskId}/transition", userTaskId)
+                .then()
+                .statusCode(200);
+
+        given()
+                .accept(ContentType.JSON)
+                .when()
+                .pathParam("processId", ERRORS_PROCESS)
+                .get("/{processId}")
+                .then()
+                .statusCode(200)
+                .body("size()", is(0));
+    }
+}
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
similarity index 68%
copy from 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
copy to 
quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
index f1b671e1c4..78985ec85c 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
@@ -16,11 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.integrationtests.excetpion;
 
-public class ServiceException extends RuntimeException {
+package org.kie.kogito.it;
 
-    public ServiceException(String message) {
-        super(message);
-    }
+import org.kie.kogito.testcontainers.quarkus.PostgreSqlQuarkusTestResource;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+@QuarkusTestResource(PostgreSqlQuarkusTestResource.class)
+public class JDBCTransactionalErrorHandlingIT extends 
TransactionalErrorHandlingTest {
 }
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
similarity index 80%
copy from 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
copy to 
quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
index f1b671e1c4..5d4167b543 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes-persistence/integration-tests-quarkus-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.integrationtests.excetpion;
 
-public class ServiceException extends RuntimeException {
+package org.kie.kogito.it;
 
-    public ServiceException(String message) {
-        super(message);
-    }
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class PostgreSQLTransactionalErrorHandlingIT extends 
TransactionalErrorHandlingTest {
 }
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/HelloService.java
 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/HelloService.java
index eca48adac1..e8f97644d1 100755
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/HelloService.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/HelloService.java
@@ -20,7 +20,7 @@ package org.kie.kogito.integrationtests;
 
 import java.io.IOException;
 
-import org.kie.kogito.integrationtests.excetpion.ServiceException;
+import org.kie.kogito.integrationtests.exception.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/exception/ServiceException.java
similarity index 94%
copy from 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
copy to 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/exception/ServiceException.java
index f1b671e1c4..72c75841ae 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/exception/ServiceException.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.integrationtests.excetpion;
+package org.kie.kogito.integrationtests.exception;
 
 public class ServiceException extends RuntimeException {
 
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/resources/saga-error-handling.bpmn2
 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/resources/saga-error-handling.bpmn2
index 89df47591e..5a98b6ea4b 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/resources/saga-error-handling.bpmn2
+++ 
b/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/resources/saga-error-handling.bpmn2
@@ -37,7 +37,7 @@
   <bpmn2:interface id="_A4898FE5-A2BC-4D3C-90F2-7992CD7FB20C_ServiceInterface" 
name="org.kie.kogito.integrationtests.HelloService" 
implementationRef="org.kie.kogito.integrationtests.HelloService">
     <bpmn2:operation 
id="_A4898FE5-A2BC-4D3C-90F2-7992CD7FB20C_ServiceOperation" name="echo" 
implementationRef="echo"/>
   </bpmn2:interface>
-  <bpmn2:error id="org.kie.kogito.integrationtests.excetpion.ServiceException" 
errorCode="org.kie.kogito.integrationtests.excetpion.ServiceException"/>
+  <bpmn2:error id="org.kie.kogito.integrationtests.exception.ServiceException" 
errorCode="org.kie.kogito.integrationtests.exception.ServiceException"/>
   <bpmn2:interface id="_F12F8E21-9130-49C3-A73F-F3B0093104FB_ServiceInterface" 
name="org.kie.kogito.integrationtests.HelloService" 
implementationRef="org.kie.kogito.integrationtests.HelloService">
     <bpmn2:operation 
id="_F12F8E21-9130-49C3-A73F-F3B0093104FB_ServiceOperation" name="hello" 
implementationRef="hello"/>
   </bpmn2:interface>
@@ -263,7 +263,7 @@
           </drools:metaData>
         </bpmn2:extensionElements>
         <bpmn2:outgoing>_D20C84EC-27D5-4FFD-B959-87DFF80B9AA1</bpmn2:outgoing>
-        <bpmn2:errorEventDefinition 
drools:erefname="org.kie.kogito.integrationtests.excetpion.ServiceException" 
errorRef="org.kie.kogito.integrationtests.excetpion.ServiceException"/>
+        <bpmn2:errorEventDefinition 
drools:erefname="org.kie.kogito.integrationtests.exception.ServiceException" 
errorRef="org.kie.kogito.integrationtests.exception.ServiceException"/>
       </bpmn2:startEvent>
       <bpmn2:serviceTask id="_A4898FE5-A2BC-4D3C-90F2-7992CD7FB20C" 
drools:serviceimplementation="Java" 
drools:serviceinterface="org.kie.kogito.integrationtests.HelloService" 
drools:serviceoperation="echo" name="Failed" implementation="Java" 
operationRef="_A4898FE5-A2BC-4D3C-90F2-7992CD7FB20C_ServiceOperation">
         <bpmn2:extensionElements>
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
similarity index 61%
copy from 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
copy to 
springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
index f1b671e1c4..81787f56a4 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
+++ 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-jdbc/src/test/java/org/kie/kogito/it/JDBCTransactionalErrorHandlingIT.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.integrationtests.excetpion;
 
-public class ServiceException extends RuntimeException {
+package org.kie.kogito.it;
 
-    public ServiceException(String message) {
-        super(message);
-    }
+import 
org.kie.kogito.testcontainers.springboot.PostgreSqlSpringBootTestResource;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ContextConfiguration;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, 
classes = KogitoSpringbootApplication.class)
+@ContextConfiguration(initializers = PostgreSqlSpringBootTestResource.class)
+public class JDBCTransactionalErrorHandlingIT extends 
TransactionalErrorHandlingTest {
 }
diff --git 
a/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/main/resources/transactional_error.bpmn
 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/main/resources/transactional_error.bpmn
new file mode 100644
index 0000000000..1635991af1
--- /dev/null
+++ 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/main/resources/transactional_error.bpmn
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"; 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"; 
xmlns:bpsim="http://www.bpsim.org/schemas/1.0"; 
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"; 
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"; 
xmlns:drools="http://www.jboss.org/drools"; id="_HxRxkDlJED6vKMe2WKzD0Q" 
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd 
http://www. [...]
+  <bpmn2:itemDefinition id="_failItem" structureRef="Boolean"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_PriorityInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_CommentInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_DescriptionInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_CreatedByInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_GroupIdInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_ContentInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotStartedReassignInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotCompletedReassignInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotStartedNotifyInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_NotCompletedNotifyInputXItem" 
structureRef="Object"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_failInputXItem" 
structureRef="Boolean"/>
+  <bpmn2:itemDefinition 
id="__E691E0BE-B728-4369-867D-AACC71812F87_failOutputXItem" 
structureRef="Boolean"/>
+  <bpmn2:collaboration id="_6CAC7A4D-3A99-48DE-9CB4-FE788E60AEDB" 
name="Default Collaboration">
+    <bpmn2:participant id="_CC69D1E8-AB63-42F1-A038-911BEF77413F" name="Pool 
Participant" processRef="transactional_errors"/>
+  </bpmn2:collaboration>
+  <bpmn2:process id="transactional_errors" drools:packageName="org.kie.kogito" 
drools:version="1.0" drools:adHoc="false" name="transactional_errors" 
isExecutable="true" processType="Public">
+    <bpmn2:property id="fail" itemSubjectRef="_failItem" name="fail"/>
+    <bpmn2:sequenceFlow id="_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611" 
sourceRef="_E691E0BE-B728-4369-867D-AACC71812F87" 
targetRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801"/>
+    <bpmn2:sequenceFlow id="_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9" 
sourceRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529" 
targetRef="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD"/>
+    <bpmn2:sequenceFlow id="_20A1FF12-D2BF-4522-A23A-724F925A7584" 
sourceRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801" 
targetRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529"/>
+    <bpmn2:sequenceFlow id="_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7" 
sourceRef="_48F366CD-9D0F-4E92-AA59-1638DCD5933B" 
targetRef="_E691E0BE-B728-4369-867D-AACC71812F87"/>
+    <bpmn2:scriptTask id="_9413B17A-F1C9-444F-978D-63EFA8CD4801" 
name="ScriptTask 1" scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[ScriptTask 1]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611</bpmn2:incoming>
+      <bpmn2:outgoing>_20A1FF12-D2BF-4522-A23A-724F925A7584</bpmn2:outgoing>
+      <bpmn2:script>System.out.println("This is a previous task to see if we 
catch the error in this node");</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:userTask id="_E691E0BE-B728-4369-867D-AACC71812F87" name="Before">
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[Before]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7</bpmn2:incoming>
+      <bpmn2:outgoing>_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611</bpmn2:outgoing>
+      <bpmn2:ioSpecification>
+        <bpmn2:dataInput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX" drools:dtype="Object" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputXItem" 
name="TaskName"/>
+        <bpmn2:dataInput id="_E691E0BE-B728-4369-867D-AACC71812F87_failInputX" 
drools:dtype="Boolean" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_failInputXItem" 
name="fail"/>
+        <bpmn2:dataInput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX" 
drools:dtype="Object" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputXItem" 
name="Skippable"/>
+        <bpmn2:dataOutput 
id="_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX" drools:dtype="Boolean" 
itemSubjectRef="__E691E0BE-B728-4369-867D-AACC71812F87_failOutputXItem" 
name="fail"/>
+        <bpmn2:inputSet>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX</bpmn2:dataInputRefs>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_failInputX</bpmn2:dataInputRefs>
+          
<bpmn2:dataInputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX</bpmn2:dataInputRefs>
+        </bpmn2:inputSet>
+        <bpmn2:outputSet>
+          
<bpmn2:dataOutputRefs>_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX</bpmn2:dataOutputRefs>
+        </bpmn2:outputSet>
+      </bpmn2:ioSpecification>
+      <bpmn2:dataInputAssociation>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX</bpmn2:targetRef>
+        <bpmn2:assignment>
+          <bpmn2:from 
xsi:type="bpmn2:tFormalExpression"><![CDATA[Before]]></bpmn2:from>
+          <bpmn2:to 
xsi:type="bpmn2:tFormalExpression"><![CDATA[_E691E0BE-B728-4369-867D-AACC71812F87_TaskNameInputX]]></bpmn2:to>
+        </bpmn2:assignment>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataInputAssociation>
+        <bpmn2:sourceRef>fail</bpmn2:sourceRef>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_failInputX</bpmn2:targetRef>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataInputAssociation>
+        
<bpmn2:targetRef>_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX</bpmn2:targetRef>
+        <bpmn2:assignment>
+          <bpmn2:from 
xsi:type="bpmn2:tFormalExpression"><![CDATA[false]]></bpmn2:from>
+          <bpmn2:to 
xsi:type="bpmn2:tFormalExpression"><![CDATA[_E691E0BE-B728-4369-867D-AACC71812F87_SkippableInputX]]></bpmn2:to>
+        </bpmn2:assignment>
+      </bpmn2:dataInputAssociation>
+      <bpmn2:dataOutputAssociation>
+        
<bpmn2:sourceRef>_E691E0BE-B728-4369-867D-AACC71812F87_failOutputX</bpmn2:sourceRef>
+        <bpmn2:targetRef>fail</bpmn2:targetRef>
+      </bpmn2:dataOutputAssociation>
+      <bpmn2:potentialOwner id="_HxTmwDlJED6vKMe2WKzD0Q">
+        <bpmn2:resourceAssignmentExpression id="_HxTmwTlJED6vKMe2WKzD0Q">
+          <bpmn2:formalExpression>jdoe</bpmn2:formalExpression>
+        </bpmn2:resourceAssignmentExpression>
+      </bpmn2:potentialOwner>
+    </bpmn2:userTask>
+    <bpmn2:endEvent id="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD">
+      <bpmn2:incoming>_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9</bpmn2:incoming>
+    </bpmn2:endEvent>
+    <bpmn2:scriptTask id="_530D47D5-4BE7-4E54-8F12-C225CB9B3529" name="It may 
fail" scriptFormat="http://www.java.com/java";>
+      <bpmn2:extensionElements>
+        <drools:metaData name="elementname">
+          <drools:metaValue><![CDATA[It may fail]]></drools:metaValue>
+        </drools:metaData>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>_20A1FF12-D2BF-4522-A23A-724F925A7584</bpmn2:incoming>
+      <bpmn2:outgoing>_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9</bpmn2:outgoing>
+      <bpmn2:script>if(fail) {
+    throw new java.lang.RuntimeException("This is a controlled error... fail 
-&gt; true");
+}
+
+System.out.println("Congratulations there's not error!");</bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:startEvent id="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+      <bpmn2:outgoing>_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7</bpmn2:outgoing>
+    </bpmn2:startEvent>
+  </bpmn2:process>
+  <bpmndi:BPMNDiagram>
+    <bpmndi:BPMNPlane bpmnElement="transactional_errors">
+      <bpmndi:BPMNShape id="shape__48F366CD-9D0F-4E92-AA59-1638DCD5933B" 
bpmnElement="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+        <dc:Bounds height="56" width="56" x="104" y="131"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529" 
bpmnElement="_530D47D5-4BE7-4E54-8F12-C225CB9B3529">
+        <dc:Bounds height="102" width="154" x="684" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__F44C0F61-F897-4D8F-884A-AEBFF906E5FD" 
bpmnElement="_F44C0F61-F897-4D8F-884A-AEBFF906E5FD">
+        <dc:Bounds height="56" width="56" x="918" y="131"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__E691E0BE-B728-4369-867D-AACC71812F87" 
bpmnElement="_E691E0BE-B728-4369-867D-AACC71812F87">
+        <dc:Bounds height="102" width="154" x="216" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="shape__9413B17A-F1C9-444F-978D-63EFA8CD4801" 
bpmnElement="_9413B17A-F1C9-444F-978D-63EFA8CD4801">
+        <dc:Bounds height="102" width="154" x="450" y="108"/>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge 
id="edge_shape__48F366CD-9D0F-4E92-AA59-1638DCD5933B_to_shape__E691E0BE-B728-4369-867D-AACC71812F87"
 bpmnElement="_4A571422-CE8A-4BAD-8D3B-CAD5F9DE07A7">
+        <di:waypoint x="132" y="159"/>
+        <di:waypoint x="293" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__9413B17A-F1C9-444F-978D-63EFA8CD4801_to_shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529"
 bpmnElement="_20A1FF12-D2BF-4522-A23A-724F925A7584">
+        <di:waypoint x="527" y="159"/>
+        <di:waypoint x="684" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__530D47D5-4BE7-4E54-8F12-C225CB9B3529_to_shape__F44C0F61-F897-4D8F-884A-AEBFF906E5FD"
 bpmnElement="_75CD85AE-40AB-4D88-BF39-C22CA61DEAC9">
+        <di:waypoint x="761" y="159"/>
+        <di:waypoint x="946" y="159"/>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge 
id="edge_shape__E691E0BE-B728-4369-867D-AACC71812F87_to_shape__9413B17A-F1C9-444F-978D-63EFA8CD4801"
 bpmnElement="_47D94ED0-DBD0-40BF-A8BE-D9CBE9B33611">
+        <di:waypoint x="293" y="159"/>
+        <di:waypoint x="527" y="159"/>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+  <bpmn2:relationship type="BPSimData">
+    <bpmn2:extensionElements>
+      <bpsim:BPSimData>
+        <bpsim:Scenario id="default" name="Simulationscenario">
+          <bpsim:ScenarioParameters/>
+          <bpsim:ElementParameters 
elementRef="_48F366CD-9D0F-4E92-AA59-1638DCD5933B">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_530D47D5-4BE7-4E54-8F12-C225CB9B3529">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_E691E0BE-B728-4369-867D-AACC71812F87">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+          <bpsim:ElementParameters 
elementRef="_9413B17A-F1C9-444F-978D-63EFA8CD4801">
+            <bpsim:TimeParameters>
+              <bpsim:ProcessingTime>
+                <bpsim:NormalDistribution mean="0" standardDeviation="0"/>
+              </bpsim:ProcessingTime>
+            </bpsim:TimeParameters>
+            <bpsim:ResourceParameters>
+              <bpsim:Availability>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Availability>
+              <bpsim:Quantity>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:Quantity>
+            </bpsim:ResourceParameters>
+            <bpsim:CostParameters>
+              <bpsim:UnitCost>
+                <bpsim:FloatingParameter value="0"/>
+              </bpsim:UnitCost>
+            </bpsim:CostParameters>
+          </bpsim:ElementParameters>
+        </bpsim:Scenario>
+      </bpsim:BPSimData>
+    </bpmn2:extensionElements>
+    <bpmn2:source>_HxRxkDlJED6vKMe2WKzD0Q</bpmn2:source>
+    <bpmn2:target>_HxRxkDlJED6vKMe2WKzD0Q</bpmn2:target>
+  </bpmn2:relationship>
+</bpmn2:definitions>
\ No newline at end of file
diff --git 
a/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
new file mode 100644
index 0000000000..649b1c89f3
--- /dev/null
+++ 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-persistence-common/src/test/java/org/kie/kogito/it/TransactionalErrorHandlingTest.java
@@ -0,0 +1,172 @@
+/*
+ * 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.it;
+
+import java.util.Map;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.kie.kogito.usertask.model.TransitionInfo;
+import org.springframework.boot.test.web.server.LocalServerPort;
+
+import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.emptyOrNullString;
+
+public abstract class TransactionalErrorHandlingTest {
+    private static final String USER_TASK_BASE_PATH = "/usertasks/instance";
+    private static final String MANAGEMENT_INSTANCE_PATH = 
"/management/processes/{processId}/instances/{processInstanceId}";
+
+    private static final String ERRORS_PROCESS = "transactional_errors";
+
+    static {
+        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
+    }
+
+    @LocalServerPort
+    private int httpPort;
+
+    @BeforeEach
+    void setPort() {
+        RestAssured.port = httpPort;
+    }
+
+    @Test
+    void testTransactionalErrorsProcess() {
+        String pId = given().contentType(ContentType.JSON)
+                .when()
+                .body(Map.of("fail", true))
+                .post("/{processId}", ERRORS_PROCESS)
+                .then()
+                .statusCode(201)
+                .body("id", not(emptyOrNullString()))
+                .extract()
+                .path("id");
+
+        String userTaskId = given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .queryParam("group", "user")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .path("[0].id");
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .queryParam("group", "user")
+                .body(new TransitionInfo("complete", Map.of("fail", true)))
+                .when()
+                .post("/{userTaskId}/transition", userTaskId)
+                .then()
+                .statusCode(500);
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .get("error")
+                .then()
+                .statusCode(200)
+                .body("failedNodeId", 
equalTo("_E691E0BE-B728-4369-867D-AACC71812F87"))
+                .body("id", equalTo(pId))
+                .body("message", containsString("java.lang.RuntimeException - 
This is a controlled error... fail -> true"));
+
+        given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .queryParam("group", "user")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .body("[0].id", equalTo(userTaskId));
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .post("retrigger")
+                .then()
+                .statusCode(200)
+                .body("id", equalTo(pId))
+                .body("fail", equalTo(true));
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(MANAGEMENT_INSTANCE_PATH)
+                .pathParam("processId", ERRORS_PROCESS)
+                .pathParam("processInstanceId", pId)
+                .when()
+                .get("error")
+                .then()
+                .statusCode(400)
+                .body(equalTo("Process instance with id " + pId + " is not in 
error state"));
+
+        userTaskId = given()
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .queryParam("group", "user")
+                .contentType(ContentType.JSON)
+                .when()
+                .get()
+                .then()
+                .statusCode(200)
+                .body("[0].id", not(equalTo(userTaskId)))
+                .extract()
+                .body()
+                .path("[0].id");
+
+        given()
+                .contentType(ContentType.JSON)
+                .basePath(USER_TASK_BASE_PATH)
+                .queryParam("user", "jdoe")
+                .queryParam("group", "user")
+                .body(new TransitionInfo("complete", Map.of("fail", false)))
+                .when()
+                .post("/{userTaskId}/transition", userTaskId)
+                .then()
+                .statusCode(200);
+
+        given()
+                .accept(ContentType.JSON)
+                .when()
+                .pathParam("processId", ERRORS_PROCESS)
+                .get("/{processId}")
+                .then()
+                .statusCode(200)
+                .body("size()", is(0));
+    }
+}
diff --git 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
similarity index 60%
rename from 
quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
rename to 
springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
index f1b671e1c4..27bbe119f3 100644
--- 
a/quarkus/integration-tests/integration-tests-quarkus-processes/src/main/java/org/kie/kogito/integrationtests/excetpion/ServiceException.java
+++ 
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/src/test/java/org/kie/kogito/it/PostgreSQLTransactionalErrorHandlingIT.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.integrationtests.excetpion;
 
-public class ServiceException extends RuntimeException {
+package org.kie.kogito.it;
 
-    public ServiceException(String message) {
-        super(message);
-    }
+import 
org.kie.kogito.testcontainers.springboot.PostgreSqlSpringBootTestResource;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ContextConfiguration;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, 
classes = KogitoSpringbootApplication.class)
+@ContextConfiguration(initializers = PostgreSqlSpringBootTestResource.class)
+public class PostgreSQLTransactionalErrorHandlingIT extends 
TransactionalErrorHandlingTest {
 }


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

Reply via email to