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

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


The following commit(s) were added to refs/heads/main by this push:
     new e8195dc84 [incubator-kie-issues-1485] Reenable event test in 
ProcessTestEvents in kogito-apps (#2110)
e8195dc84 is described below

commit e8195dc849ae0bcf6fc227c02150785573a72b41
Author: Enrique <[email protected]>
AuthorDate: Tue Oct 22 22:40:01 2024 +0200

    [incubator-kie-issues-1485] Reenable event test in ProcessTestEvents in 
kogito-apps (#2110)
---
 .../kogito/index/AbstractProcessDataIndexIT.java   | 42 +++++++++++------
 .../index/api/KogitoRuntimeCommonClient.java       |  7 ++-
 .../src/main/resources/basic.schema.graphqls       |  1 +
 .../index/service/api/KogitoRuntimeClientImpl.java | 55 ++++++++++------------
 .../index/service/AbstractIndexingServiceIT.java   |  2 +-
 .../index/service/api/KogitoRuntimeClientTest.java | 35 +++++++-------
 .../src/main/resources/application.properties      |  1 +
 .../kie/kogito/index/model/UserTaskInstance.java   |  9 ++++
 .../merger/UserTaskInstanceStateEventMerger.java   |  3 +-
 .../protostream/UserTaskInstanceMarshaller.java    |  3 ++
 .../UserTaskInstanceMarshallerTest.java            |  5 ++
 .../index/jpa/model/UserTaskInstanceEntity.java    | 10 ++++
 .../jpa/storage/ProcessInstanceEntityStorage.java  |  5 +-
 .../jpa/storage/UserTaskInstanceEntityStorage.java |  3 +-
 .../AbstractUserTaskInstanceEntityMapperIT.java    |  3 ++
 .../ansi/V1.45.0.5__add_external_reference_id.sql  | 20 ++++++++
 .../mongodb/model/UserTaskInstanceEntity.java      | 11 +++++
 .../model/UserTaskInstanceEntityMapper.java        |  2 +
 .../model/UserTaskInstanceEntityMapperTest.java    |  3 ++
 .../V1.45.0.5__add_external_reference_id.sql       | 20 ++++++++
 .../src/main/resources/META-INF/kogito-index.proto |  2 +
 .../java/org/kie/kogito/index/test/TestUtils.java  |  2 +
 22 files changed, 177 insertions(+), 67 deletions(-)

diff --git 
a/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
 
b/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
index e2fb7f7b7..2dd753f10 100644
--- 
a/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
+++ 
b/apps-integration-tests/integration-tests-data-index-service/integration-tests-data-index-service-common/src/test/java/org/kie/kogito/index/AbstractProcessDataIndexIT.java
@@ -30,7 +30,6 @@ import java.time.temporal.ChronoUnit;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.testcontainers.shaded.com.fasterxml.jackson.databind.JsonNode;
 import org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper;
@@ -92,7 +91,6 @@ public abstract class AbstractProcessDataIndexIT {
     }
 
     @Test
-    @Disabled
     public void testProcessInstanceEvents() throws IOException {
         String pId = given()
                 .contentType(ContentType.JSON)
@@ -113,13 +111,13 @@ public abstract class AbstractProcessDataIndexIT {
                 .contentType(ContentType.JSON)
                 .queryParam("user", "admin")
                 .queryParam("group", "managers")
-                .pathParam("processId", pId)
                 .when()
-                .get("/approvals/{processId}/tasks")
+                .get("/usertasks/instance")
                 .then()
                 .statusCode(200)
+                .log().body()
                 .body("$.size()", is(1))
-                .body("[0].name", is("firstLineApproval"))
+                .body("[0].taskName", is("firstLineApproval"))
                 .body("[0].id", notNullValue())
                 .extract()
                 .path("[0].id");
@@ -152,7 +150,7 @@ public abstract class AbstractProcessDataIndexIT {
                             
.body("data.Approvals[0].metadata.userTasks.size()", is(1))
                             
.body("data.Approvals[0].metadata.userTasks[0].id", is(flTaskId))
                             
.body("data.Approvals[0].metadata.userTasks[0].name", is("firstLineApproval"))
-                            
.body("data.Approvals[0].metadata.userTasks[0].state", is("Ready")));
+                            
.body("data.Approvals[0].metadata.userTasks[0].state", is("Reserved")));
         }
 
         await()
@@ -187,7 +185,22 @@ public abstract class AbstractProcessDataIndexIT {
                         .body("data.UserTaskInstances.size()", is(1))
                         .body("data.UserTaskInstances[0].id", is(flTaskId))
                         .body("data.UserTaskInstances[0].name", 
is("firstLineApproval"))
-                        .body("data.UserTaskInstances[0].state", is("Ready")));
+                        .body("data.UserTaskInstances[0].state", 
is("Reserved")));
+
+        String workItemId = given()
+                .contentType(ContentType.JSON)
+                .queryParam("user", "admin")
+                .queryParam("group", "managers")
+                .pathParam("processId", pId)
+                .when()
+                .get("/approvals/{processId}/tasks")
+                .then()
+                .statusCode(200)
+                .body("$.size()", is(1))
+                .body("[0].name", is("firstLineApproval"))
+                .body("[0].id", notNullValue())
+                .extract()
+                .path("[0].id");
 
         await()
                 .atMost(TIMEOUT)
@@ -196,7 +209,7 @@ public abstract class AbstractProcessDataIndexIT {
                         .queryParam("user", "admin")
                         .queryParam("group", "managers")
                         .pathParam("processId", pId)
-                        .pathParam("taskId", flTaskId)
+                        .pathParam("taskId", workItemId)
                         .body(singletonMap("approved", true))
                         
.post("/approvals/{processId}/firstLineApproval/{taskId}")
                         .then()
@@ -324,6 +337,7 @@ public abstract class AbstractProcessDataIndexIT {
                 .when().post("/graphql")
                 .then()
                 .statusCode(200)
+                .log().body()
                 .body("data.UserTaskInstances[0].description", nullValue())
                 .body("data.UserTaskInstances[0].potentialGroups[0]", 
equalTo("managers"))
                 .extract().path("data.UserTaskInstances[0].id");
@@ -335,6 +349,7 @@ public abstract class AbstractProcessDataIndexIT {
                 .when().post("/graphql")
                 .then()
                 .statusCode(200)
+                .log().body()
                 .body("errors", nullValue())
                 .extract().path("data.UserTaskInstances[0].schema");
         checkExpectedTaskSchema(taskSchema);
@@ -474,9 +489,8 @@ public abstract class AbstractProcessDataIndexIT {
                         .when()
                         .queryParam("user", "manager")
                         .queryParam("group", "managers")
-                        .pathParam("id", processInstanceId)
                         .pathParam("taskId", taskId)
-                        
.get("/approvals/{id}/firstLineApproval/{taskId}/comments")
+                        .get("/usertasks/instance/{taskId}/comments")
                         .then()
                         .statusCode(200)
                         .body("size()", is(1))
@@ -585,9 +599,8 @@ public abstract class AbstractProcessDataIndexIT {
                         .when()
                         .queryParam("user", "manager")
                         .queryParam("group", "managers")
-                        .pathParam("id", processInstanceId)
                         .pathParam("taskId", taskId)
-                        
.get("/approvals/{id}/firstLineApproval/{taskId}/attachments")
+                        .get("/usertasks/instance/{taskId}/attachments")
                         .then()
                         .statusCode(200)
                         .body("size()", is(1))
@@ -710,14 +723,13 @@ public abstract class AbstractProcessDataIndexIT {
         assertEquals("object", schemaJsonNode.at("/type").asText());
 
         // Check Schema phases
-        assertEquals(4, schemaJsonNode.at("/phases").size());
+        assertEquals(3, schemaJsonNode.at("/phases").size());
         assertTrue(schemaJsonNode.get("phases").toString().contains("abort"));
-        assertTrue(schemaJsonNode.get("phases").toString().contains("claim"));
         assertTrue(schemaJsonNode.get("phases").toString().contains("skip"));
         
assertTrue(schemaJsonNode.get("phases").toString().contains("complete"));
 
         // Check Schema properties
-        assertEquals(2, schemaJsonNode.at("/properties").size());
+        assertEquals(3, schemaJsonNode.at("/properties").size());
 
         assertEquals("true", 
schemaJsonNode.at("/properties/approved/output").asText());
         assertEquals("boolean", 
schemaJsonNode.at("/properties/approved/type").asText());
diff --git 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
index 7e86049fc..1df466aa4 100644
--- 
a/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
+++ 
b/data-index/data-index-common/src/main/java/org/kie/kogito/index/api/KogitoRuntimeCommonClient.java
@@ -7,7 +7,7 @@
  * "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
+ *   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
@@ -118,8 +118,11 @@ public class KogitoRuntimeCommonClient {
 
     protected void 
asyncHttpResponseTreatment(AsyncResult<HttpResponse<Buffer>> res, 
CompletableFuture future, String logMessage) {
         if (res.succeeded() && (res.result().statusCode() == 200 || 
res.result().statusCode() == 201)) {
-            future.complete(res.result().bodyAsString() != null ? 
res.result().bodyAsString() : "Successfully performed: " + logMessage);
+            String jsonMessage = res.result().bodyAsString();
+            LOGGER.trace("Result {}", jsonMessage);
+            future.complete(jsonMessage != null ? jsonMessage : "Successfully 
performed: " + logMessage);
         } else {
+            LOGGER.trace("Error {}", logMessage);
             future.completeExceptionally(new 
DataIndexServiceException(getErrorMessage(logMessage, res.result())));
         }
     }
diff --git 
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls 
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 4e6f30b76..741c0d4e8 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -367,6 +367,7 @@ type UserTaskInstance {
     endpoint: String
     comments: [Comment!]
     attachments: [Attachment!]
+    externalReferenceId : String
 }
 
 input UserTaskInstanceArgument {
diff --git 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
index beabe661a..badbe77b2 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/api/KogitoRuntimeClientImpl.java
@@ -28,11 +28,13 @@ import org.kie.kogito.index.model.Node;
 import org.kie.kogito.index.model.ProcessInstance;
 import org.kie.kogito.index.model.UserTaskInstance;
 import org.kie.kogito.index.service.DataIndexServiceException;
+import org.kie.kogito.usertask.model.CommentInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import io.vertx.core.AsyncResult;
 import io.vertx.core.buffer.Buffer;
+import io.vertx.core.json.Json;
 import io.vertx.core.json.JsonObject;
 import io.vertx.ext.web.client.HttpRequest;
 import io.vertx.ext.web.client.HttpResponse;
@@ -58,15 +60,15 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
     public static final String CANCEL_NODE_INSTANCE_PATH = 
"/management/processes/%s/instances/%s/nodeInstances/%s"; // nodeInstance Id
 
     public static final String GET_TASK_SCHEMA_PATH = "/%s/%s/%s/%s/schema";
-    public static final String UPDATE_USER_TASK_INSTANCE_PATH = 
"/management/processes/%s/instances/%s/tasks/%s";
+    public static final String UPDATE_USER_TASK_INSTANCE_PATH = 
"/management/usertasks/%s";
 
-    public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/%s/%s/%s/%s/comments";
-    public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/%s/%s/%s/%s/comments/%s";
-    public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/%s/%s/%s/%s/comments/%s";
+    public static final String CREATE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/usertasks/instance/%s/comments";
+    public static final String UPDATE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/usertasks/instance/%s/comments/%s";
+    public static final String DELETE_USER_TASK_INSTANCE_COMMENT_PATH = 
"/usertasks/instance/%s/comments/%s";
 
-    public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/%s/%s/%s/%s/attachments";
-    public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/%s/%s/%s/%s/attachments/%s";
-    public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/%s/%s/%s/%s/attachments/%s";
+    public static final String CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/usertasks/instance/%s/attachments";
+    public static final String UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/usertasks/instance/%s/attachments/%s";
+    public static final String DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH = 
"/usertasks/instance/%s/attachments/%s";
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(KogitoRuntimeClientImpl.class);
 
@@ -137,7 +139,8 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
     @Override
     public CompletableFuture<String> getUserTaskSchema(String serviceURL, 
UserTaskInstance userTaskInstance, String user, List<String> groups) {
         String requestURI = format(GET_TASK_SCHEMA_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
-                userTaskInstance.getName(), userTaskInstance.getId()) + "?" + 
getUserGroupsURIParameter(user, groups);
+                userTaskInstance.getName(), 
userTaskInstance.getExternalReferenceId()) + "?" + 
getUserGroupsURIParameter(user, groups);
+        LOGGER.trace("get user task schema service {} and URI {}", serviceURL, 
requestURI);
         return sendGetClientRequest(getWebClient(serviceURL), requestURI,
                 "Get User Task schema for task:" + userTaskInstance.getName() 
+ " with id: " + userTaskInstance.getId(),
                 null);
@@ -146,44 +149,40 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
     @Override
     public CompletableFuture<String> updateUserTaskInstance(String serviceURL, 
UserTaskInstance userTaskInstance, String user,
             List<String> groups, Map taskInfo) {
-        String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
-                userTaskInstance.getId()) + "?" + 
getUserGroupsURIParameter(user, groups);
+        String requestURI = format(UPDATE_USER_TASK_INSTANCE_PATH, 
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
+        LOGGER.trace("Send request to {}", requestURI);
         return sendPatchClientRequest(getWebClient(serviceURL), requestURI,
-                "Update user task instance:" + userTaskInstance.getName() + " 
with id: " + userTaskInstance.getId(),
+                "Update user task instance: " + userTaskInstance.getName() + " 
with id: " + userTaskInstance.getId(),
                 new JsonObject(taskInfo));
     }
 
     @Override
     public CompletableFuture<String> createUserTaskInstanceComment(String 
serviceURL, UserTaskInstance userTaskInstance, String user, List<String> 
groups, String commentInfo) {
-        String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), 
userTaskInstance.getName(),
-                userTaskInstance.getId()) + "?" + 
getUserGroupsURIParameter(user, groups);
+        String requestURI = format(CREATE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
         return sendPostWithBodyClientRequest(getWebClient(serviceURL), 
requestURI,
                 "Adding comment to  UserTask:" + userTaskInstance.getName() + 
" with id: " + userTaskInstance.getId(),
-                commentInfo, MediaType.TEXT_PLAIN);
+                Json.encode(new CommentInfo(commentInfo)), 
MediaType.APPLICATION_JSON);
     }
 
     @Override
     public CompletableFuture<String> updateUserTaskInstanceComment(String 
serviceURL, UserTaskInstance userTaskInstance, String user, List<String> 
groups, String commentId, String commentInfo) {
-        String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), 
userTaskInstance.getName(),
-                userTaskInstance.getId(), commentId) + "?" + 
getUserGroupsURIParameter(user, groups);
+        String requestURI = format(UPDATE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, 
groups);
         return sendPutClientRequest(getWebClient(serviceURL),
                 requestURI,
                 "Update UserTask: " + userTaskInstance.getName() + " comment:" 
+ commentId + "  with taskid: " + userTaskInstance.getId(),
-                commentInfo, MediaType.TEXT_PLAIN);
+                Json.encode(new CommentInfo(commentInfo)), 
MediaType.APPLICATION_JSON);
     }
 
     @Override
     public CompletableFuture<String> deleteUserTaskInstanceComment(String 
serviceURL, UserTaskInstance userTaskInstance, String user, List<String> 
groups, String commentId) {
-        String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
-                userTaskInstance.getName(), userTaskInstance.getId(), 
commentId) + "?" + getUserGroupsURIParameter(user, groups);
+        String requestURI = format(DELETE_USER_TASK_INSTANCE_COMMENT_PATH, 
userTaskInstance.getId(), commentId) + "?" + getUserGroupsURIParameter(user, 
groups);
         return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
                 "Delete comment : " + commentId + "of Task: " + 
userTaskInstance.getName() + "  with taskid: " + userTaskInstance.getId());
     }
 
     @Override
     public CompletableFuture<String> createUserTaskInstanceAttachment(String 
serviceURL, UserTaskInstance userTaskInstance, String user, List<String> 
groups, String name, String uri) {
-        String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), 
userTaskInstance.getName(),
-                userTaskInstance.getId()) + "?" + 
getUserGroupsURIParameter(user, groups);
+        String requestURI = format(CREATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getId()) + "?" + getUserGroupsURIParameter(user, groups);
         return sendPostWithBodyClientRequest(getWebClient(serviceURL), 
requestURI,
                 "Adding attachment to  UserTask:" + userTaskInstance.getName() 
+ " with id: " + userTaskInstance.getId(),
                 "{ \"name\": \"" + name + "\", \"uri\": \"" + uri + "\" }", 
MediaType.APPLICATION_JSON);
@@ -192,8 +191,7 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
     @Override
     public CompletableFuture<String> updateUserTaskInstanceAttachment(String 
serviceURL, UserTaskInstance userTaskInstance, String user,
             List<String> groups, String attachmentId, String name, String uri) 
{
-        String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(), 
userTaskInstance.getName(),
-                userTaskInstance.getId(), attachmentId) + "?" + 
getUserGroupsURIParameter(user, groups);
+        String requestURI = format(UPDATE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, 
groups);
         return sendJSONPutClientRequest(getWebClient(serviceURL),
                 requestURI,
                 "Update UserTask: " + userTaskInstance.getName() + " 
attachment:" + attachmentId +
@@ -203,8 +201,7 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
 
     @Override
     public CompletableFuture<String> deleteUserTaskInstanceAttachment(String 
serviceURL, UserTaskInstance userTaskInstance, String user, List<String> 
groups, String attachmentId) {
-        String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getProcessId(), userTaskInstance.getProcessInstanceId(),
-                userTaskInstance.getName(), userTaskInstance.getId(), 
attachmentId) + "?" + getUserGroupsURIParameter(user, groups);
+        String requestURI = format(DELETE_USER_TASK_INSTANCE_ATTACHMENT_PATH, 
userTaskInstance.getId(), attachmentId) + "?" + getUserGroupsURIParameter(user, 
groups);
         return sendDeleteClientRequest(getWebClient(serviceURL), requestURI,
                 "Delete attachment : " + attachmentId + "of Task: " + 
userTaskInstance.getName() + "  with taskid: " + userTaskInstance.getId());
     }
@@ -225,10 +222,10 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
                 .putHeader("Authorization", getAuthHeader())
                 .putHeader("Content-Type", contentType);
         if (MediaType.APPLICATION_JSON.equals(contentType)) {
-            LOGGER.debug("Sending Json Body: {} POST  to URI {}", body, 
requestURI);
+            LOGGER.trace("Sending Json Body: {} POST  to URI {}", body, 
requestURI);
             request.sendJson(new JsonObject(body), res -> 
asyncHttpResponseTreatment(res, future, logMessage));
         } else {
-            LOGGER.debug("Sending Buffer(Body): {} POST to URI {}", body, 
requestURI);
+            LOGGER.trace("Sending Buffer(Body): {} POST to URI {}", body, 
requestURI);
             request.sendBuffer(Buffer.buffer(body), res -> 
asyncHttpResponseTreatment(res, future, logMessage));
         }
         return future;
@@ -253,10 +250,10 @@ class KogitoRuntimeClientImpl extends 
KogitoRuntimeCommonClient implements Kogit
                 .putHeader("Authorization", getAuthHeader())
                 .putHeader("Content-Type", contentType);
         if (MediaType.APPLICATION_JSON.equals(contentType)) {
-            LOGGER.debug("Sending Json Body: {} PUT  to URI {}", body, 
requestURI);
+            LOGGER.info("Sending Json Body: {} PUT  to URI {}", body, 
requestURI);
             request.sendJson(new JsonObject(body), res -> 
asyncHttpResponseTreatment(res, future, logMessage));
         } else {
-            LOGGER.debug("Sending Buffer(Body): {} PUT to URI {}", body, 
requestURI);
+            LOGGER.info("Sending Buffer(Body): {} PUT to URI {}", body, 
requestURI);
             request.sendBuffer(Buffer.buffer(body), res -> 
asyncHttpResponseTreatment(res, future, logMessage));
         }
         return future;
diff --git 
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
 
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
index 984323837..dd24ab69e 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/AbstractIndexingServiceIT.java
@@ -477,7 +477,7 @@ public abstract class AbstractIndexingServiceIT extends 
AbstractIndexingIT {
                         .body("data.UserTaskInstances[0].lastUpdate", 
anything())
                         .body("data.UserTaskInstances[0].endpoint",
                                 is(event.getSource().toString() + "/" + 
event.getData().getProcessInstanceId() + "/" + 
event.getData().getUserTaskName() + "/"
-                                        + 
event.getData().getUserTaskInstanceId())));
+                                        + 
event.getData().getExternalReferenceId())));
     }
 
 }
diff --git 
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
 
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
index 62fbd1570..28acb2caf 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/api/KogitoRuntimeClientTest.java
@@ -35,6 +35,7 @@ import org.kie.kogito.index.model.ProcessInstance;
 import org.kie.kogito.index.model.UserTaskInstance;
 import org.kie.kogito.index.service.DataIndexServiceException;
 import org.kie.kogito.index.test.TestUtils;
+import org.kie.kogito.usertask.model.CommentInfo;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
@@ -44,6 +45,7 @@ import io.quarkus.security.identity.SecurityIdentity;
 import io.vertx.core.AsyncResult;
 import io.vertx.core.Handler;
 import io.vertx.core.Vertx;
+import io.vertx.core.json.Json;
 import io.vertx.core.json.JsonObject;
 import io.vertx.ext.web.client.HttpRequest;
 import io.vertx.ext.web.client.HttpResponse;
@@ -58,12 +60,10 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.ABORT_PROCESS_INSTANCE_PATH;
-import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.CANCEL_JOB_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.CANCEL_NODE_INSTANCE_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_DIAGRAM_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_NODE_DEFINITIONS_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.GET_PROCESS_INSTANCE_SOURCE_PATH;
-import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RESCHEDULE_JOB_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RETRIGGER_NODE_INSTANCE_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.RETRY_PROCESS_INSTANCE_PATH;
 import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.SKIP_PROCESS_INSTANCE_PATH;
@@ -72,6 +72,7 @@ import static 
org.kie.kogito.index.service.api.KogitoRuntimeClientImpl.UPDATE_VA
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
@@ -401,8 +402,9 @@ public class KogitoRuntimeClientTest {
         UserTaskInstance taskInstance = 
createUserTaskInstance(PROCESS_INSTANCE_ID, TASK_ID, "InProgress");
 
         client.getUserTaskSchema(SERVICE_URL, taskInstance, "jdoe", 
Collections.singletonList("managers"));
-        verify(client).sendGetClientRequest(webClientMock, "/travels/" + 
PROCESS_INSTANCE_ID + "/TaskName/" + TASK_ID + 
"/schema?user=jdoe&group=managers",
-                "Get User Task schema for task:TaskName with id: " + 
taskInstance.getId(), null);
+        verify(client).sendGetClientRequest(eq(webClientMock),
+                eq("/travels/" + PROCESS_INSTANCE_ID + "/TaskName/" + 
taskInstance.getExternalReferenceId() + "/schema?user=jdoe&group=managers"),
+                eq("Get User Task schema for task:TaskName with id: " + 
taskInstance.getId()), isNull());
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
         verify(httpRequestMock).send(handlerCaptor.capture());
         verify(httpRequestMock).putHeader(eq("Authorization"), eq("Bearer " + 
AUTHORIZED_TOKEN));
@@ -421,8 +423,8 @@ public class KogitoRuntimeClientTest {
         client.updateUserTaskInstance(SERVICE_URL, taskInstance, "jdoe", 
Collections.singletonList("managers"), taskInfo);
         ArgumentCaptor<JsonObject> jsonCaptor = 
ArgumentCaptor.forClass(JsonObject.class);
         verify(client).sendPatchClientRequest(eq(webClientMock),
-                eq("/management/processes/travels/instances/" + 
PROCESS_INSTANCE_ID + "/tasks/" + TASK_ID + "?user=jdoe&group=managers"),
-                eq("Update user task instance:" + taskInstance.getName() + " 
with id: " + taskInstance.getId()),
+                eq("/management/usertasks/" + TASK_ID + 
"?user=jdoe&group=managers"),
+                eq("Update user task instance: " + taskInstance.getName() + " 
with id: " + taskInstance.getId()),
                 jsonCaptor.capture());
         
assertThat(jsonCaptor.getValue().getString("description")).isEqualTo("NewDescription");
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
@@ -443,10 +445,11 @@ public class KogitoRuntimeClientTest {
 
         client.createUserTaskInstanceComment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"), commentInfo);
         verify(client).sendPostWithBodyClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + "/comments?user=jdoe&group=managers"),
-                eq("Adding comment to  UserTask:" + taskInstance.getName() + " 
with id: " + taskInstance.getId()), eq(commentInfo), eq("text/plain"));
+                eq("/usertasks/instance/" + TASK_ID + 
"/comments?user=jdoe&group=managers"),
+                eq("Adding comment to  UserTask:" + taskInstance.getName() + " 
with id: " + taskInstance.getId()),
+                eq(Json.encode(new CommentInfo(commentInfo))), 
eq("application/json"));
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
-        verify(httpRequestMock).sendBuffer(any(), handlerCaptor.capture());
+        verify(httpRequestMock).sendJson(any(), handlerCaptor.capture());
         checkResponseHandling(handlerCaptor.getValue());
     }
 
@@ -462,7 +465,7 @@ public class KogitoRuntimeClientTest {
 
         client.createUserTaskInstanceAttachment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"), attachmentName, attachmentUri);
         verify(client).sendPostWithBodyClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + 
"/attachments?user=jdoe&group=managers"),
+                eq("/usertasks/instance/" + TASK_ID + 
"/attachments?user=jdoe&group=managers"),
                 eq("Adding attachment to  UserTask:" + taskInstance.getName() 
+ " with id: " + taskInstance.getId()),
                 eq("{ \"name\": \"" + attachmentName + "\", \"uri\": \"" + 
attachmentUri + "\" }"), eq("application/json"));
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
@@ -484,12 +487,12 @@ public class KogitoRuntimeClientTest {
 
         client.updateUserTaskInstanceComment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"), commentId, commentInfo);
         verify(client).sendPutClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + "/comments/" + commentId + 
"?user=jdoe&group=managers"),
+                eq("/usertasks/instance/" + TASK_ID + "/comments/" + commentId 
+ "?user=jdoe&group=managers"),
                 eq("Update UserTask: " + taskInstance.getName() + " comment:" 
+ commentId + "  with taskid: " + taskInstance.getId()),
-                eq(commentInfo), eq("text/plain"));
+                eq(Json.encode(new CommentInfo(commentInfo))), 
eq("application/json"));
 
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
-        verify(httpRequestMock).sendBuffer(any(), handlerCaptor.capture());
+        verify(httpRequestMock).sendJson(any(), handlerCaptor.capture());
         checkResponseHandling(handlerCaptor.getValue());
     }
 
@@ -503,7 +506,7 @@ public class KogitoRuntimeClientTest {
 
         client.deleteUserTaskInstanceComment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"), commentId);
         verify(client).sendDeleteClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + "/comments/" + commentId + 
"?user=jdoe&group=managers"),
+                eq("/usertasks/instance/" + TASK_ID + "/comments/" + commentId 
+ "?user=jdoe&group=managers"),
                 eq("Delete comment : " + commentId + "of Task: " + 
taskInstance.getName() + "  with taskid: " + taskInstance.getId()));
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
         verify(httpRequestMock).send(handlerCaptor.capture());
@@ -524,7 +527,7 @@ public class KogitoRuntimeClientTest {
         client.updateUserTaskInstanceAttachment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"),
                 attachmentId, attachmentName, attachmentContent);
         verify(client).sendJSONPutClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + "/attachments/" + attachmentId + 
"?user=jdoe&group=managers"),
+                eq("/usertasks/instance/" + TASK_ID + "/attachments/" + 
attachmentId + "?user=jdoe&group=managers"),
                 eq("Update UserTask: " + taskInstance.getName() + " 
attachment:" + attachmentId +
                         " with taskid: " + taskInstance.getId() + "with: " + 
attachmentName +
                         " and info:" + attachmentContent),
@@ -546,7 +549,7 @@ public class KogitoRuntimeClientTest {
 
         client.deleteUserTaskInstanceAttachment(SERVICE_URL, taskInstance, 
"jdoe", Collections.singletonList("managers"), attachmentId);
         verify(client).sendDeleteClientRequest(eq(webClientMock),
-                eq("/travels/" + PROCESS_INSTANCE_ID + "/" + 
taskInstance.getName() + "/" + TASK_ID + "/attachments/" + attachmentId + 
"?user=jdoe&group=managers"),
+                eq("/usertasks/instance/" + TASK_ID + "/attachments/" + 
attachmentId + "?user=jdoe&group=managers"),
                 eq("Delete attachment : " + attachmentId + "of Task: " + 
taskInstance.getName() + "  with taskid: " + taskInstance.getId()));
         ArgumentCaptor<Handler> handlerCaptor = 
ArgumentCaptor.forClass(Handler.class);
         verify(httpRequestMock).send(handlerCaptor.capture());
diff --git 
a/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
 
b/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
index e6eb7e8cc..8f2849208 100644
--- 
a/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
+++ 
b/data-index/data-index-service/data-index-service-inmemory/src/main/resources/application.properties
@@ -34,6 +34,7 @@ 
quarkus.flyway.locations=classpath:kie-flyway/db/data-index/postgresql
 quarkus.hibernate-orm.jdbc.timezone=UTC
 quarkus.hibernate-orm.database.generation=update
 quarkus.hibernate-orm.database.generation.halt-on-error=true
+quarkus.hibernate-orm.physical-naming-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
 
 #Container image
 quarkus.container-image.build=${quarkus.build.image:true}
diff --git 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
index 8572edcaf..b87d73777 100644
--- 
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
+++ 
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/UserTaskInstance.java
@@ -28,6 +28,7 @@ public class UserTaskInstance extends UserTaskInstanceMeta {
     private ObjectNode inputs;
     private ObjectNode outputs;
     private String endpoint;
+    private String externalReferenceId;
 
     public String getProcessId() {
         return processId;
@@ -94,4 +95,12 @@ public class UserTaskInstance extends UserTaskInstanceMeta {
     public void setOutputs(ObjectNode outputs) {
         this.outputs = outputs;
     }
+
+    public String getExternalReferenceId() {
+        return externalReferenceId;
+    }
+
+    public void setExternalReferenceId(String externalReferenceId) {
+        this.externalReferenceId = externalReferenceId;
+    }
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
index 8cf9d9fd7..8e813f07e 100644
--- 
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
+++ 
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/UserTaskInstanceStateEventMerger.java
@@ -58,9 +58,10 @@ public class UserTaskInstanceStateEventMerger implements 
UserTaskInstanceEventMe
         }
         task.setActualOwner(event.getData().getActualOwner());
         task.setEndpoint(
-                event.getSource() == null ? null : 
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(), 
event.getData().getUserTaskName(), event.getData().getUserTaskInstanceId()));
+                event.getSource() == null ? null : 
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(), 
event.getData().getUserTaskName(), event.getData().getExternalReferenceId()));
         task.setLastUpdate(toZonedDateTime(event.getData().getEventDate()));
         task.setReferenceName(event.getData().getUserTaskReferenceName());
+        task.setExternalReferenceId(event.getData().getExternalReferenceId());
         LOGGER.debug("value after merging: {}", task);
         return task;
     }
diff --git 
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
 
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
index b3ba2e74f..ff852b572 100644
--- 
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
+++ 
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshaller.java
@@ -57,6 +57,7 @@ public class UserTaskInstanceMarshaller extends 
AbstractMarshaller implements Me
     protected static final String ENDPOINT = "endpoint";
     protected static final String COMMENTS = "comments";
     protected static final String ATTACHMENTS = "attachments";
+    protected static final String EXTERNAL_REFERENCE_ID = 
"externalReferenceId";
 
     public UserTaskInstanceMarshaller(ObjectMapper mapper) {
         super(mapper);
@@ -89,6 +90,7 @@ public class UserTaskInstanceMarshaller extends 
AbstractMarshaller implements Me
         ut.setEndpoint(reader.readString(ENDPOINT));
         ut.setComments(reader.readCollection(COMMENTS, new ArrayList<>(), 
Comment.class));
         ut.setAttachments(reader.readCollection(ATTACHMENTS, new 
ArrayList<>(), Attachment.class));
+        ut.setExternalReferenceId(reader.readString(EXTERNAL_REFERENCE_ID));
         return ut;
     }
 
@@ -118,6 +120,7 @@ public class UserTaskInstanceMarshaller extends 
AbstractMarshaller implements Me
         writer.writeString(ENDPOINT, ut.getEndpoint());
         writer.writeCollection(COMMENTS, ut.getComments(), Comment.class);
         writer.writeCollection(ATTACHMENTS, ut.getAttachments(), 
Attachment.class);
+        writer.writeString(EXTERNAL_REFERENCE_ID, ut.getExternalReferenceId());
     }
 
     @Override
diff --git 
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
 
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
index 6c19ae9b5..07f98b1ac 100644
--- 
a/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
+++ 
b/data-index/data-index-storage/data-index-storage-infinispan/src/test/java/org/kie/kogito/index/infinispan/protostream/UserTaskInstanceMarshallerTest.java
@@ -47,6 +47,7 @@ import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarsha
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.DESCRIPTION;
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ENDPOINT;
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.EXCLUDED_USERS;
+import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.EXTERNAL_REFERENCE_ID;
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.ID;
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.INPUTS;
 import static 
org.kie.kogito.index.infinispan.protostream.UserTaskInstanceMarshaller.LAST_UPDATE;
@@ -100,6 +101,7 @@ class UserTaskInstanceMarshallerTest {
         TASK.setReferenceName("referenceName");
         
TASK.setLastUpdate(ZonedDateTime.now(ZoneOffset.UTC).truncatedTo(ChronoUnit.MILLIS));
         TASK.setEndpoint("endpoint");
+        TASK.setExternalReferenceId("externalReferenceId");
         TASK.setComments(List.of(Comment.builder()
                 .id("attId")
                 .content("Text comment")
@@ -144,6 +146,7 @@ class UserTaskInstanceMarshallerTest {
         when(reader.readString(ENDPOINT)).thenReturn(TASK.getEndpoint());
         when(reader.readCollection(eq(COMMENTS), any(), 
eq(Comment.class))).thenReturn(TASK.getComments());
         when(reader.readCollection(eq(ATTACHMENTS), any(), 
eq(Attachment.class))).thenReturn(TASK.getAttachments());
+        
when(reader.readString(EXTERNAL_REFERENCE_ID)).thenReturn(TASK.getExternalReferenceId());
 
         UserTaskInstance task = marshaller.readFrom(reader);
 
@@ -174,6 +177,7 @@ class UserTaskInstanceMarshallerTest {
         inOrder.verify(reader).readString(ENDPOINT);
         inOrder.verify(reader).readCollection(COMMENTS, new ArrayList<>(), 
Comment.class);
         inOrder.verify(reader).readCollection(ATTACHMENTS, new ArrayList<>(), 
Attachment.class);
+        inOrder.verify(reader).readString(EXTERNAL_REFERENCE_ID);
         verifyNoMoreInteractions(reader);
     }
 
@@ -209,6 +213,7 @@ class UserTaskInstanceMarshallerTest {
         inOrder.verify(writer).writeString(ENDPOINT, TASK.getEndpoint());
         inOrder.verify(writer).writeCollection(COMMENTS, TASK.getComments(), 
Comment.class);
         inOrder.verify(writer).writeCollection(ATTACHMENTS, 
TASK.getAttachments(), Attachment.class);
+        inOrder.verify(writer).writeString(EXTERNAL_REFERENCE_ID, 
TASK.getExternalReferenceId());
         verifyNoMoreInteractions(writer);
     }
 
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
index 0021a0eb2..314174ed1 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/UserTaskInstanceEntity.java
@@ -91,6 +91,16 @@ public class UserTaskInstanceEntity extends AbstractEntity {
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "userTask", orphanRemoval 
= true, fetch = FetchType.LAZY)
     private List<AttachmentEntity> attachments;
 
+    private String externalReferenceId;
+
+    public String getExternalReferenceId() {
+        return externalReferenceId;
+    }
+
+    public void setExternalReferenceId(String externalReferenceId) {
+        this.externalReferenceId = externalReferenceId;
+    }
+
     @Override
     public String getId() {
         return id;
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index b991c1a83..8796f3204 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -167,9 +167,10 @@ public class ProcessInstanceEntityStorage extends 
AbstractJPAStorageFetcher<Stri
 
     private NodeInstanceEntity createNode(ProcessInstanceEntity pi, 
ProcessInstanceNodeEventBody data) {
         NodeInstanceEntity node = new NodeInstanceEntity();
-        pi.getNodes().add(node);
         node.setProcessInstance(pi);
-        return updateNode(node, data);
+        updateNode(node, data);
+        pi.getNodes().add(node);
+        return node;
     }
 
     private NodeInstanceEntity updateNode(NodeInstanceEntity nodeInstance, 
ProcessInstanceNodeEventBody body) {
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
index cb75b1e31..5204db657 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/UserTaskInstanceEntityStorage.java
@@ -197,9 +197,10 @@ public class UserTaskInstanceEntityStorage extends 
AbstractJPAStorageFetcher<Str
         }
         task.setActualOwner(event.getData().getActualOwner());
         task.setEndpoint(
-                event.getSource() == null ? null : 
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(), 
event.getData().getUserTaskName(), event.getData().getUserTaskInstanceId()));
+                event.getSource() == null ? null : 
getEndpoint(event.getSource(), event.getData().getProcessInstanceId(), 
event.getData().getUserTaskName(), event.getData().getExternalReferenceId()));
         task.setLastUpdate(toZonedDateTime(event.getData().getEventDate()));
         task.setReferenceName(event.getData().getUserTaskReferenceName());
+        task.setExternalReferenceId(body.getExternalReferenceId());
     }
 
     private String getEndpoint(URI source, String pId, String taskName, String 
taskId) {
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
index 6d4dd31e2..f9e8b2f7c 100644
--- 
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
+++ 
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/mapper/AbstractUserTaskInstanceEntityMapperIT.java
@@ -71,6 +71,7 @@ public abstract class AbstractUserTaskInstanceEntityMapperIT {
         String processId = "testProcessId";
         String rootProcessId = "testRootProcessId";
         String rootProcessInstanceId = "testRootProcessInstanceId";
+        String externalReferenceId = "testExternalReferenceId";
         Map<String, String> object = new HashMap<>();
         object.put("test", "testValue");
         ObjectNode inputs = jsonMapper.createObjectNode().put("testInput", 
"testValue");
@@ -124,6 +125,7 @@ public abstract class 
AbstractUserTaskInstanceEntityMapperIT {
         userTaskInstance.setOutputs(outputs);
         userTaskInstance.setComments(singletonList(comment));
         userTaskInstance.setAttachments(singletonList(attachment));
+        userTaskInstance.setExternalReferenceId(externalReferenceId);
 
         userTaskInstanceEntity.setId(testId);
         userTaskInstanceEntity.setDescription(description);
@@ -148,6 +150,7 @@ public abstract class 
AbstractUserTaskInstanceEntityMapperIT {
         userTaskInstanceEntity.setOutputs(outputs);
         userTaskInstanceEntity.setComments(singletonList(commentEntity));
         userTaskInstanceEntity.setAttachments(singletonList(attachmentEntity));
+        userTaskInstanceEntity.setExternalReferenceId(externalReferenceId);
     }
 
     @Test
diff --git 
a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
 
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
new file mode 100644
index 000000000..918b9369c
--- /dev/null
+++ 
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.0.5__add_external_reference_id.sql
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+alter table tasks add external_reference_id character varying(4000)
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
index a027ad384..c97c753dc 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntity.java
@@ -76,6 +76,8 @@ public class UserTaskInstanceEntity {
 
     List<AttachmentEntity> attachments;
 
+    private String externalReferenceId;
+
     public String getId() {
         return id;
     }
@@ -268,6 +270,14 @@ public class UserTaskInstanceEntity {
         this.attachments = attachments;
     }
 
+    public void setExternalReferenceId(String externalReferenceId) {
+        this.externalReferenceId = externalReferenceId;
+    }
+
+    public String getExternalReferenceId() {
+        return externalReferenceId;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) {
@@ -435,4 +445,5 @@ public class UserTaskInstanceEntity {
             return Objects.hash(id);
         }
     }
+
 }
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
index b7479af60..1a8b9add5 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapper.java
@@ -79,6 +79,7 @@ public class UserTaskInstanceEntityMapper implements 
MongoEntityMapper<UserTaskI
         entity.setEndpoint(instance.getEndpoint());
         
entity.setComments(Optional.ofNullable(instance.getComments()).map(comments -> 
comments.stream().map(this::fromComment).collect(toList())).orElse(null));
         
entity.setAttachments(Optional.ofNullable(instance.getAttachments()).map(attachments
 -> 
attachments.stream().map(this::fromAttachment).collect(toList())).orElse(null));
+        entity.setExternalReferenceId(instance.getExternalReferenceId());
         return entity;
     }
 
@@ -113,6 +114,7 @@ public class UserTaskInstanceEntityMapper implements 
MongoEntityMapper<UserTaskI
         instance.setEndpoint(entity.getEndpoint());
         
instance.setComments(Optional.ofNullable(entity.getComments()).map(comments -> 
comments.stream().map(this::toComment).collect(toList())).orElse(null));
         
instance.setAttachments(Optional.ofNullable(entity.getAttachments()).map(attachments
 -> 
attachments.stream().map(this::toAttachment).collect(toList())).orElse(null));
+        instance.setExternalReferenceId(entity.getExternalReferenceId());
         return instance;
     }
 
diff --git 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
index 934070438..013ba7a04 100644
--- 
a/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
+++ 
b/data-index/data-index-storage/data-index-storage-mongodb/src/test/java/org/kie/kogito/index/mongodb/model/UserTaskInstanceEntityMapperTest.java
@@ -64,6 +64,7 @@ class UserTaskInstanceEntityMapperTest {
         String processId = "testProcessId";
         String rootProcessId = "testRootProcessId";
         String rootProcessInstanceId = "testRootProcessInstanceId";
+        String externalReferenceId = "testExternalReferenceId";
         ObjectNode object = MAPPER.createObjectNode();
         object.put("test", "testValue");
         ObjectNode inputs = object;
@@ -114,6 +115,7 @@ class UserTaskInstanceEntityMapperTest {
         userTaskInstance.setOutputs(outputs);
         userTaskInstance.setComments(List.of(comment));
         userTaskInstance.setAttachments(List.of(attachment));
+        userTaskInstance.setExternalReferenceId(externalReferenceId);
 
         userTaskInstanceEntity = new UserTaskInstanceEntity();
         userTaskInstanceEntity.setId(testId);
@@ -139,6 +141,7 @@ class UserTaskInstanceEntityMapperTest {
         userTaskInstanceEntity.setOutputs(jsonNodeToDocument(outputs));
         userTaskInstanceEntity.setComments(List.of(commentEntity));
         userTaskInstanceEntity.setAttachments(List.of(attachmentEntity));
+        userTaskInstanceEntity.setExternalReferenceId(externalReferenceId);
     }
 
     @Test
diff --git 
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
 
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
new file mode 100644
index 000000000..908ee2b24
--- /dev/null
+++ 
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.0.5__add_external_reference_id.sql
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+alter table tasks add external_reference_id varchar(4000);
diff --git 
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
 
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
index 18f01a601..5c23eecef 100644
--- 
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
+++ 
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
@@ -237,6 +237,7 @@ message UserTaskInstance {
     repeated Comment comments = 23;
     /* @Field(store = Store.YES) */
     repeated Attachment attachments = 24;
+    optional string externalReferenceId = 25;
 }
 
 /* @Indexed */
@@ -275,6 +276,7 @@ message UserTaskInstanceMeta {
     repeated Comment comments = 17;
     /* @Field(store = Store.YES) */
     repeated Attachment attachments = 18;
+    optional string externalReferenceId = 25;
 }
 
 /* @Indexed */
diff --git 
a/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
 
b/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
index 68946a056..600d52824 100644
--- 
a/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
+++ 
b/data-index/data-index-test-utils/src/main/java/org/kie/kogito/index/test/TestUtils.java
@@ -286,6 +286,7 @@ public final class TestUtils {
                 .actualOwner(actualOwner)
                 .eventDate(new Date())
                 .processInstanceId(processInstanceId)
+                .externalReferenceId("testExternalReferenceId")
                 .build();
         UserTaskInstanceStateDataEvent event = new 
UserTaskInstanceStateDataEvent(URI.create("http://localhost:8080/"; + 
processId).toString(), null, null, body.metaData(), body);
         event.setKogitoProcessId(processId);
@@ -422,6 +423,7 @@ public final class TestUtils {
         task.setPotentialGroups(singleton("potentialGroup"));
         task.setComments(List.of(Comment.builder().id("commentId" + 
taskId).content("Comment 1").updatedBy("kogito").build()));
         task.setAttachments(List.of(Attachment.builder().id("attachmentId" + 
taskId).content("http://linltodoc.com/1";).name("doc1").updatedBy("kogito").build()));
+        task.setExternalReferenceId("testExternalReferenceId");
         return task;
     }
 }


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

Reply via email to