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

mweiler 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 09b10a6e9b [kie-issues#2014] Ensure user tasks gets completed after 
PIM (#3967)
09b10a6e9b is described below

commit 09b10a6e9bb50c06932b9c8faf7dd3bfa29993be
Author: Martin Weiler <[email protected]>
AuthorDate: Mon Jul 14 13:41:50 2025 -0600

    [kie-issues#2014] Ensure user tasks gets completed after PIM (#3967)
    
    * [kie-issues#2014] Ensure user tasks gets completed after PIM
    
    * Test case for PIM with tasks
---
 .../jdbc/AbstractProcessInstancesIT.java           | 34 ++++++++++++++++++++++
 ...erTaskKogitoWorkItemHandlerProcessListener.java |  3 +-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git 
a/addons/common/persistence/jdbc/src/test/java/org/kie/persistence/jdbc/AbstractProcessInstancesIT.java
 
b/addons/common/persistence/jdbc/src/test/java/org/kie/persistence/jdbc/AbstractProcessInstancesIT.java
index db89f60c6e..02e0fe0d6f 100644
--- 
a/addons/common/persistence/jdbc/src/test/java/org/kie/persistence/jdbc/AbstractProcessInstancesIT.java
+++ 
b/addons/common/persistence/jdbc/src/test/java/org/kie/persistence/jdbc/AbstractProcessInstancesIT.java
@@ -251,6 +251,40 @@ abstract class AbstractProcessInstancesIT {
 
     }
 
+    @Test
+    void testMigrateTaskFlow() {
+        BpmnProcess processV1 = createProcess(getDataSource(), lock(), 
"BPMN2-UserTask.bpmn2");
+        BpmnProcess processV2 = createProcess(getDataSource(), lock(), 
"BPMN2-UserTask-v2.bpmn2");
+        ProcessInstance<BpmnVariables> processInstance = 
processV1.createInstance(BpmnVariables.create(singletonMap("test", "test")));
+        processInstance.start();
+
+        assertThat(processInstance.status()).isEqualTo(STATE_ACTIVE);
+        assertThat(processInstance.description()).isEqualTo("BPMN2-UserTask");
+
+        JDBCProcessInstances processInstancesV1 = (JDBCProcessInstances) 
processV1.instances();
+        assertThat(processInstancesV1.exists(processInstance.id())).isTrue();
+        verify(processInstancesV1).create(any(), any());
+
+        assertThat(processInstance.description()).isEqualTo("BPMN2-UserTask");
+
+        processV1.instances().migrateProcessInstances("BPMN2_UserTask", "2.0", 
processInstance.id());
+
+        JDBCProcessInstances processInstancesV2 = (JDBCProcessInstances) 
processV2.instances();
+        assertThat(processInstancesV2.exists(processInstance.id())).isTrue();
+
+        processInstance = (ProcessInstance<BpmnVariables>) 
processInstancesV2.findById(processInstance.id()).get();
+        WorkItem workItem = processInstance.workItems(securityPolicy).get(0);
+        assertThat(workItem).isNotNull();
+        assertThat(workItem.getParameters()).containsEntry("ActorId", "john");
+
+        processInstance.completeWorkItem(workItem.getId(), null, 
securityPolicy);
+        assertThat(processInstance.status()).isEqualTo(STATE_COMPLETED);
+
+        processInstancesV2 = (JDBCProcessInstances) processV2.instances();
+        verify(processInstancesV2, times(1)).remove(processInstance.id());
+        assertEmpty(processV2.instances());
+    }
+
     @Test
     public void testRemove() {
         BpmnProcess process = createProcess(getDataSource(), lock(), 
"BPMN2-UserTask.bpmn2");
diff --git 
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandlerProcessListener.java
 
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandlerProcessListener.java
index 116eb8716f..8f5a2de5d6 100644
--- 
a/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandlerProcessListener.java
+++ 
b/jbpm/jbpm-usertask-workitem/src/main/java/org/kie/kogito/jbpm/usertask/handler/UserTaskKogitoWorkItemHandlerProcessListener.java
@@ -53,10 +53,9 @@ public class UserTaskKogitoWorkItemHandlerProcessListener 
implements UserTaskEve
         }
 
         LOG.debug("onUserTaskState {} on complete work item", event);
-        String processId = (String) 
event.getUserTaskInstance().getMetadata().get("ProcessId");
         String processInstanceId = (String) 
event.getUserTaskInstance().getMetadata().get("ProcessInstanceId");
 
-        
processes.processById(processId).instances().findById(processInstanceId).ifPresent(pi
 -> {
+        
processes.processByProcessInstanceId(processInstanceId).get().instances().findById(processInstanceId).ifPresent(pi
 -> {
             Map<String, Object> data = new 
HashMap<>(event.getUserTaskInstance().getOutputs());
             data.put("ActorId", event.getUserTaskInstance().getActualOwner());
             data.put("Notify", false);


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

Reply via email to