This is an automated email from the ASF dual-hosted git repository. mariofusco pushed a commit to branch q3lts in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
commit 47a49371943e5256fd8d7c19765ee365707ba692 Author: Pere Fernández <[email protected]> AuthorDate: Thu Nov 30 10:30:58 2023 +0100 - fix patches --- .../quarkus-3/patches/0002_hibernate_changes.patch | 509 ++++++++++----------- .../quarkus-3/patches/0003_mutiny_changes.patch | 20 +- .../quarkus-3/patches/0004_arc_changes.patch | 64 ++- .../0005_jobs-service-reactive-streams.patch | 323 +++++++------ .../patches/0006_data-index-reactive-streams.patch | 64 +-- ...0010_quarkus_dev_ui_static_content_routes.patch | 21 +- 6 files changed, 481 insertions(+), 520 deletions(-) diff --git a/.ci/environments/quarkus-3/patches/0002_hibernate_changes.patch b/.ci/environments/quarkus-3/patches/0002_hibernate_changes.patch index 10f8a4322..edbb393ae 100644 --- a/.ci/environments/quarkus-3/patches/0002_hibernate_changes.patch +++ b/.ci/environments/quarkus-3/patches/0002_hibernate_changes.patch @@ -1,17 +1,8 @@ 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 2edebf340..a0e91004d 100644 +index 72aebeb09..ee13a5625 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 -@@ -108,7 +108,7 @@ public abstract class AbstractProcessDataIndexIT { - .get("/approvals/{processId}/tasks") - .then() - .statusCode(200) -- .body("$.size()", is(1)) -+ .body("size()", is(1)) - .body("[0].name", is("firstLineApproval")) - .body("[0].id", notNullValue()) - .extract() -@@ -201,7 +201,7 @@ public abstract class AbstractProcessDataIndexIT { +@@ -206,7 +206,7 @@ public abstract class AbstractProcessDataIndexIT { .get("/approvals/{processId}/tasks") .then() .statusCode(200) @@ -20,37 +11,32 @@ index 2edebf340..a0e91004d 100644 .body("[0].name", is("secondLineApproval")) .body("[0].id", notNullValue()) .extract() -@@ -467,7 +467,7 @@ public abstract class AbstractProcessDataIndexIT { +@@ -473,7 +473,7 @@ public abstract class AbstractProcessDataIndexIT { .get("/approvals/{id}/firstLineApproval/{taskId}/comments") .then() .statusCode(200) - .body("$.size()", is(1)) + .body("size()", is(1)) .body("[0].content", is(commentContent))); - - Map<String, String> commentMap = given().spec(dataIndexSpec()).contentType(ContentType.JSON) -@@ -565,7 +565,7 @@ public abstract class AbstractProcessDataIndexIT { + + await() +@@ -584,7 +584,7 @@ public abstract class AbstractProcessDataIndexIT { .get("/approvals/{id}/firstLineApproval/{taskId}/attachments") .then() .statusCode(200) - .body("$.size()", is(1)) + .body("size()", is(1)) .body("[0].name", is(attachmentName))); - - Map<String, String> attachmentMap = given().spec(dataIndexSpec()).contentType(ContentType.JSON) + + AtomicReference<Map<String, String>> attachmentMapRef = new AtomicReference<>(); diff --git a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/GraphQLUtils.java b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/GraphQLUtils.java -index 5c1275858..83fbb42c3 100644 +index 5109b4e11..a7ec15508 100644 --- a/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/GraphQLUtils.java +++ b/data-index/data-index-service/data-index-service-common/src/test/java/org/kie/kogito/index/service/GraphQLUtils.java -@@ -43,11 +43,28 @@ import com.fasterxml.jackson.databind.node.ObjectNode; - - import static java.lang.String.format; - import static java.util.stream.Collectors.joining; --import static org.apache.commons.lang3.ArrayUtils.insert; - import static org.kie.kogito.index.json.JsonUtils.getObjectMapper; - +@@ -51,8 +51,27 @@ import static org.kie.kogito.index.json.JsonUtils.getObjectMapper; + public class GraphQLUtils { - + + private static final String ID = "id"; + private static final String VERSION = "version"; + private static final String STATE = "state"; @@ -63,6 +49,7 @@ index 5c1275858..83fbb42c3 100644 + private static final String ADDON = "addon"; + private static final String STATUS = "status"; + private static final String BUSSINES_KEY = "bk"; ++ private static final String IDENT = "ident"; + private static final String ACTUAL_OWNER = "actualOwner"; + private static final String STARTED = "started"; + private static final String COMPLETED = "completed"; @@ -70,204 +57,209 @@ index 5c1275858..83fbb42c3 100644 + private static final String POTENTIAL_USERS = "potentialUsers"; + private static final Logger LOGGER = LoggerFactory.getLogger(GraphQLUtils.class); - private static final Map<Class, String> QUERY_FIELDS = new HashMap<>(); +- private static final Map<Class, String> QUERY_FIELDS = new HashMap<>(); ++ private static final Map<Class<?>, String> QUERY_FIELDS = new HashMap<>(); private static final Map<String, String> QUERIES = new HashMap<>(); -@@ -74,107 +91,107 @@ public class GraphQLUtils { + + static { +@@ -77,115 +96,115 @@ public class GraphQLUtils { } - + public static String getProcessDefinitionByIdAndVersion(String id, String version) { - return getProcessDefinitionQuery("ProcessDefinitionByIdAndVersion", id, version); + return getProcessDefinitionQuery("ProcessDefinitionByIdAndVersion", Map.of(ID, id, VERSION, version)); } - + public static String getProcessInstanceById(String id) { - return getProcessInstanceQuery("ProcessInstanceById", id); + return getProcessInstanceQuery("ProcessInstanceById", Map.of(ID, id)); } - + public static String getProcessInstanceByIdAndState(String id, ProcessInstanceState state) { - return getProcessInstanceQuery("ProcessInstanceByIdAndState", id, state.name()); + return getProcessInstanceQuery("ProcessInstanceByIdAndState", Map.of(ID, id, STATE, state.name())); } - + public static String getProcessInstanceByIdAndStart(String id, String start) { - return getProcessInstanceQuery("ProcessInstanceByIdAndStart", id, start); + return getProcessInstanceQuery("ProcessInstanceByIdAndStart", Map.of(ID, id, START, start)); } - + public static String getProcessInstanceByIdAndProcessId(String id, String processId) { - return getProcessInstanceQuery("ProcessInstanceByIdAndProcessId", id, processId); + return getProcessInstanceQuery("ProcessInstanceByIdAndProcessId", Map.of(ID, id, PROCESS_ID, processId)); } - + public static String getProcessInstanceByIdAndParentProcessInstanceId(String id, String parentProcessInstanceId) { - return getProcessInstanceQuery("ProcessInstanceByIdAndParentProcessInstanceId", id, parentProcessInstanceId); + return getProcessInstanceQuery("ProcessInstanceByIdAndParentProcessInstanceId", Map.of(ID, id, PARENT_PROCESS_INSTANCE_ID, parentProcessInstanceId)); } - + public static String getProcessInstanceByParentProcessInstanceId(String parentProcessInstanceId) { - return getProcessInstanceQuery("ProcessInstanceByParentProcessInstanceId", parentProcessInstanceId); + return getProcessInstanceQuery("ProcessInstanceByParentProcessInstanceId", Map.of(PARENT_PROCESS_INSTANCE_ID, parentProcessInstanceId)); } - + public static String getProcessInstanceByIdAndNullParentProcessInstanceId(String id, Boolean isNull) { - return getProcessInstanceQuery("ProcessInstanceByIdAndNullParentProcessInstanceId", id, isNull.toString()); + return getProcessInstanceQuery("ProcessInstanceByIdAndNullParentProcessInstanceId", Map.of(ID, id, IS_NULL, isNull)); } - + public static String getProcessInstanceByIdAndNullRootProcessInstanceId(String id, Boolean isNull) { - return getProcessInstanceQuery("ProcessInstanceByIdAndNullRootProcessInstanceId", id, isNull.toString()); + return getProcessInstanceQuery("ProcessInstanceByIdAndNullRootProcessInstanceId", Map.of(ID, id, IS_NULL, isNull)); } - + public static String getProcessInstanceByRootProcessInstanceId(String rootProcessInstanceId) { - return getProcessInstanceQuery("ProcessInstanceByRootProcessInstanceId", rootProcessInstanceId); + return getProcessInstanceQuery("ProcessInstanceByRootProcessInstanceId", Map.of(ID, rootProcessInstanceId)); } - + public static String getProcessInstanceByIdAndErrorNode(String id, String nodeDefinitionId) { - return getProcessInstanceQuery("ProcessInstanceByIdAndErrorNode", id, nodeDefinitionId); + return getProcessInstanceQuery("ProcessInstanceByIdAndErrorNode", Map.of(ID, id, NODE, nodeDefinitionId)); } - + public static String getProcessInstanceByIdAndAddon(String id, String addon) { - return getProcessInstanceQuery("ProcessInstanceByIdAndAddon", id, addon); + return getProcessInstanceQuery("ProcessInstanceByIdAndAddon", Map.of(ID, id, ADDON, addon)); } - + public static String getProcessInstanceByIdAndMilestoneName(String id, String milestone) { - return getProcessInstanceQuery("ProcessInstanceByIdAndMilestoneName", id, milestone); + return getProcessInstanceQuery("ProcessInstanceByIdAndMilestoneName", Map.of(ID, id, MILESTONE, milestone)); } - + public static String getProcessInstanceByIdAndMilestoneStatus(String id, String status) { - return getProcessInstanceQuery("ProcessInstanceByIdAndMilestoneStatus", id, status); + return getProcessInstanceQuery("ProcessInstanceByIdAndMilestoneStatus", Map.of(ID, id, STATUS, status)); } - + - public static String getProcessInstanceByBusinessKey(String businessKeys) { - return getProcessInstanceQuery("ProcessInstanceByBusinessKey", businessKeys); + public static String getProcessInstanceByBusinessKey(String businessKey) { + return getProcessInstanceQuery("ProcessInstanceByBusinessKey", Map.of(BUSSINES_KEY, businessKey)); } - + + public static String getProcessInstanceByCreatedBy(String identity) { +- return getProcessInstanceQuery("ProcessInstanceByCreatedBy", identity); ++ return getProcessInstanceQuery("ProcessInstanceByCreatedBy", Map.of(IDENT, identity)); + } + + public static String getProcessInstanceByUpdatedBy(String identity) { +- return getProcessInstanceQuery("ProcessInstanceByUpdatedBy", identity); ++ return getProcessInstanceQuery("ProcessInstanceByUpdatedBy", Map.of(IDENT, identity)); + } + public static String getUserTaskInstanceById(String id) { - return getUserTaskInstanceQuery("UserTaskInstanceById", id); + return getUserTaskInstanceQuery("UserTaskInstanceById", Map.of(ID, id)); } - + public static String getUserTaskInstanceByProcessInstanceId(String id) { - return getUserTaskInstanceQuery("UserTaskInstanceByProcessInstanceId", id); + return getUserTaskInstanceQuery("UserTaskInstanceByProcessInstanceId", Map.of(ID, id)); } - + public static String getUserTaskInstanceByIdAndActualOwner(String id, String actualOwner) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdAndActualOwner", id, actualOwner); + return getUserTaskInstanceQuery("UserTaskInstanceByIdAndActualOwner", Map.of(ID, id, ACTUAL_OWNER, actualOwner)); } - + public static String getUserTaskInstanceByIdAndProcessId(String id, String processId) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdAndProcessId", id, processId); + return getUserTaskInstanceQuery("UserTaskInstanceByIdAndProcessId", Map.of(ID, id, PROCESS_ID, processId)); } - + public static String getUserTaskInstanceByIdNoActualOwner(String id) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdNoActualOwner", id); + return getUserTaskInstanceQuery("UserTaskInstanceByIdNoActualOwner", Map.of(ID, id)); } - + public static String getUserTaskInstanceByIdAndState(String id, String state) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdAndState", id, state); + return getUserTaskInstanceQuery("UserTaskInstanceByIdAndState", Map.of(ID, id, STATE, state)); } - + public static String getUserTaskInstanceByIdAndStarted(String id, String started) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdAndStarted", id, started); + return getUserTaskInstanceQuery("UserTaskInstanceByIdAndStarted", Map.of(ID, id, STARTED, started)); } - + public static String getUserTaskInstanceByIdAndCompleted(String id, String completed) { - return getUserTaskInstanceQuery("UserTaskInstanceByIdAndCompleted", id, completed); + return getUserTaskInstanceQuery("UserTaskInstanceByIdAndCompleted", Map.of(ID, id, COMPLETED, completed)); } - + public static String getUserTaskInstanceByIdAndPotentialGroups(String id, List<String> potentialGroups) throws Exception { - return getUserTaskInstanceWithArray("UserTaskInstanceByIdAndPotentialGroups", potentialGroups, "potentialGroups", id); + return getUserTaskInstanceWithArray("UserTaskInstanceByIdAndPotentialGroups", potentialGroups, POTENTIAL_GROUPS, Map.of(ID, id)); } - + public static String getUserTaskInstanceByIdAndPotentialUsers(String id, List<String> potentialUsers) throws Exception { - return getUserTaskInstanceWithArray("UserTaskInstanceByIdAndPotentialUsers", potentialUsers, "potentialUsers", id); + return getUserTaskInstanceWithArray("UserTaskInstanceByIdAndPotentialUsers", potentialUsers, POTENTIAL_USERS, Map.of(ID, id)); } - + public static String getJobById(String id) { - return getJobQuery("JobById", id); + return getJobQuery("JobById", Map.of(ID, id)); } - + public static String getTravelsByUserTaskId(String id) { -@@ -197,10 +214,10 @@ public class GraphQLUtils { +@@ -208,7 +227,7 @@ public class GraphQLUtils { return getQuery("DealsByTaskIdNoActualOwner", id); } - + - private static String getUserTaskInstanceWithArray(String query, List<String> values, String variable, String... args) throws Exception { + private static String getUserTaskInstanceWithArray(String query, List<String> values, String variable, Map<String, Object> args) throws Exception { String json = getUserTaskInstanceQuery(query, args); ObjectNode jsonNode = (ObjectNode) getObjectMapper().readTree(json); -- ArrayNode pg = (ArrayNode) jsonNode.get("variables").get(variable); -+ ArrayNode pg = jsonNode.get("variables").withArray(variable); - values.forEach(g -> pg.add(g)); - return jsonNode.toString(); - } -@@ -209,25 +226,35 @@ public class GraphQLUtils { + ArrayNode pg = (ArrayNode) jsonNode.get("variables").get(variable); +@@ -220,24 +239,32 @@ public class GraphQLUtils { return format(QUERIES.get(name), args); } - + - private static String getProcessInstanceQuery(String name, String... args) { + private static String getProcessInstanceQuery(String name, Map<String, Object> args) { return getQuery(name, ProcessInstance.class, args); } - + - private static String getProcessDefinitionQuery(String name, String... args) { + private static String getProcessDefinitionQuery(String name, Map<String, Object> args) { return getQuery(name, ProcessDefinition.class, args); } - + - private static String getUserTaskInstanceQuery(String name, String... args) { + private static String getUserTaskInstanceQuery(String name, Map<String, Object> args) { return getQuery(name, UserTaskInstance.class, args); } - + - private static String getJobQuery(String name, String... args) { + private static String getJobQuery(String name, Map<String, Object> args) { return getQuery(name, Job.class, args); } - + - private static String getQuery(String name, Class clazz, String... args) { - return format(QUERIES.get(name), insert(0, args, QUERY_FIELDS.get(clazz))); -- } -+ private static String getQuery(String name, Class clazz, Map<String, Object> args) { ++ private static String getQuery(String name, Class<?> clazz, Map<String, Object> args) { + try { + String query = format(QUERIES.get(name), QUERY_FIELDS.get(clazz)); -+ + JsonNode jsonQuery = getObjectMapper().readTree(query); + ObjectNode jsonVars = getObjectMapper().valueToTree(args); + jsonQuery.withObject("/variables").setAll(jsonVars); -+ + return jsonQuery.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } -+ } - + } + private static Stream<Field> getAllFieldsList(Class clazz) { - return FieldUtils.getAllFieldsList(clazz).stream().filter(getSoourcePredicate().or(getSoourcePredicate())); diff --git a/data-index/data-index-service/data-index-service-common/src/test/resources/graphql_queries.json b/data-index/data-index-service/data-index-service-common/src/test/resources/graphql_queries.json -index 8da0f683d..0825ff420 100644 +index afc269c6e..543f91bc4 100644 --- a/data-index/data-index-service/data-index-service-common/src/test/resources/graphql_queries.json +++ b/data-index/data-index-service/data-index-service-common/src/test/resources/graphql_queries.json -@@ -1,207 +1,126 @@ +@@ -1,219 +1,134 @@ { "ProcessDefinitionByIdAndVersion": { "query": "query ($id: String, $version: String) { ProcessDefinitions( where: { id: { equal : $id }, version: { equal : $version } }, orderBy: { version: ASC }, pagination : { limit: 10, offset: 0 } ){ %s } }", @@ -383,6 +375,20 @@ index 8da0f683d..0825ff420 100644 - "variables": { - "bk": "%s" - } ++ "variables": {} + }, + "ProcessInstanceByCreatedBy": { + "query": "query ( $ident: String ) { ProcessInstances(where: { createdBy : { equal : $ident } }) { %s } }", +- "variables": { +- "ident": "%s" +- } ++ "variables": {} + }, + "ProcessInstanceByUpdatedBy": { + "query": "query ( $ident: String ) { ProcessInstances(where: { updatedBy : { equal : $ident } }) { %s } }", +- "variables": { +- "ident": "%s" +- } + "variables": {} }, "UserTaskInstanceById": { @@ -507,81 +513,81 @@ index 8da0f683d..0825ff420 100644 } } diff --git a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/ProcessInstanceEntity.java b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/ProcessInstanceEntity.java -index f477b3a20..dd87921de 100644 +index a9c041341..c7ea6b341 100644 --- a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/ProcessInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/ProcessInstanceEntity.java -@@ -36,14 +36,13 @@ import jakarta.persistence.Table; +@@ -38,14 +38,12 @@ import jakarta.persistence.Table; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; - + import com.fasterxml.jackson.databind.node.ObjectNode; -import com.vladmihalcea.hibernate.type.json.JsonBlobType; -+ + +import org.kie.kogito.persistence.oracle.hibernate.JsonBinaryType; - @Entity(name = "processes") @Table(name = "processes") -@TypeDef(name = "jsonb", typeClass = JsonBlobType.class) public class ProcessInstanceEntity extends AbstractEntity { - + @Id -@@ -69,7 +68,7 @@ public class ProcessInstanceEntity extends AbstractEntity { - private String parentProcessInstanceId; - @Column(name = "lastUpdateTime") - private ZonedDateTime lastUpdate; +@@ -75,7 +73,7 @@ public class ProcessInstanceEntity extends AbstractEntity { + private String createdBy; + @Column(name = "updated_by") + private String updatedBy; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) private ObjectNode variables; @OneToMany(cascade = CascadeType.ALL, mappedBy = "processInstance") private List<NodeInstanceEntity> nodes; diff --git a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/UserTaskInstanceEntity.java b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/UserTaskInstanceEntity.java -index 784048459..25ccf13d0 100644 +index 98cd6fd26..965a753b3 100644 --- a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/UserTaskInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/model/UserTaskInstanceEntity.java -@@ -35,13 +35,11 @@ import jakarta.persistence.Table; +@@ -38,13 +38,12 @@ import jakarta.persistence.Table; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; - + import com.fasterxml.jackson.databind.node.ObjectNode; -import com.vladmihalcea.hibernate.type.json.JsonBlobType; ++ +import org.kie.kogito.persistence.oracle.hibernate.JsonBinaryType; - + @Entity(name = "tasks") -@TypeDef(name = "jsonb", typeClass = JsonBlobType.class) @Table(name = "tasks") public class UserTaskInstanceEntity extends AbstractEntity { - -@@ -90,9 +88,9 @@ public class UserTaskInstanceEntity extends AbstractEntity { + +@@ -93,9 +92,9 @@ public class UserTaskInstanceEntity extends AbstractEntity { private String processId; private String rootProcessId; private String rootProcessInstanceId; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) private ObjectNode inputs; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) private ObjectNode outputs; private String endpoint; - @OneToMany(cascade = CascadeType.ALL, mappedBy = "userTask") + @OneToMany(cascade = CascadeType.ALL, mappedBy = "userTask", orphanRemoval = true, fetch = FetchType.LAZY) diff --git a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleQuery.java b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleQuery.java -index d848509ae..f698d913a 100644 +index a663c662b..dca6217b4 100644 --- a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleQuery.java +++ b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleQuery.java -@@ -26,8 +26,8 @@ import jakarta.persistence.criteria.Order; +@@ -29,8 +29,8 @@ import jakarta.persistence.criteria.Order; import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; +import jakarta.persistence.metamodel.Attribute; - + -import org.hibernate.query.criteria.internal.path.PluralAttributePath; import org.kie.kogito.index.oracle.model.AbstractEntity; import org.kie.kogito.persistence.api.query.AttributeFilter; import org.kie.kogito.persistence.api.query.AttributeSort; -@@ -134,10 +134,10 @@ public class OracleQuery<E extends AbstractEntity, T> implements Query<T> { +@@ -137,10 +137,10 @@ public class OracleQuery<E extends AbstractEntity, T> implements Query<T> { return builder.equal(getAttributePath(root, attribute), value); case IS_NULL: Path pathNull = getAttributePath(root, attribute); @@ -594,24 +600,23 @@ index d848509ae..f698d913a 100644 case BETWEEN: List<Object> v = (List<Object>) value; return builder.between(getAttributePath(root, attribute), (Comparable) v.get(0), -@@ -176,6 +176,12 @@ public class OracleQuery<E extends AbstractEntity, T> implements Query<T> { +@@ -179,6 +179,11 @@ public class OracleQuery<E extends AbstractEntity, T> implements Query<T> { return join.get(split[split.length - 1]); } - + + private boolean isPluralAttribute(final String attribute) { + return this.repository.getEntityManager().getMetamodel().entity(this.entityClass).getDeclaredPluralAttributes().stream() + .map(Attribute::getName) + .anyMatch(pluralAttribute -> pluralAttribute.equals(attribute)); + } -+ private List<Predicate> getRecursivePredicate(AttributeFilter<?> filter, Root<E> root, CriteriaBuilder builder) { return ((List<AttributeFilter<?>>) filter.getValue()) .stream() diff --git a/data-index/data-index-storage/data-index-storage-oracle/src/test/java/org/kie/kogito/index/oracle/schema/DDLSchemaExporter.java b/data-index/data-index-storage/data-index-storage-oracle/src/test/java/org/kie/kogito/index/oracle/schema/DDLSchemaExporter.java -index 7f2bf10f9..420d0ee8a 100644 +index cdcd3cde9..a47fba0db 100644 --- a/data-index/data-index-storage/data-index-storage-oracle/src/test/java/org/kie/kogito/index/oracle/schema/DDLSchemaExporter.java +++ b/data-index/data-index-storage/data-index-storage-oracle/src/test/java/org/kie/kogito/index/oracle/schema/DDLSchemaExporter.java -@@ -43,7 +43,7 @@ public class DDLSchemaExporter { +@@ -46,7 +46,7 @@ public class DDLSchemaExporter { public static void main(String[] args) { try (KogitoOracleSqlContainer oracleSql = new KogitoOracleSqlContainer()) { oracleSql.start(); @@ -621,78 +626,78 @@ index 7f2bf10f9..420d0ee8a 100644 settings.put(Environment.USER, oracleSql.getUsername()); settings.put(Environment.PASS, oracleSql.getPassword()); diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/ProcessInstanceEntity.java b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/ProcessInstanceEntity.java -index 5c6ce9fbb..5bf3ea843 100644 +index 45ae037ac..fac15ead3 100644 --- a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/ProcessInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/ProcessInstanceEntity.java -@@ -36,13 +36,11 @@ import jakarta.persistence.Table; +@@ -38,13 +38,11 @@ import jakarta.persistence.Table; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; import org.kie.kogito.persistence.postgresql.hibernate.JsonBinaryType; - + import com.fasterxml.jackson.databind.node.ObjectNode; - + @Entity(name = "processes") -@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) @Table(name = "processes") public class ProcessInstanceEntity extends AbstractEntity { - -@@ -69,7 +67,7 @@ public class ProcessInstanceEntity extends AbstractEntity { - private String parentProcessInstanceId; - @Column(name = "lastUpdateTime") - private ZonedDateTime lastUpdate; + +@@ -74,7 +72,7 @@ public class ProcessInstanceEntity extends AbstractEntity { + private String createdBy; + + private String updatedBy; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) @Column(columnDefinition = "jsonb") private ObjectNode variables; @OneToMany(cascade = CascadeType.ALL, mappedBy = "processInstance") diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/UserTaskInstanceEntity.java b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/UserTaskInstanceEntity.java -index 2e28ef813..3a709e6a8 100644 +index 94f6d5dbd..e8abc279b 100644 --- a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/UserTaskInstanceEntity.java +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/model/UserTaskInstanceEntity.java -@@ -35,13 +35,11 @@ import jakarta.persistence.Table; +@@ -38,13 +38,11 @@ import jakarta.persistence.Table; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; import org.kie.kogito.persistence.postgresql.hibernate.JsonBinaryType; - + import com.fasterxml.jackson.databind.node.ObjectNode; - + @Entity(name = "tasks") -@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) @Table(name = "tasks") public class UserTaskInstanceEntity extends AbstractEntity { - -@@ -90,10 +88,10 @@ public class UserTaskInstanceEntity extends AbstractEntity { + +@@ -93,10 +91,10 @@ public class UserTaskInstanceEntity extends AbstractEntity { private String processId; private String rootProcessId; private String rootProcessInstanceId; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) @Column(columnDefinition = "jsonb") private ObjectNode inputs; - @Type(type = "jsonb") -+ @Type(value = JsonBinaryType.class) ++ @Type(JsonBinaryType.class) @Column(columnDefinition = "jsonb") private ObjectNode outputs; private String endpoint; diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlQuery.java b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlQuery.java -index 74fd17bd9..e2c373f78 100644 +index b3d980ec6..1df737162 100644 --- a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlQuery.java +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlQuery.java -@@ -26,8 +26,8 @@ import jakarta.persistence.criteria.Order; +@@ -29,8 +29,8 @@ import jakarta.persistence.criteria.Order; import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; +import jakarta.persistence.metamodel.Attribute; - + -import org.hibernate.query.criteria.internal.path.PluralAttributePath; import org.kie.kogito.index.postgresql.model.AbstractEntity; import org.kie.kogito.persistence.api.query.AttributeFilter; import org.kie.kogito.persistence.api.query.AttributeSort; -@@ -132,10 +132,10 @@ public class PostgreSqlQuery<K, E extends AbstractEntity, T> implements Query<T> +@@ -135,10 +135,10 @@ public class PostgreSqlQuery<K, E extends AbstractEntity, T> implements Query<T> return builder.equal(getAttributePath(root, filter.getAttribute()), filter.getValue()); case IS_NULL: Path pathNull = getAttributePath(root, filter.getAttribute()); @@ -705,10 +710,10 @@ index 74fd17bd9..e2c373f78 100644 case BETWEEN: List<Object> value = (List<Object>) filter.getValue(); return builder -@@ -176,6 +176,12 @@ public class PostgreSqlQuery<K, E extends AbstractEntity, T> implements Query<T> +@@ -179,6 +179,12 @@ public class PostgreSqlQuery<K, E extends AbstractEntity, T> implements Query<T> return join.get(split[split.length - 1]); } - + + private boolean isPluralAttribute(final String attribute) { + return this.repository.getEntityManager().getMetamodel().entity(this.entityClass).getDeclaredPluralAttributes().stream() + .map(Attribute::getName) @@ -719,10 +724,10 @@ index 74fd17bd9..e2c373f78 100644 return ((List<AttributeFilter<?>>) filter.getValue()) .stream() diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/schema/DDLSchemaExporter.java b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/schema/DDLSchemaExporter.java -index 4f0d95a71..15b2ad7cc 100644 +index 9b082ecd2..16aaa771e 100644 --- a/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/schema/DDLSchemaExporter.java +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/test/java/org/kie/kogito/index/postgresql/schema/DDLSchemaExporter.java -@@ -45,7 +45,7 @@ public class DDLSchemaExporter { +@@ -48,7 +48,7 @@ public class DDLSchemaExporter { try (KogitoPostgreSqlContainer postgresql = new KogitoPostgreSqlContainer()) { postgresql.waitingFor(Wait.forListeningPort()); postgresql.start(); @@ -732,47 +737,36 @@ index 4f0d95a71..15b2ad7cc 100644 settings.put(Environment.USER, postgresql.getUsername()); settings.put(Environment.PASS, postgresql.getPassword()); diff --git a/kogito-apps-build-parent/pom.xml b/kogito-apps-build-parent/pom.xml -index 2e24461df..f965430b6 100644 +index 2ae4efff1..1dcf2e465 100644 --- a/kogito-apps-build-parent/pom.xml +++ b/kogito-apps-build-parent/pom.xml -@@ -47,7 +47,7 @@ +@@ -67,7 +67,7 @@ <!-- OptaPlanner version --> - <version.org.optaplanner>9.40.0.Final</version.org.optaplanner> - + <version.org.optaplanner>9.44.0.Final</version.org.optaplanner> + - <version.com.vladmihalcea.hibernate-types-55>2.12.1</version.com.vladmihalcea.hibernate-types-55> -+ <version.org.hibernate>6.2.0.Final</version.org.hibernate> <!-- Aligned with Quarkus bom --> ++ <version.org.hibernate>6.2.13.Final</version.org.hibernate> <version.org.apache.opennlp>1.9.2</version.org.apache.opennlp> <version.org.apache.commons.csv>1.8</version.org.apache.commons.csv> <version.org.jredisearch>2.0.0</version.org.jredisearch> -@@ -137,6 +137,11 @@ - <type>pom</type> - <scope>import</scope> - </dependency> -+ <dependency> -+ <groupId>org.hibernate.orm</groupId> -+ <artifactId>hibernate-ant</artifactId> -+ <version>${version.org.hibernate}</version> -+ </dependency> - <dependency> - <groupId>com.redislabs</groupId> - <artifactId>jredisearch</artifactId> -@@ -163,11 +168,6 @@ - <version>${version.org.skyscreamer}</version> +@@ -184,9 +184,9 @@ <scope>test</scope> </dependency> -- <dependency> + <dependency> - <groupId>com.vladmihalcea</groupId> - <artifactId>hibernate-types-55</artifactId> - <version>${version.com.vladmihalcea.hibernate-types-55}</version> -- </dependency> ++ <groupId>org.hibernate.orm</groupId> ++ <artifactId>hibernate-ant</artifactId> ++ <version>${version.org.hibernate}</version> + </dependency> <dependency> <groupId>com.graphql-java</groupId> - <artifactId>graphql-java-extended-scalars</artifactId> diff --git a/persistence-commons/persistence-commons-oracle/pom.xml b/persistence-commons/persistence-commons-oracle/pom.xml -index c4ac717bb..08ae24324 100644 +index ab6db2dbd..8e011f3c7 100644 --- a/persistence-commons/persistence-commons-oracle/pom.xml +++ b/persistence-commons/persistence-commons-oracle/pom.xml -@@ -42,8 +42,8 @@ +@@ -46,8 +46,8 @@ <artifactId>quarkus-jdbc-oracle</artifactId> </dependency> <dependency> @@ -784,12 +778,12 @@ index c4ac717bb..08ae24324 100644 <dependency> <groupId>io.quarkus</groupId> diff --git a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/OracleQuery.java b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/OracleQuery.java -index d52ea5eb6..0bb5a271b 100644 +index 45b33bc1f..bc0c0e758 100644 --- a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/OracleQuery.java +++ b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/OracleQuery.java -@@ -22,17 +22,19 @@ import java.util.Objects; +@@ -25,17 +25,19 @@ import java.util.Objects; import java.util.stream.Collectors; - + import org.hibernate.query.NativeQuery; +import org.hibernate.type.CustomType; +import org.hibernate.type.spi.TypeConfiguration; @@ -801,30 +795,30 @@ index d52ea5eb6..0bb5a271b 100644 import org.kie.kogito.persistence.oracle.model.CacheEntityRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.vladmihalcea.hibernate.type.json.JsonBlobType; - + import static java.lang.String.format; import static java.util.stream.Collectors.joining; -@@ -137,7 +139,7 @@ public class OracleQuery<T> implements Query<T> { +@@ -140,7 +142,7 @@ public class OracleQuery<T> implements Query<T> { jakarta.persistence.Query query = repository.getEntityManager() .createNativeQuery(queryString.toString()) .unwrap(NativeQuery.class) - .addScalar("json_value", new JsonBlobType(type)); + .addScalar("json_value", new CustomType<>(new JsonBinaryType(), new TypeConfiguration())); - + if (limit != null) { query.setMaxResults(limit); diff --git a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/hibernate/JsonBinaryType.java b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/hibernate/JsonBinaryType.java -index 8b67f527f..2e1752247 100644 +index bee97ed84..667e799f6 100644 --- a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/hibernate/JsonBinaryType.java +++ b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/hibernate/JsonBinaryType.java -@@ -16,91 +16,83 @@ - +@@ -18,91 +18,83 @@ + */ package org.kie.kogito.persistence.oracle.hibernate; - + +import java.io.ByteArrayInputStream; import java.io.Serializable; +import java.sql.Blob; @@ -833,56 +827,55 @@ index 8b67f527f..2e1752247 100644 import java.sql.SQLException; -import java.sql.Types; import java.util.Objects; - + import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.type.SqlTypes; import org.hibernate.usertype.UserType; - + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - + import static java.lang.String.format; - + -public class JsonBinaryType implements UserType { +public class JsonBinaryType implements UserType<JsonNode> { - + private ObjectMapper mapper = new ObjectMapper(); - + @Override - public int[] sqlTypes() { - return new int[] { Types.JAVA_OBJECT }; + public int getSqlType() { + return SqlTypes.BLOB; } - + @Override - public Class returnedClass() { + public Class<JsonNode> returnedClass() { return JsonNode.class; } - + @Override - public boolean equals(Object x, Object y) throws HibernateException { + public boolean equals(JsonNode x, JsonNode y) throws HibernateException { return Objects.equals(x, y); } - + @Override - public int hashCode(Object x) throws HibernateException { + public int hashCode(JsonNode x) throws HibernateException { return Objects.hashCode(x); } - + @Override - public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) -- throws HibernateException, SQLException { ++ public JsonNode nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) + throws HibernateException, SQLException { - final String json = rs.getString(names[0]); - if (json == null) { -+ public JsonNode nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) -+ throws SQLException { + final Blob json = rs.getBlob(position); + if (json.length() == 0) { return null; @@ -895,12 +888,11 @@ index 8b67f527f..2e1752247 100644 + throw new RuntimeException("Failed to convert String to JSON: " + ex.getMessage(), ex); } } - + @Override - public void nullSafeSet(PreparedStatement ps, Object value, int index, SharedSessionContractImplementor session) -- throws HibernateException, SQLException { + public void nullSafeSet(PreparedStatement ps, JsonNode value, int index, SharedSessionContractImplementor session) -+ throws SQLException { + throws HibernateException, SQLException { if (value == null) { - ps.setNull(index, Types.OTHER); + ps.setNull(index, SqlTypes.BLOB); @@ -921,7 +913,7 @@ index 8b67f527f..2e1752247 100644 + throw new RuntimeException(format("Failed to convert JSON to String: %s", ex.getMessage()), ex); } } - + @Override - public Object deepCopy(Object value) throws HibernateException { + public JsonNode deepCopy(JsonNode value) throws HibernateException { @@ -935,26 +927,26 @@ index 8b67f527f..2e1752247 100644 - } + return value.deepCopy(); } - + @Override -@@ -109,12 +101,12 @@ public class JsonBinaryType implements UserType { +@@ -111,12 +103,12 @@ public class JsonBinaryType implements UserType { } - + @Override - public Serializable disassemble(Object value) throws HibernateException { + public Serializable disassemble(JsonNode value) throws HibernateException { return this.deepCopy(value).toString(); } - + @Override - public Object assemble(Serializable cached, Object owner) throws HibernateException { + public JsonNode assemble(Serializable cached, Object owner) throws HibernateException { try { return mapper.readTree(cached.toString()); } catch (JsonProcessingException ex) { -@@ -123,7 +115,7 @@ public class JsonBinaryType implements UserType { +@@ -125,7 +117,7 @@ public class JsonBinaryType implements UserType { } - + @Override - public Object replace(Object original, Object target, Object owner) throws HibernateException { + public JsonNode replace(JsonNode original, JsonNode target, Object owner) throws HibernateException { @@ -962,53 +954,42 @@ index 8b67f527f..2e1752247 100644 } } diff --git a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/model/CacheEntity.java b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/model/CacheEntity.java -index 7cbf7ce42..61de03cbf 100644 +index 996177bfc..5c5660687 100644 --- a/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/model/CacheEntity.java +++ b/persistence-commons/persistence-commons-oracle/src/main/java/org/kie/kogito/persistence/oracle/model/CacheEntity.java -@@ -18,6 +18,11 @@ package org.kie.kogito.persistence.oracle.model; - - import java.util.Objects; - -+import org.hibernate.annotations.Type; -+import org.kie.kogito.persistence.oracle.hibernate.JsonBinaryType; -+ -+import com.fasterxml.jackson.databind.node.ObjectNode; -+ - import jakarta.persistence.Column; - import jakarta.persistence.Entity; - import jakarta.persistence.Id; -@@ -26,17 +31,10 @@ import jakarta.persistence.Index; - import jakarta.persistence.Table; +@@ -29,16 +29,15 @@ import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; - --import org.hibernate.annotations.Type; + + import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; -- --import com.fasterxml.jackson.databind.node.ObjectNode; ++ ++import org.kie.kogito.persistence.oracle.hibernate.JsonBinaryType; + + import com.fasterxml.jackson.databind.node.ObjectNode; -import com.vladmihalcea.hibernate.type.json.JsonBlobType; -- + @Entity @IdClass(CacheId.class) @Table(name = "kogito_data_cache", uniqueConstraints = @UniqueConstraint(columnNames = { "name", "key" }), indexes = @Index(columnList = "name,key", unique = true)) -@TypeDef(name = "jsonb", typeClass = JsonBlobType.class) public class CacheEntity { - + @Id -@@ -47,7 +45,7 @@ public class CacheEntity { +@@ -49,7 +48,7 @@ public class CacheEntity { @Column(nullable = false) private String key; - + - @Type(type = "jsonb") + @Type(JsonBinaryType.class) @Column(name = "json_value") private ObjectNode value; - + diff --git a/persistence-commons/persistence-commons-oracle/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java b/persistence-commons/persistence-commons-oracle/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java -index 4c3faf1d0..642789526 100644 +index 9269c56b9..18d42b55d 100644 --- a/persistence-commons/persistence-commons-oracle/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java +++ b/persistence-commons/persistence-commons-oracle/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java -@@ -37,7 +37,7 @@ public class DDLSchemaExporter { +@@ -39,7 +39,7 @@ public class DDLSchemaExporter { try (KogitoOracleSqlContainer oracle = new KogitoOracleSqlContainer()) { oracle.waitingFor(Wait.forListeningPort()); oracle.start(); @@ -1018,10 +999,10 @@ index 4c3faf1d0..642789526 100644 settings.put(Environment.USER, oracle.getUsername()); settings.put(Environment.PASS, oracle.getPassword()); diff --git a/persistence-commons/persistence-commons-postgresql/pom.xml b/persistence-commons/persistence-commons-postgresql/pom.xml -index 3715d7ab9..dcdf7ab7c 100644 +index 4a5ecaa1f..da5f3ca48 100644 --- a/persistence-commons/persistence-commons-postgresql/pom.xml +++ b/persistence-commons/persistence-commons-postgresql/pom.xml -@@ -42,8 +42,8 @@ +@@ -46,8 +46,8 @@ <artifactId>quarkus-jdbc-postgresql</artifactId> </dependency> <dependency> @@ -1033,13 +1014,13 @@ index 3715d7ab9..dcdf7ab7c 100644 <dependency> <groupId>io.quarkus</groupId> diff --git a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java -index e01355e78..b6851dcbb 100644 +index cd6ab38b2..ae831210e 100644 --- a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java +++ b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/PostgresQuery.java -@@ -21,17 +21,19 @@ import java.util.Map; +@@ -24,17 +24,19 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; - + +import org.hibernate.type.CustomType; +import org.hibernate.type.spi.TypeConfiguration; import org.kie.kogito.persistence.api.query.AttributeFilter; @@ -1050,76 +1031,75 @@ index e01355e78..b6851dcbb 100644 import org.kie.kogito.persistence.postgresql.model.CacheEntityRepository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.vladmihalcea.hibernate.type.json.JsonNodeBinaryType; - + import static java.lang.String.format; import static java.util.stream.Collectors.joining; -@@ -134,7 +136,7 @@ public class PostgresQuery<T> implements Query<T> { - +@@ -137,7 +139,7 @@ public class PostgresQuery<T> implements Query<T> { + LOGGER.debug("Executing PostgreSQL query: {}", queryString); jakarta.persistence.Query query = repository.getEntityManager().createNativeQuery(queryString.toString()); - query.unwrap(org.hibernate.query.NativeQuery.class).addScalar("json_value", JsonNodeBinaryType.INSTANCE); + query.unwrap(org.hibernate.query.NativeQuery.class).addScalar("json_value", new CustomType<>(new JsonBinaryType(), new TypeConfiguration())); - + if (limit != null) { query.setMaxResults(limit); diff --git a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java -index 83622105b..550aa151b 100644 +index 3f360bba2..937851b9f 100644 --- a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java +++ b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/hibernate/JsonBinaryType.java -@@ -25,81 +25,72 @@ import java.util.Objects; - +@@ -27,81 +27,73 @@ import java.util.Objects; + import org.hibernate.HibernateException; import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.type.SqlTypes; import org.hibernate.usertype.UserType; - + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -- + import static java.lang.String.format; - + -public class JsonBinaryType implements UserType { +public class JsonBinaryType implements UserType<JsonNode> { - + private ObjectMapper mapper = new ObjectMapper(); - + @Override - public int[] sqlTypes() { - return new int[] { Types.JAVA_OBJECT }; + public int getSqlType() { -+ return SqlTypes.JAVA_OBJECT; ++ return SqlTypes.BLOB; } - + @Override - public Class returnedClass() { + public Class<JsonNode> returnedClass() { return JsonNode.class; } - + @Override - public boolean equals(Object x, Object y) throws HibernateException { -+ public boolean equals(JsonNode x, JsonNode y) { ++ public boolean equals(JsonNode x, JsonNode y) throws HibernateException { return Objects.equals(x, y); } - + @Override - public int hashCode(Object x) throws HibernateException { -+ public int hashCode(JsonNode x) { ++ public int hashCode(JsonNode x) throws HibernateException { return Objects.hashCode(x); } - + @Override - public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) -- throws HibernateException, SQLException { -- final String json = rs.getString(names[0]); + public JsonNode nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) -+ throws SQLException { + throws HibernateException, SQLException { +- final String json = rs.getString(names[0]); + final String json = rs.getString(position); if (json == null) { return null; @@ -1131,12 +1111,11 @@ index 83622105b..550aa151b 100644 + throw new RuntimeException("Failed to convert String to JSON: " + ex.getMessage(), ex); } } - + @Override - public void nullSafeSet(PreparedStatement ps, Object value, int index, SharedSessionContractImplementor session) -- throws HibernateException, SQLException { + public void nullSafeSet(PreparedStatement ps, JsonNode value, int index, SharedSessionContractImplementor session) -+ throws SQLException { + throws HibernateException, SQLException { if (value == null) { ps.setNull(index, Types.OTHER); return; @@ -1155,7 +1134,7 @@ index 83622105b..550aa151b 100644 + throw new RuntimeException(format("Failed to convert JSON to String: %s", ex.getMessage()), ex); } } - + @Override - public Object deepCopy(Object value) throws HibernateException { + public JsonNode deepCopy(JsonNode value) throws HibernateException { @@ -1169,26 +1148,26 @@ index 83622105b..550aa151b 100644 - } + return value.deepCopy(); } - + @Override -@@ -108,12 +99,12 @@ public class JsonBinaryType implements UserType { +@@ -110,12 +102,12 @@ public class JsonBinaryType implements UserType { } - + @Override - public Serializable disassemble(Object value) throws HibernateException { + public Serializable disassemble(JsonNode value) throws HibernateException { return this.deepCopy(value).toString(); } - + @Override - public Object assemble(Serializable cached, Object owner) throws HibernateException { + public JsonNode assemble(Serializable cached, Object owner) throws HibernateException { try { return mapper.readTree(cached.toString()); } catch (JsonProcessingException ex) { -@@ -122,7 +113,7 @@ public class JsonBinaryType implements UserType { +@@ -124,7 +116,7 @@ public class JsonBinaryType implements UserType { } - + @Override - public Object replace(Object original, Object target, Object owner) throws HibernateException { + public JsonNode replace(JsonNode original, JsonNode target, Object owner) throws HibernateException { @@ -1196,39 +1175,39 @@ index 83622105b..550aa151b 100644 } } diff --git a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java -index 111e79ee5..6092f048f 100644 +index 0f58963f9..a77c306cf 100644 --- a/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java +++ b/persistence-commons/persistence-commons-postgresql/src/main/java/org/kie/kogito/persistence/postgresql/model/CacheEntity.java -@@ -27,7 +27,6 @@ import jakarta.persistence.Table; +@@ -29,7 +29,6 @@ import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; - + import org.hibernate.annotations.Type; -import org.hibernate.annotations.TypeDef; import org.kie.kogito.persistence.postgresql.hibernate.JsonBinaryType; - + import com.fasterxml.jackson.databind.node.ObjectNode; -@@ -36,7 +35,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; +@@ -38,7 +37,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; @IdClass(CacheId.class) @Table(name = "kogito_data_cache", uniqueConstraints = @UniqueConstraint(columnNames = { "name", "key" }), indexes = @Index(columnList = "name,key", unique = true)) -@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class) public class CacheEntity { - + @Id -@@ -47,7 +45,7 @@ public class CacheEntity { +@@ -49,7 +47,7 @@ public class CacheEntity { @Column(nullable = false) private String key; - + - @Type(type = "jsonb") + @Type(JsonBinaryType.class) @Column(name = "json_value", columnDefinition = "jsonb") private ObjectNode value; - + diff --git a/persistence-commons/persistence-commons-postgresql/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java b/persistence-commons/persistence-commons-postgresql/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java -index 98a54340f..012341591 100644 +index 2d8e5734f..1092d6354 100644 --- a/persistence-commons/persistence-commons-postgresql/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java +++ b/persistence-commons/persistence-commons-postgresql/src/test/java/org/kie/kogito/persistence/schema/DDLSchemaExporter.java -@@ -37,7 +37,7 @@ public class DDLSchemaExporter { +@@ -39,7 +39,7 @@ public class DDLSchemaExporter { try (KogitoPostgreSqlContainer postgresql = new KogitoPostgreSqlContainer()) { postgresql.waitingFor(Wait.forListeningPort()); postgresql.start(); diff --git a/.ci/environments/quarkus-3/patches/0003_mutiny_changes.patch b/.ci/environments/quarkus-3/patches/0003_mutiny_changes.patch index 9917a169e..71193532a 100644 --- a/.ci/environments/quarkus-3/patches/0003_mutiny_changes.patch +++ b/.ci/environments/quarkus-3/patches/0003_mutiny_changes.patch @@ -1,14 +1,8 @@ -commit 1f48cf1b6cfeda47e05d1a64363ccb60787fe4df -Author: radtriste <[email protected]> -Date: Wed May 3 15:47:07 2023 +0200 - - patch: mutiny update - diff --git a/persistence-commons/persistence-commons-infinispan/src/main/java/org/kie/kogito/persistence/infinispan/cache/InfinispanStorage.java b/persistence-commons/persistence-commons-infinispan/src/main/java/org/kie/kogito/persistence/infinispan/cache/InfinispanStorage.java -index 598223d1b..e94a35074 100644 +index 29292da9a..1beb34b0f 100644 --- a/persistence-commons/persistence-commons-infinispan/src/main/java/org/kie/kogito/persistence/infinispan/cache/InfinispanStorage.java +++ b/persistence-commons/persistence-commons-infinispan/src/main/java/org/kie/kogito/persistence/infinispan/cache/InfinispanStorage.java -@@ -76,7 +76,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { +@@ -78,7 +78,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { UnicastProcessor<V> processor = UnicastProcessor.create(); CacheObjectCreatedListener<K, V> listener = new CacheObjectCreatedListener<>(delegate, v -> processor.onNext(v)); return processor @@ -16,8 +10,8 @@ index 598223d1b..e94a35074 100644 + .onSubscription().invoke(s -> delegate.addClientListener(listener)) .onTermination().invoke(() -> delegate.removeClientListener(listener)); } - -@@ -86,7 +86,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { + +@@ -88,7 +88,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { UnicastProcessor<V> processor = UnicastProcessor.create(); CacheObjectUpdatedListener<K, V> listener = new CacheObjectUpdatedListener<>(delegate, v -> processor.onNext(v)); return processor @@ -25,8 +19,8 @@ index 598223d1b..e94a35074 100644 + .onSubscription().invoke(s -> delegate.addClientListener(listener)) .onTermination().invoke(() -> delegate.removeClientListener(listener)); } - -@@ -96,7 +96,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { + +@@ -98,7 +98,7 @@ public class InfinispanStorage<K, V> implements Storage<K, V> { UnicastProcessor<K> processor = UnicastProcessor.create(); CacheObjectRemovedListener<K> listener = new CacheObjectRemovedListener<>(v -> processor.onNext(v)); return processor @@ -34,4 +28,4 @@ index 598223d1b..e94a35074 100644 + .onSubscription().invoke(s -> delegate.addClientListener(listener)) .onTermination().invoke(() -> delegate.removeClientListener(listener)); } - + diff --git a/.ci/environments/quarkus-3/patches/0004_arc_changes.patch b/.ci/environments/quarkus-3/patches/0004_arc_changes.patch index 4be87acf5..5a3f33b16 100644 --- a/.ci/environments/quarkus-3/patches/0004_arc_changes.patch +++ b/.ci/environments/quarkus-3/patches/0004_arc_changes.patch @@ -1,34 +1,28 @@ -commit 3897fefbcbca59cc79a3d5631dbef8787fe5f971 -Author: radtriste <[email protected]> -Date: Thu May 4 11:06:26 2023 +0200 - - patch: solve arc changes - diff --git a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleStorageService.java b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleStorageService.java -index a11b9fe52..d0fa23be0 100644 +index 8c1d6dcfa..efadb2929 100644 --- a/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleStorageService.java +++ b/data-index/data-index-storage/data-index-storage-oracle/src/main/java/org/kie/kogito/index/oracle/storage/OracleStorageService.java -@@ -15,7 +15,9 @@ +@@ -18,7 +18,9 @@ */ package org.kie.kogito.index.oracle.storage; - + +import jakarta.annotation.Priority; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; import jakarta.inject.Inject; - + import org.kie.kogito.index.model.Job; -@@ -24,14 +26,14 @@ import org.kie.kogito.index.model.UserTaskInstance; +@@ -28,14 +30,14 @@ import org.kie.kogito.index.model.UserTaskInstance; import org.kie.kogito.persistence.api.Storage; import org.kie.kogito.persistence.api.StorageService; - + -import io.quarkus.arc.AlternativePriority; import io.quarkus.arc.properties.IfBuildProperty; - + import static java.lang.String.format; import static org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_PROPERTY; import static org.kie.kogito.persistence.oracle.Constants.ORACLE_STORAGE; - + -@AlternativePriority(1) +@Alternative +@Priority(1) @@ -36,30 +30,30 @@ index a11b9fe52..d0fa23be0 100644 @IfBuildProperty(name = PERSISTENCE_TYPE_PROPERTY, stringValue = ORACLE_STORAGE) public class OracleStorageService implements StorageService { diff --git a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlStorageService.java b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlStorageService.java -index 969d73231..cae9875a1 100644 +index deab75186..93bb36faf 100644 --- a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlStorageService.java +++ b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/storage/PostgreSqlStorageService.java -@@ -15,7 +15,9 @@ +@@ -18,7 +18,9 @@ */ package org.kie.kogito.index.postgresql.storage; - + +import jakarta.annotation.Priority; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; import jakarta.inject.Inject; - + import org.kie.kogito.index.model.Job; -@@ -24,14 +26,14 @@ import org.kie.kogito.index.model.UserTaskInstance; +@@ -28,14 +30,14 @@ import org.kie.kogito.index.model.UserTaskInstance; import org.kie.kogito.persistence.api.Storage; import org.kie.kogito.persistence.api.StorageService; - + -import io.quarkus.arc.AlternativePriority; import io.quarkus.arc.properties.IfBuildProperty; - + import static java.lang.String.format; import static org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_PROPERTY; import static org.kie.kogito.persistence.postgresql.Constants.POSTGRESQL_STORAGE; - + -@AlternativePriority(1) +@Alternative +@Priority(1) @@ -67,34 +61,34 @@ index 969d73231..cae9875a1 100644 @IfBuildProperty(name = PERSISTENCE_TYPE_PROPERTY, stringValue = POSTGRESQL_STORAGE) public class PostgreSqlStorageService implements StorageService { diff --git a/trusty/trusty-storage/trusty-storage-postgresql/src/main/java/org/kie/kogito/trusty/storage/postgresql/PostgresStorageService.java b/trusty/trusty-storage/trusty-storage-postgresql/src/main/java/org/kie/kogito/trusty/storage/postgresql/PostgresStorageService.java -index ee4e19533..3aca96e3e 100644 +index 6e174a82a..2adb6a2db 100644 --- a/trusty/trusty-storage/trusty-storage-postgresql/src/main/java/org/kie/kogito/trusty/storage/postgresql/PostgresStorageService.java +++ b/trusty/trusty-storage/trusty-storage-postgresql/src/main/java/org/kie/kogito/trusty/storage/postgresql/PostgresStorageService.java -@@ -16,7 +16,9 @@ - +@@ -18,7 +18,9 @@ + */ package org.kie.kogito.trusty.storage.postgresql; - + +import jakarta.annotation.Priority; import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; import jakarta.inject.Inject; - + import org.kie.kogito.explainability.api.CounterfactualExplainabilityRequest; -@@ -27,7 +29,6 @@ import org.kie.kogito.persistence.api.StorageService; +@@ -29,15 +31,15 @@ import org.kie.kogito.persistence.api.StorageService; import org.kie.kogito.trusty.storage.api.model.decision.DMNModelWithMetadata; import org.kie.kogito.trusty.storage.api.model.decision.Decision; - + -import io.quarkus.arc.AlternativePriority; import io.quarkus.arc.properties.IfBuildProperty; - + import static java.lang.String.format; -@@ -35,7 +36,8 @@ import static org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_ + import static org.kie.kogito.persistence.api.factory.Constants.PERSISTENCE_TYPE_PROPERTY; import static org.kie.kogito.persistence.postgresql.Constants.POSTGRESQL_STORAGE; - - @ApplicationScoped --@AlternativePriority(1) + +@Alternative +@Priority(1) + @ApplicationScoped +-@AlternativePriority(1) @IfBuildProperty(name = PERSISTENCE_TYPE_PROPERTY, stringValue = POSTGRESQL_STORAGE) public class PostgresStorageService implements StorageService { - + diff --git a/.ci/environments/quarkus-3/patches/0005_jobs-service-reactive-streams.patch b/.ci/environments/quarkus-3/patches/0005_jobs-service-reactive-streams.patch index 49f5f4079..f2e9f5373 100644 --- a/.ci/environments/quarkus-3/patches/0005_jobs-service-reactive-streams.patch +++ b/.ci/environments/quarkus-3/patches/0005_jobs-service-reactive-streams.patch @@ -1,275 +1,268 @@ diff --git a/jobs-service/jobs-service-common/pom.xml b/jobs-service/jobs-service-common/pom.xml -index c479c65ec..46ae229cd 100644 +index defe64921..0bbd7f8d2 100644 --- a/jobs-service/jobs-service-common/pom.xml +++ b/jobs-service/jobs-service-common/pom.xml -@@ -97,6 +97,11 @@ - <artifactId>smallrye-reactive-messaging-in-memory</artifactId> +@@ -93,6 +93,10 @@ + <groupId>io.quarkus</groupId> + <artifactId>quarkus-smallrye-openapi</artifactId> </dependency> - + <dependency> -+ <groupId>io.smallrye.reactive</groupId> -+ <artifactId>mutiny-zero-flow-adapters</artifactId> ++ <groupId>io.smallrye.reactive</groupId> ++ <artifactId>mutiny-zero-flow-adapters</artifactId> + </dependency> -+ - <!-- Data Index Integration --> + + <!-- Logging --> <dependency> - <groupId>org.kie.kogito</groupId> diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/messaging/ReactiveMessagingEventConsumer.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/messaging/ReactiveMessagingEventConsumer.java -index fb5e9360b..e1cba14ca 100644 +index 5739f2544..07734ccbd 100644 --- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/messaging/ReactiveMessagingEventConsumer.java +++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/messaging/ReactiveMessagingEventConsumer.java -@@ -17,6 +17,7 @@ package org.kie.kogito.jobs.service.messaging; - - import java.util.Objects; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.eclipse.microprofile.reactive.messaging.Message; - import org.kie.kogito.jobs.service.exception.JobServiceException; - import org.kie.kogito.jobs.service.model.JobDetails; -@@ -74,7 +75,7 @@ public abstract class ReactiveMessagingEventConsumer { +@@ -32,6 +32,8 @@ import org.slf4j.LoggerFactory; + import io.cloudevents.CloudEvent; + import io.smallrye.mutiny.Uni; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; ++ + public abstract class ReactiveMessagingEventConsumer { + + private static final Logger LOGGER = LoggerFactory.getLogger(ReactiveMessagingEventConsumer.class); +@@ -77,7 +79,7 @@ public abstract class ReactiveMessagingEventConsumer { return Uni.createFrom().completionStage(jobRepository.get(job.getId())) .flatMap(existingJob -> { if (existingJob == null || existingJob.getStatus() == JobStatus.SCHEDULED) { - return Uni.createFrom().publisher(scheduler.schedule(job)); -+ return Uni.createFrom().publisher(AdaptersToFlow.publisher(scheduler.schedule(job))); ++ return Uni.createFrom().publisher(publisher(scheduler.schedule(job))); } else { LOGGER.info("A Job in status: {} already exists for the job id: {}, no processing will be done fot the event: {}.", existingJob.getStatus(), diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/JobResource.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/JobResource.java -index b4de77b37..451f42789 100644 +index 2a7cdc175..2bf124b82 100644 --- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/JobResource.java +++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/JobResource.java -@@ -28,6 +28,7 @@ import jakarta.ws.rs.PathParam; - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.core.MediaType; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.eclipse.microprofile.openapi.annotations.Operation; - import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody; - import org.kie.kogito.jobs.api.Job; -@@ -65,7 +66,7 @@ public class JobResource { +@@ -46,6 +46,8 @@ import org.slf4j.LoggerFactory; + + import io.smallrye.mutiny.Uni; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; ++ + @ApplicationScoped + @Path(RestApiConstants.JOBS_PATH) + public class JobResource { +@@ -68,7 +70,7 @@ public class JobResource { public Uni<ScheduledJob> create(Job job) { LOGGER.debug("REST create {}", job); JobDetails jobDetails = jobDetailsValidator.validateToCreate(ScheduledJobAdapter.to(ScheduledJob.builder().job(job).build())); - return Uni.createFrom().publisher(scheduler.schedule(jobDetails)) -+ return Uni.createFrom().publisher(AdaptersToFlow.publisher(scheduler.schedule(jobDetails))) ++ return Uni.createFrom().publisher(publisher(scheduler.schedule(jobDetails))) .onItem().ifNull().failWith(new RuntimeException("Failed to schedule job " + job)) .onItem().transform(ScheduledJobAdapter::of); } -@@ -79,7 +80,7 @@ public class JobResource { +@@ -82,7 +84,7 @@ public class JobResource { LOGGER.debug("REST patch update {}", job); //validating allowed patch attributes JobDetails jobToBeMerged = jobDetailsValidator.validateToMerge(ScheduledJobAdapter.to(ScheduledJobBuilder.from(job))); - return Uni.createFrom().publisher(scheduler.reschedule(id, jobToBeMerged.getTrigger()).buildRs()) -+ return Uni.createFrom().publisher(AdaptersToFlow.publisher(scheduler.reschedule(id, jobToBeMerged.getTrigger()).buildRs())) ++ return Uni.createFrom().publisher(publisher(scheduler.reschedule(id, jobToBeMerged.getTrigger()).buildRs())) .onItem().ifNull().failWith(new NotFoundException("Failed to reschedule job " + job)) .onItem().transform(ScheduledJobAdapter::of); } diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/v2/JobResourceV2.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/v2/JobResourceV2.java -index f03cefc3e..dc79d5639 100644 +index 34ed6ea97..a55727bed 100644 --- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/v2/JobResourceV2.java +++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/resource/v2/JobResourceV2.java -@@ -27,6 +27,7 @@ import jakarta.ws.rs.PathParam; - import jakarta.ws.rs.Produces; - import jakarta.ws.rs.core.MediaType; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.eclipse.microprofile.openapi.annotations.Operation; - import org.kie.kogito.jobs.service.adapter.JobDetailsAdapter; - import org.kie.kogito.jobs.service.api.Job; -@@ -63,7 +64,7 @@ public class JobResourceV2 { +@@ -43,6 +43,8 @@ import org.slf4j.LoggerFactory; + + import io.smallrye.mutiny.Uni; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; ++ + @ApplicationScoped + @Path(RestApiConstants.V2 + RestApiConstants.JOBS_PATH) + public class JobResourceV2 { +@@ -66,7 +68,7 @@ public class JobResourceV2 { LOGGER.debug("REST create {}", job); jobValidator.validateToCreate(job); JobDetails jobDetails = JobDetailsAdapter.from(job); - return Uni.createFrom().publisher(scheduler.schedule(jobDetails)) -+ return Uni.createFrom().publisher(AdaptersToFlow.publisher(scheduler.schedule(jobDetails))) ++ return Uni.createFrom().publisher(publisher(scheduler.schedule(jobDetails))) .onItem().ifNull().failWith(new RuntimeException("Failed to schedule job " + job)) .onItem().transform(JobDetailsAdapter::toJob); } diff --git a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java -index 4a3e9e6a6..c9f23d1cd 100644 +index c18029793..aa2b39a82 100644 --- a/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java +++ b/jobs-service/jobs-service-common/src/main/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobScheduler.java -@@ -26,6 +26,7 @@ import java.util.concurrent.CompletionStage; - import java.util.concurrent.ConcurrentHashMap; - import java.util.function.Consumer; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.apache.commons.lang3.tuple.Pair; - import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder; - import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams; -@@ -306,7 +307,7 @@ public abstract class BaseTimerJobScheduler implements ReactiveJobScheduler { +@@ -49,6 +49,8 @@ import org.slf4j.LoggerFactory; + + import io.smallrye.mutiny.Uni; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; ++ + /** + * Base reactive Job Scheduler that performs the fundamental operations and let to the concrete classes to + * implement the scheduling actions. +@@ -315,7 +317,7 @@ public abstract class BaseTimerJobScheduler implements ReactiveJobScheduler { return Uni.createFrom().completionStage(futureJob) .onItem().invoke(job -> LOGGER.debug("Cancel Job Scheduling {}", job)) .chain(scheduledJob -> Optional.ofNullable(scheduledJob.getScheduledId()) - .map(id -> Uni.createFrom().publisher(this.doCancel(scheduledJob)) -+ .map(id -> Uni.createFrom().publisher(AdaptersToFlow.publisher(this.doCancel(scheduledJob))) ++ .map(id -> Uni.createFrom().publisher(publisher(this.doCancel(scheduledJob))) .onItem().transform(b -> scheduledJob)) .orElse(Uni.createFrom().item(scheduledJob))) //final state, removing the job diff --git a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobSchedulerTest.java b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobSchedulerTest.java -index b535e7671..9b1b3fb0a 100644 +index 08185b4ee..62ebd9b2c 100644 --- a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobSchedulerTest.java +++ b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/BaseTimerJobSchedulerTest.java -@@ -25,6 +25,7 @@ import java.util.concurrent.CompletionStage; - import java.util.concurrent.TimeUnit; - import java.util.function.Consumer; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder; - import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams; - import org.junit.jupiter.api.BeforeEach; -@@ -352,7 +353,7 @@ public abstract class BaseTimerJobSchedulerTest { - +@@ -51,6 +51,7 @@ import org.reactivestreams.Publisher; + import io.smallrye.mutiny.Multi; + import io.smallrye.mutiny.Uni; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; + import static org.assertj.core.api.Assertions.assertThat; + import static org.assertj.core.api.Assertions.assertThatThrownBy; + import static org.kie.kogito.jobs.service.model.JobStatus.CANCELED; +@@ -358,7 +359,7 @@ public abstract class BaseTimerJobSchedulerTest { + private void subscribeOn(Publisher<JobDetails> schedule) { Multi.createFrom() - .publisher(schedule) -+ .publisher(AdaptersToFlow.publisher(schedule)) ++ .publisher(publisher(schedule)) .subscribe() .with(dummyCallback(), dummyCallback()); } diff --git a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobSchedulerTest.java b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobSchedulerTest.java -index 1009f1aa8..77460ecdd 100644 +index b6567ce0c..9c5ca3bc9 100644 --- a/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobSchedulerTest.java +++ b/jobs-service/jobs-service-common/src/test/java/org/kie/kogito/jobs/service/scheduler/impl/TimerDelegateJobSchedulerTest.java -@@ -18,6 +18,7 @@ package org.kie.kogito.jobs.service.scheduler.impl; - import java.util.Optional; - import java.util.UUID; - -+import mutiny.zero.flow.adapters.AdaptersToFlow; - import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder; - import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams; - import org.junit.jupiter.api.BeforeEach; -@@ -76,14 +77,14 @@ class TimerDelegateJobSchedulerTest extends BaseTimerJobSchedulerTest { +@@ -45,6 +45,7 @@ import org.reactivestreams.Publisher; + + import io.smallrye.mutiny.Multi; + ++import static mutiny.zero.flow.adapters.AdaptersToFlow.publisher; + import static org.assertj.core.api.Assertions.assertThat; + import static org.mockito.ArgumentMatchers.any; + import static org.mockito.ArgumentMatchers.eq; +@@ -79,14 +80,14 @@ class TimerDelegateJobSchedulerTest extends BaseTimerJobSchedulerTest { @Test void testDoSchedule() { PublisherBuilder<ManageableJobHandle> schedule = tested.doSchedule(scheduledJob, Optional.empty()); - Multi.createFrom().publisher(schedule.buildRs()).subscribe().with(dummyCallback(), dummyCallback()); -+ Multi.createFrom().publisher(AdaptersToFlow.publisher(schedule.buildRs())).subscribe().with(dummyCallback(), dummyCallback()); ++ Multi.createFrom().publisher(publisher(schedule.buildRs())).subscribe().with(dummyCallback(), dummyCallback()); verify(timer).scheduleJob(any(DelegateJob.class), any(JobDetailsContext.class), eq(scheduledJob.getTrigger())); } - + @Test void testDoCancel() { Publisher<ManageableJobHandle> cancel = tested.doCancel(JobDetails.builder().of(scheduledJob).scheduledId(SCHEDULED_ID).build()); - Multi.createFrom().publisher(cancel).subscribe().with(dummyCallback(), dummyCallback()); -+ Multi.createFrom().publisher(AdaptersToFlow.publisher(cancel)).subscribe().with(dummyCallback(), dummyCallback()); ++ Multi.createFrom().publisher(publisher(cancel)).subscribe().with(dummyCallback(), dummyCallback()); verify(timer).removeJob(any(ManageableJobHandle.class)); } - -@@ -91,7 +92,7 @@ class TimerDelegateJobSchedulerTest extends BaseTimerJobSchedulerTest { + +@@ -94,7 +95,7 @@ class TimerDelegateJobSchedulerTest extends BaseTimerJobSchedulerTest { void testDoCancelNullId() { Publisher<ManageableJobHandle> cancel = tested.doCancel(JobDetails.builder().of(scheduledJob).scheduledId(null).build()); - Multi.createFrom().publisher(cancel).subscribe().with(dummyCallback(), dummyCallback()); -+ Multi.createFrom().publisher(AdaptersToFlow.publisher(cancel)).subscribe().with(dummyCallback(), dummyCallback()); ++ Multi.createFrom().publisher(publisher(cancel)).subscribe().with(dummyCallback(), dummyCallback()); verify(timer, never()).removeJob(any(ManageableJobHandle.class)); } - + diff --git a/jobs-service/jobs-service-mongodb/pom.xml b/jobs-service/jobs-service-mongodb/pom.xml -index ba120b976..5f32dba62 100644 +index ebe22617f..87949efc5 100644 --- a/jobs-service/jobs-service-mongodb/pom.xml +++ b/jobs-service/jobs-service-mongodb/pom.xml -@@ -30,6 +30,10 @@ - <groupId>io.quarkus</groupId> - <artifactId>quarkus-mongodb-client</artifactId> - </dependency> +@@ -34,6 +34,10 @@ + <description>Jobs Service (Timers and Async Jobs) with MongoDB</description> + + <dependencies> + <dependency> + <groupId>io.smallrye.reactive</groupId> + <artifactId>mutiny-zero-flow-adapters</artifactId> + </dependency> - - <!-- Testing --> <dependency> + <groupId>org.kie.kogito</groupId> + <artifactId>jobs-service-common</artifactId> diff --git a/jobs-service/jobs-service-mongodb/src/main/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepository.java b/jobs-service/jobs-service-mongodb/src/main/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepository.java -index 7f4cfd6c6..c6200a936 100644 +index bc615db4d..3140f6cb5 100644 --- a/jobs-service/jobs-service-mongodb/src/main/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepository.java +++ b/jobs-service/jobs-service-mongodb/src/main/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepository.java -@@ -23,6 +23,7 @@ import jakarta.enterprise.context.ApplicationScoped; - import jakarta.enterprise.event.Observes; - import jakarta.inject.Inject; - -+import mutiny.zero.flow.adapters.AdaptersToReactiveStreams; - import org.bson.Document; - import org.bson.json.JsonWriterSettings; - import org.eclipse.microprofile.config.inject.ConfigProperty; -@@ -142,28 +143,29 @@ public class MongoDBJobRepository extends BaseReactiveJobRepository implements R - +@@ -58,6 +58,7 @@ import static java.util.Arrays.stream; + import static java.util.Optional.ofNullable; + import static java.util.stream.Collectors.counting; + import static java.util.stream.Collectors.toList; ++import static mutiny.zero.flow.adapters.AdaptersToReactiveStreams.publisher; + import static org.bson.Document.parse; + import static org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams.fromPublisher; + +@@ -144,17 +145,17 @@ public class MongoDBJobRepository extends BaseReactiveJobRepository implements R + @Override public PublisherBuilder<JobDetails> findAll() { - return fromPublisher(collection.find() -- .map(document -> documentToJson(document)) -- .map(jobDetailsMarshaller::unmarshall) -- .emitOn(Infrastructure.getDefaultExecutor()) -- .convert() ++ return fromPublisher(publisher(collection.find() + .map(document -> documentToJson(document)) + .map(jobDetailsMarshaller::unmarshall) + .emitOn(Infrastructure.getDefaultExecutor()) + .convert() - .toPublisher()); -+ return fromPublisher( -+ AdaptersToReactiveStreams.publisher( -+ collection.find() -+ .map(document -> documentToJson(document)) -+ .map(jobDetailsMarshaller::unmarshall) -+ .emitOn(Infrastructure.getDefaultExecutor()) -+ .convert() -+ .toPublisher())); ++ .toPublisher())); } - + @Override public PublisherBuilder<JobDetails> findByStatusBetweenDatesOrderByPriority(ZonedDateTime from, ZonedDateTime to, JobStatus... status) { - return fromPublisher( -+ AdaptersToReactiveStreams.publisher( +- return fromPublisher( ++ return fromPublisher(publisher( collection.find( and( in(STATUS_COLUMN, stream(status).map(Enum::name).collect(toList())), - gt(FIRE_TIME_COLUMN, from.toInstant().toEpochMilli()), - lt(FIRE_TIME_COLUMN, to.toInstant().toEpochMilli())), - new FindOptions().sort(descending("priority"))) -- .map(document -> documentToJson(document)) -+ .map(MongoDBJobRepository::documentToJson) +@@ -165,7 +166,7 @@ public class MongoDBJobRepository extends BaseReactiveJobRepository implements R .map(jobDetailsMarshaller::unmarshall) -- .emitOn(Infrastructure.getDefaultExecutor()) -- .convert() + .emitOn(Infrastructure.getDefaultExecutor()) + .convert() - .toPublisher()); -+ .emitOn(Infrastructure.getDefaultExecutor()))); ++ .toPublisher())); } - + static JsonObject documentToJson(Document document) { diff --git a/jobs-service/jobs-service-mongodb/src/test/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepositoryExecutionTest.java b/jobs-service/jobs-service-mongodb/src/test/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepositoryExecutionTest.java -index 388a82566..786ca9736 100644 +index bd92b95a5..216300e7a 100644 --- a/jobs-service/jobs-service-mongodb/src/test/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepositoryExecutionTest.java +++ b/jobs-service/jobs-service-mongodb/src/test/java/org/kie/kogito/jobs/service/repository/mongodb/MongoDBJobRepositoryExecutionTest.java -@@ -22,6 +22,7 @@ import java.util.HashMap; +@@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; +import java.util.concurrent.Flow; - + import org.bson.Document; import org.bson.conversions.Bson; -@@ -37,7 +38,6 @@ import org.kie.kogito.jobs.service.model.RecipientInstance; +@@ -39,7 +40,6 @@ import org.kie.kogito.jobs.service.model.RecipientInstance; import org.kie.kogito.jobs.service.repository.marshaller.JobDetailsMarshaller; import org.kie.kogito.timer.impl.PointInTimeTrigger; import org.mockito.ArgumentCaptor; -import org.reactivestreams.Publisher; - + import com.mongodb.client.model.FindOneAndReplaceOptions; import com.mongodb.client.model.ReturnDocument; -@@ -125,7 +125,7 @@ class MongoDBJobRepositoryExecutionTest { +@@ -127,7 +127,7 @@ class MongoDBJobRepositoryExecutionTest { MultiConvert convertMulti = mock(MultiConvert.class); when(multi.emitOn(any())).thenReturn(multi); when(multi.convert()).thenReturn(convertMulti); - Publisher publisher = mock(Publisher.class); + Flow.Publisher publisher = mock(Flow.Publisher.class); when(convertMulti.toPublisher()).thenReturn(publisher); - + completableFuture = mock(CompletableFuture.class); diff --git a/jobs-service/jobs-service-postgresql-common/pom.xml b/jobs-service/jobs-service-postgresql-common/pom.xml -index 87e4dffd7..f7e54b5ba 100644 +index 4f7550a54..448c807c4 100644 --- a/jobs-service/jobs-service-postgresql-common/pom.xml +++ b/jobs-service/jobs-service-postgresql-common/pom.xml -@@ -30,6 +30,10 @@ - <groupId>io.quarkus</groupId> - <artifactId>quarkus-flyway</artifactId> - </dependency> +@@ -34,6 +34,10 @@ + <description>Jobs Service (Timers and Async Jobs) PostgreSQL Common</description> + + <dependencies> + <dependency> + <groupId>io.smallrye.reactive</groupId> + <artifactId>mutiny-zero-flow-adapters</artifactId> @@ -278,67 +271,69 @@ index 87e4dffd7..f7e54b5ba 100644 <groupId>org.kie.kogito</groupId> <artifactId>jobs-service-common</artifactId> diff --git a/jobs-service/jobs-service-postgresql-common/src/main/java/org/kie/kogito/jobs/service/repository/postgresql/PostgreSqlJobRepository.java b/jobs-service/jobs-service-postgresql-common/src/main/java/org/kie/kogito/jobs/service/repository/postgresql/PostgreSqlJobRepository.java -index 9a3f7e94b..82907e9f8 100644 +index 3363ff6fb..5bdd8b495 100644 --- a/jobs-service/jobs-service-postgresql-common/src/main/java/org/kie/kogito/jobs/service/repository/postgresql/PostgreSqlJobRepository.java +++ b/jobs-service/jobs-service-postgresql-common/src/main/java/org/kie/kogito/jobs/service/repository/postgresql/PostgreSqlJobRepository.java -@@ -27,6 +27,7 @@ import java.util.stream.Stream; - import jakarta.enterprise.context.ApplicationScoped; - import jakarta.inject.Inject; - -+import mutiny.zero.flow.adapters.AdaptersToReactiveStreams; - import org.eclipse.microprofile.reactive.streams.operators.PublisherBuilder; - import org.eclipse.microprofile.reactive.streams.operators.ReactiveStreams; - import org.kie.kogito.jobs.service.model.JobDetails; -@@ -139,17 +140,19 @@ public class PostgreSqlJobRepository extends BaseReactiveJobRepository implement +@@ -50,6 +50,7 @@ import io.vertx.mutiny.sqlclient.RowSet; + import io.vertx.mutiny.sqlclient.Tuple; + + import static java.util.stream.Collectors.toList; ++import static mutiny.zero.flow.adapters.AdaptersToReactiveStreams.publisher; + import static org.kie.kogito.jobs.service.utils.DateUtil.DEFAULT_ZONE; + + @ApplicationScoped +@@ -140,18 +141,18 @@ public class PostgreSqlJobRepository extends BaseReactiveJobRepository implement + public PublisherBuilder<JobDetails> findByStatus(JobStatus... status) { String statusQuery = createStatusQuery(status); String query = " WHERE " + statusQuery; - return ReactiveStreams.fromPublisher( -+ AdaptersToReactiveStreams.publisher( +- return ReactiveStreams.fromPublisher( ++ return ReactiveStreams.fromPublisher(publisher( client.preparedQuery("SELECT " + JOB_DETAILS_COLUMNS + " FROM " + JOB_DETAILS_TABLE + query + " ORDER BY priority DESC LIMIT $1").execute(Tuple.of(MAX_ITEMS_QUERY)) .onItem().transformToMulti(rowSet -> Multi.createFrom().iterable(rowSet)) - .onItem().transform(this::from)); + .onItem().transform(this::from))); } - + @Override public PublisherBuilder<JobDetails> findAll() { - return ReactiveStreams.fromPublisher( -+ AdaptersToReactiveStreams.publisher( +- return ReactiveStreams.fromPublisher( ++ return ReactiveStreams.fromPublisher(publisher( client.preparedQuery("SELECT " + JOB_DETAILS_COLUMNS + " FROM " + JOB_DETAILS_TABLE + " LIMIT $1").execute(Tuple.of(MAX_ITEMS_QUERY)) .onItem().transformToMulti(rowSet -> Multi.createFrom().iterable(rowSet)) - .onItem().transform(this::from)); + .onItem().transform(this::from))); } - + @Override -@@ -159,10 +162,11 @@ public class PostgreSqlJobRepository extends BaseReactiveJobRepository implement +@@ -160,11 +161,11 @@ public class PostgreSqlJobRepository extends BaseReactiveJobRepository implement + String timeQuery = createTimeQuery("$2", "$3"); String query = " WHERE " + statusQuery + " AND " + timeQuery; - - return ReactiveStreams.fromPublisher( -+ AdaptersToReactiveStreams.publisher( + +- return ReactiveStreams.fromPublisher( ++ return ReactiveStreams.fromPublisher(publisher( client.preparedQuery("SELECT " + JOB_DETAILS_COLUMNS + " FROM " + JOB_DETAILS_TABLE + query + " ORDER BY priority DESC LIMIT $1") .execute(Tuple.of(MAX_ITEMS_QUERY, from.toOffsetDateTime(), to.toOffsetDateTime())) .onItem().transformToMulti(rowSet -> Multi.createFrom().iterable(rowSet)) - .onItem().transform(this::from)); + .onItem().transform(this::from))); } - + static String createStatusQuery(JobStatus... status) { diff --git a/kogito-apps-build-parent/pom.xml b/kogito-apps-build-parent/pom.xml -index 9ef5fe1c1..29bf514bf 100644 +index 1dcf2e465..d773ad06b 100644 --- a/kogito-apps-build-parent/pom.xml +++ b/kogito-apps-build-parent/pom.xml -@@ -57,6 +57,9 @@ - +@@ -77,6 +77,9 @@ + <!-- Explainability Toolkit version --> <version.explainability-core>1.22.1.Final</version.explainability-core> + + <!-- Mutiny Zero Flow Adapters --> + <version.io.smallrye.reactive.mutiny-zero>1.0.0</version.io.smallrye.reactive.mutiny-zero> </properties> - + <build> -@@ -162,6 +165,11 @@ +@@ -177,6 +180,11 @@ <artifactId>mapstruct</artifactId> <version>${version.org.mapstruct}</version> </dependency> diff --git a/.ci/environments/quarkus-3/patches/0006_data-index-reactive-streams.patch b/.ci/environments/quarkus-3/patches/0006_data-index-reactive-streams.patch index 9868ad86f..50e4cd379 100644 --- a/.ci/environments/quarkus-3/patches/0006_data-index-reactive-streams.patch +++ b/.ci/environments/quarkus-3/patches/0006_data-index-reactive-streams.patch @@ -1,10 +1,10 @@ diff --git a/data-index/data-index-common/pom.xml b/data-index/data-index-common/pom.xml -index b744de020..cea2bd368 100644 +index f25994ad6..72a276de2 100644 --- a/data-index/data-index-common/pom.xml +++ b/data-index/data-index-common/pom.xml -@@ -29,6 +29,10 @@ - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> +@@ -65,6 +65,10 @@ + <groupId>io.quarkus</groupId> + <artifactId>quarkus-oidc</artifactId> </dependency> + <dependency> + <groupId>io.smallrye.reactive</groupId> @@ -14,56 +14,42 @@ index b744de020..cea2bd368 100644 <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> diff --git a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java -index b0d1086ae..b386b0ab2 100644 +index 3738fca0e..af2de1c99 100644 --- a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java +++ b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java -@@ -23,7 +23,7 @@ import java.util.concurrent.CompletableFuture; - import java.util.function.Supplier; - - import jakarta.enterprise.context.ApplicationScoped; -- -+import mutiny.zero.flow.adapters.AdaptersToReactiveStreams; - import jakarta.annotation.PostConstruct; - import org.kie.kogito.index.graphql.AbstractGraphQLSchemaManager; - import org.kie.kogito.index.graphql.query.GraphQLQueryParserRegistry; -@@ -327,11 +327,11 @@ public class GraphQLSchemaManagerImpl extends AbstractGraphQLSchemaManager { +@@ -49,6 +49,7 @@ import graphql.schema.idl.TypeDefinitionRegistry; + + import static java.lang.String.format; + import static java.util.stream.Collectors.toList; ++import static mutiny.zero.flow.adapters.AdaptersToReactiveStreams.publisher; + import static org.kie.kogito.index.json.JsonUtils.getObjectMapper; + + @ApplicationScoped +@@ -184,11 +185,11 @@ public class GraphQLSchemaManagerImpl extends AbstractGraphQLSchemaManager { } - + private DataFetcher<Publisher<ObjectNode>> objectCreatedPublisher(Supplier<Storage> cache) { - return env -> cache.get().objectCreatedListener(); -+ return env -> AdaptersToReactiveStreams.publisher(cache.get().objectCreatedListener()); ++ return env -> publisher(cache.get().objectCreatedListener()); } - + private DataFetcher<Publisher<ObjectNode>> objectUpdatedPublisher(Supplier<Storage> cache) { - return env -> cache.get().objectUpdatedListener(); -+ return env -> AdaptersToReactiveStreams.publisher(cache.get().objectUpdatedListener()); ++ return env -> publisher(cache.get().objectUpdatedListener()); } - + private Supplier<DataIndexServiceException> cacheNotFoundException(String processId) { -@@ -339,11 +339,11 @@ public class GraphQLSchemaManagerImpl extends AbstractGraphQLSchemaManager { +@@ -196,11 +197,11 @@ public class GraphQLSchemaManagerImpl extends AbstractGraphQLSchemaManager { } - + protected DataFetcher<Publisher<ObjectNode>> getDomainModelUpdatedDataFetcher(String processId) { - return env -> Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectUpdatedListener(); -+ return env -> AdaptersToReactiveStreams.publisher(Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectUpdatedListener()); ++ return env -> publisher(Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectUpdatedListener()); } - + protected DataFetcher<Publisher<ObjectNode>> getDomainModelAddedDataFetcher(String processId) { - return env -> Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectCreatedListener(); -+ return env -> AdaptersToReactiveStreams.publisher(Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectCreatedListener()); ++ return env -> publisher(Optional.ofNullable(getCacheService().getDomainModelCache(processId)).orElseThrow(cacheNotFoundException(processId)).objectCreatedListener()); } - + protected DataFetcher<Collection<ObjectNode>> getDomainModelDataFetcher(String processId) { -diff --git a/kogito-apps-build-parent/pom.xml b/kogito-apps-build-parent/pom.xml -index 29bf514bf..f28b1f42c 100644 ---- a/kogito-apps-build-parent/pom.xml -+++ b/kogito-apps-build-parent/pom.xml -@@ -51,7 +51,7 @@ - <version.org.apache.opennlp>1.9.2</version.org.apache.opennlp> - <version.org.apache.commons.csv>1.8</version.org.apache.commons.csv> - <version.org.jredisearch>2.0.0</version.org.jredisearch> -- <version.org.mapstruct>1.4.2.Final</version.org.mapstruct> -+ <version.org.mapstruct>1.5.5.Final</version.org.mapstruct> - <version.org.skyscreamer>1.5.0</version.org.skyscreamer> - <version.com.graphql-java-extended-scalars>19.0</version.com.graphql-java-extended-scalars> - diff --git a/.ci/environments/quarkus-3/patches/0010_quarkus_dev_ui_static_content_routes.patch b/.ci/environments/quarkus-3/patches/0010_quarkus_dev_ui_static_content_routes.patch index ceef9adda..3be721ec8 100644 --- a/.ci/environments/quarkus-3/patches/0010_quarkus_dev_ui_static_content_routes.patch +++ b/.ci/environments/quarkus-3/patches/0010_quarkus_dev_ui_static_content_routes.patch @@ -1,13 +1,26 @@ diff --git a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java -index 58c331a87..ed33f60b1 100644 +index 93b58135d..effce8f5a 100644 --- a/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java +++ b/kogito-quarkus-serverless-workflow-devui-parent/kogito-quarkus-serverless-workflow-devui-deployment/src/main/java/org/kie/kogito/swf/tools/deployment/DevConsoleProcessor.java -@@ -41,7 +41,7 @@ import io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder; +@@ -43,7 +43,7 @@ import io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder; public class DevConsoleProcessor { - + private static final String STATIC_RESOURCES_PATH = "dev-static/"; - private static final String BASE_RELATIVE_URL = "/q/dev/org.kie.kogito.kogito-quarkus-serverless-workflow-devui"; + private static final String BASE_RELATIVE_URL = "/q/dev-v1/org.kie.kogito.kogito-quarkus-serverless-workflow-devui"; private static final String DATA_INDEX_CAPABILITY = "org.kie.kogito.data-index"; - + @BuildStep(onlyIf = IsDevelopment.class) +diff --git a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java +index f2b39a6f5..a5337babd 100644 +--- a/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java ++++ b/runtime-tools-quarkus-extension-parent/runtime-tools-quarkus-extension-deployment/src/main/java/org/kie/kogito/runtime/tools/quarkus/extension/deployment/DevConsoleProcessor.java +@@ -46,7 +46,7 @@ import io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder; + public class DevConsoleProcessor { + + private static final String STATIC_RESOURCES_PATH = "dev-static/"; +- private static final String BASE_RELATIVE_URL = "/q/dev/org.kie.kogito.runtime-tools-quarkus-extension"; ++ private static final String BASE_RELATIVE_URL = "/q/dev-v1/org.kie.kogito.runtime-tools-quarkus-extension"; + private static final String DATA_INDEX_CAPABILITY = "org.kie.kogito.data-index"; + + @SuppressWarnings("unused") --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
