This is an automated email from the ASF dual-hosted git repository.
yamer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new 23ea984ab [incubator-kie-issues-2204] Quarkus upgrade 3.27.2 and
Spring Boot to 3.5.10 (#2298)
23ea984ab is described below
commit 23ea984ab5550af666adf371aead494a19a863c2
Author: Jijo Thomas K <[email protected]>
AuthorDate: Fri Feb 20 03:41:11 2026 +0530
[incubator-kie-issues-2204] Quarkus upgrade 3.27.2 and Spring Boot to
3.5.10 (#2298)
* changes for quarkus upgrade and spring boot
* Quarkus upgrade to 3.27.2 and Spring Boot to 3.5.10
- Upgraded Hibernate ORM from 6.6.11.Final to 7.1.14.Final
- Fixed Hibernate API changes: removed ReturnableType parameter from
ContainsSQLFunction
- Replaced deprecated hibernate-entitymanager with hibernate-core
- Updated Quarkus test annotations: @InjectMock -> @InjectSpy
* docs: remove Hibernate 7 upgrade report
* refactor(test): replace InjectSpy with InjectMock annotation
* refactor(data-index): add ReturnableType parameter to render method
* fix(data-index): exclude GraphQL observation auto-configuration for
dependency compatibility
* fix(springboot): add EntityManagerFactory interface workaround for
Hibernate 7 and Spring ORM 6.2 compatibility
* fix(data-audit): add type conversion for Hibernate 7 native query result
compatibility
* refactor(jobs): remove @Temporal annotations for OffsetDateTime fields in
JPA entities
* refactor(data-index): add comment explaining Hibernate 7 render method
override requirement
* feat(jobs): enable async console logging
* style: reorder imports to follow conventions in trusty service tests
* auto generated: add BPMN and SW process definitions for jobs service
integration tests
* fix(data-audit): add type conversion for Hibernate 7 native query result
compatibility
* refactor(contains-sql-function): remove outdated comment regarding
Hibernate 7 render method
* Revert "auto generated: add BPMN and SW process definitions for jobs
service integration tests"
This reverts commit 7451b83fc4579c408e0f34695a5784dd49d97b9a.
* refactor(data-audit): extract date conversion utility to reduce code
duplication
* refactor(graphql): upgrade graphql-java to 24.3 for compatibility with
Spring Boot 3.5.x and adjust extended-scalars version
refactor(data-audit): utilize DateTimeUtil for cross-version compatibility
in JPADynamicQuery
fix(data-index): set default data fetcher to JsonPropertyDataFetcher for
improved handling of various data sources
chore(application): disable Flyway validation in jobs service to avoid
migration conflicts
* 1. Changed ZoneId.systemDefault() → ZoneId.of("UTC") to match
DateTimeUtil in the same package
2. Extracted private static final JsonPropertyDataFetcher
JSON_PROPERTY_DATA_FETCHER = new JsonPropertyDataFetcher(); and reference it in
the lambda
3. Scoped to dev/test profiles only:
%dev.quarkus.flyway.validate-on-migrate=false
%test.quarkus.flyway.validate-on-migrate=false
* trailing space removed
* Temporal Changes Reverted to handle timestamp (#3)
Co-authored-by: Nithin R Krishnan <[email protected]>
* fixed review comments
* review comment fix: changed the name of beanPostProcessor and added for
data index as well
* Fixed sort in imports
---------
Co-authored-by: Nithin R Krishnan <[email protected]>
Co-authored-by: Nithin from BAMOE CLI <[email protected]>
Co-authored-by: Nithin R Krishnan <[email protected]>
Co-authored-by: jijo.thomas.k <[email protected]>
---
.../kogito-addons-data-audit-jpa-common/pom.xml | 5 +-
.../app/audit/jpa/queries/JPADynamicQuery.java | 7 ++-
.../app/audit/jpa/queries/mapper/DateTimeUtil.java | 55 ++++++++++++++++++++++
.../app/audit/jpa/queries/mapper/PojoMapper.java | 37 ++++++++++++++-
.../mapper/ProcessInstanceStateTOMapper.java | 13 ++---
.../ProcessInstanceVariableHistoryTOMapper.java | 7 ---
.../mapper/UserTaskInstanceAssignmentTOMapper.java | 11 ++---
.../mapper/UserTaskInstanceDeadlineTOMapper.java | 11 ++---
.../SpringbootAuditDataConfiguration.java | 19 ++++++++
.../index/graphql/JsonPropertyDataFetcher.java | 6 ++-
.../src/test/resources/deals-mongo.proto | 22 ++++++---
.../src/test/resources/travels-mongo.proto | 54 +++++++++++++++++++--
.../service/graphql/GraphQLProtoSchemaMapper.java | 7 +++
.../service/graphql/GraphQLSchemaManagerImpl.java | 3 +-
.../storage/DataIndexSpringbootConfiguration.java | 19 ++++++++
.../src/main/resources/application.properties | 1 -
.../index/postgresql/ContainsSQLFunction.java | 2 +-
.../BaseExplainabilityMessagingHandlerIT.java | 2 +-
.../src/main/resources/application.properties | 4 ++
.../kogito-addons-common-embedded-jobs-jpa/pom.xml | 6 ---
.../jpa/SpringbootJPAJobStoreConfiguration.java | 19 ++++++++
kogito-apps-build-parent/pom.xml | 16 +++++--
.../service/common/KeycloakTrustyServiceIT.java | 2 +-
.../service/common/api/DecisionsApiV1IT.java | 2 +-
.../service/common/api/ExecutionsApiV1IT.java | 2 +-
.../service/common/api/ExplainabilityApiV1IT.java | 2 +-
.../incoming/ExplainabilityResultConsumerIT.java | 2 +-
.../messaging/incoming/ModelEventConsumerIT.java | 2 +-
.../messaging/incoming/TraceEventConsumerIT.java | 2 +-
29 files changed, 267 insertions(+), 73 deletions(-)
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/pom.xml
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/pom.xml
index 1ba89cd55..454328656 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/pom.xml
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/pom.xml
@@ -100,9 +100,8 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <version>5.6.12.Final</version>
+ <groupId>org.hibernate.orm</groupId>
+ <artifactId>hibernate-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/JPADynamicQuery.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/JPADynamicQuery.java
index f9edd3411..3c3404fea 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/JPADynamicQuery.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/JPADynamicQuery.java
@@ -18,9 +18,6 @@
*/
package org.kie.kogito.app.audit.jpa.queries;
-import java.sql.Timestamp;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -39,6 +36,8 @@ import graphql.schema.GraphQLScalarType;
import graphql.schema.GraphQLSchemaElement;
import jakarta.persistence.EntityManager;
+import static
org.kie.kogito.app.audit.jpa.queries.mapper.DateTimeUtil.toDateTime;
+
public class JPADynamicQuery extends JPAAbstractQuery<Object> implements
GraphQLSchemaQuery {
private String name;
@@ -112,7 +111,7 @@ public class JPADynamicQuery extends
JPAAbstractQuery<Object> implements GraphQL
if (outputType instanceof GraphQLScalarType) {
GraphQLScalarType scalarType = (GraphQLScalarType) outputType;
if ("DateTime".equals(scalarType.getName())) {
- target = OffsetDateTime.ofInstant(((Timestamp)
source).toInstant(), ZoneId.of("UTC"));
+ target = toDateTime(source);
}
}
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/DateTimeUtil.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/DateTimeUtil.java
new file mode 100644
index 000000000..e803c95b5
--- /dev/null
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/DateTimeUtil.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.app.audit.jpa.queries.mapper;
+
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+
+public final class DateTimeUtil {
+
+ private DateTimeUtil() {
+ }
+
+ /**
+ * Converts various date/time types to OffsetDateTime.
+ * Hibernate 7 returns OffsetDateTime instead of Date for native queries,
+ * so this utility handles multiple input types for compatibility.
+ */
+ public static OffsetDateTime toDateTime(Object value) {
+ if (value == null) {
+ return null;
+ }
+ if (value instanceof OffsetDateTime) {
+ return (OffsetDateTime) value;
+ }
+ if (value instanceof Date) {
+ return OffsetDateTime.ofInstant(((Date) value).toInstant(),
ZoneId.of("UTC"));
+ }
+ if (value instanceof Instant) {
+ return OffsetDateTime.ofInstant((Instant) value, ZoneId.of("UTC"));
+ }
+ if (value instanceof LocalDateTime) {
+ return ((LocalDateTime)
value).atZone(ZoneId.of("UTC")).toOffsetDateTime();
+ }
+ throw new IllegalArgumentException("Cannot convert " +
value.getClass() + " to OffsetDateTime");
+ }
+}
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/PojoMapper.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/PojoMapper.java
index a08df47c7..bf601bf7c 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/PojoMapper.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/PojoMapper.java
@@ -20,7 +20,12 @@ package org.kie.kogito.app.audit.jpa.queries.mapper;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
import org.kie.kogito.app.audit.jpa.queries.DataMapper;
@@ -68,7 +73,24 @@ public class PojoMapper<T> implements DataMapper<T,
Object[]> {
return null;
}
- // Handle BigDecimal -> Integer/Long conversion)
+ if (targetType.isInstance(value)) {
+ return value;
+ }
+
+ // Hibernate 7 returns java.time types instead of java.util.Date
+ if (targetType == Date.class) {
+ if (value instanceof OffsetDateTime) {
+ return Date.from(((OffsetDateTime) value).toInstant());
+ }
+ if (value instanceof Instant) {
+ return Date.from((Instant) value);
+ }
+ if (value instanceof LocalDateTime) {
+ return Date.from(((LocalDateTime)
value).atZone(ZoneId.of("UTC")).toInstant());
+ }
+ }
+
+ // Handle BigDecimal -> Integer/Long conversion
if (value instanceof java.math.BigDecimal bd) {
if (targetType == Integer.class || targetType == int.class) {
return bd.intValue();
@@ -77,6 +99,18 @@ public class PojoMapper<T> implements DataMapper<T,
Object[]> {
}
}
+ // Hibernate 7 may return different numeric types for native query
columns
+ if (targetType == Integer.class || targetType == int.class) {
+ if (value instanceof Number) {
+ return ((Number) value).intValue();
+ }
+ }
+ if (targetType == Long.class || targetType == long.class) {
+ if (value instanceof Number) {
+ return ((Number) value).longValue();
+ }
+ }
+
// Handle CLOB -> String conversion
if (value instanceof java.sql.Clob clob && targetType == String.class)
{
try {
@@ -84,7 +118,6 @@ public class PojoMapper<T> implements DataMapper<T,
Object[]> {
if (length == 0) {
return null;
}
- // Check if length exceeds int max (extremely unlikely for
stack traces)
if (length > Integer.MAX_VALUE) {
LOGGER.warn("CLOB too large ({} bytes), truncating to
Integer.MAX_VALUE", length);
return clob.getSubString(1, Integer.MAX_VALUE);
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceStateTOMapper.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceStateTOMapper.java
index 6b3dd3e79..b1f2f596a 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceStateTOMapper.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceStateTOMapper.java
@@ -18,10 +18,7 @@
*/
package org.kie.kogito.app.audit.jpa.queries.mapper;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import org.kie.kogito.app.audit.graphql.type.ProcessInstanceStateTO;
@@ -29,6 +26,8 @@ import org.kie.kogito.app.audit.jpa.queries.DataMapper;
import graphql.com.google.common.base.Objects;
+import static
org.kie.kogito.app.audit.jpa.queries.mapper.DateTimeUtil.toDateTime;
+
public class ProcessInstanceStateTOMapper implements
DataMapper<ProcessInstanceStateTO, Object[]> {
@Override
public List<ProcessInstanceStateTO> produce(List<Object[]> data) {
@@ -43,7 +42,7 @@ public class ProcessInstanceStateTOMapper implements
DataMapper<ProcessInstanceS
transformedData.add(current);
}
current.setEventId((String) row[0]);
- current.setEventDate(toDateTime((Date) row[1]));
+ current.setEventDate(toDateTime(row[1]));
current.setProcessType((String) row[2]);
current.setProcessId((String) row[3]);
current.setProcessVersion((String) row[4]);
@@ -55,15 +54,11 @@ public class ProcessInstanceStateTOMapper implements
DataMapper<ProcessInstanceS
current.setEventType((String) row[10]);
current.setOutcome((String) row[11]);
current.setState((String) row[12]);
- current.setSlaDueDate(toDateTime((Date) row[13]));
+ current.setSlaDueDate(toDateTime(row[13]));
current.addRole((String) data.get(idx)[14]);
current.setEventUser((String) data.get(idx)[15]);
}
return transformedData;
}
-
- public OffsetDateTime toDateTime(Date date) {
- return (date != null) ? OffsetDateTime.ofInstant(date.toInstant(),
ZoneId.of("UTC")) : null;
- }
}
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceVariableHistoryTOMapper.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceVariableHistoryTOMapper.java
index 77e984f8b..6f3e7cc6b 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceVariableHistoryTOMapper.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/ProcessInstanceVariableHistoryTOMapper.java
@@ -18,10 +18,7 @@
*/
package org.kie.kogito.app.audit.jpa.queries.mapper;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import org.kie.kogito.app.audit.graphql.type.ProcessInstanceVariableHistoryTO;
@@ -58,8 +55,4 @@ public class ProcessInstanceVariableHistoryTOMapper
implements DataMapper<Proces
return transformedData;
}
-
- public OffsetDateTime toDateTime(Date date) {
- return (date != null) ? OffsetDateTime.ofInstant(date.toInstant(),
ZoneId.of("UTC")) : null;
- }
}
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceAssignmentTOMapper.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceAssignmentTOMapper.java
index b740b494e..4055e62de 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceAssignmentTOMapper.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceAssignmentTOMapper.java
@@ -18,10 +18,7 @@
*/
package org.kie.kogito.app.audit.jpa.queries.mapper;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import org.kie.kogito.app.audit.graphql.type.UserTaskInstanceAssignmentTO;
@@ -29,6 +26,8 @@ import org.kie.kogito.app.audit.jpa.queries.DataMapper;
import graphql.com.google.common.base.Objects;
+import static
org.kie.kogito.app.audit.jpa.queries.mapper.DateTimeUtil.toDateTime;
+
public class UserTaskInstanceAssignmentTOMapper implements
DataMapper<UserTaskInstanceAssignmentTO, Object[]> {
@Override
@@ -44,7 +43,7 @@ public class UserTaskInstanceAssignmentTOMapper implements
DataMapper<UserTaskIn
transformedData.add(current);
}
current.setEventId((String) row[0]);
- current.setEventDate(toDateTime((Date) row[1]));
+ current.setEventDate(toDateTime(row[1]));
current.setEventUser((String) row[2]);
current.setUserTaskDefinitionId((String) row[3]);
current.setUserTaskInstanceId((String) row[4]);
@@ -58,8 +57,4 @@ public class UserTaskInstanceAssignmentTOMapper implements
DataMapper<UserTaskIn
return transformedData;
}
-
- public OffsetDateTime toDateTime(Date date) {
- return (date != null) ? OffsetDateTime.ofInstant(date.toInstant(),
ZoneId.of("UTC")) : null;
- }
}
diff --git
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceDeadlineTOMapper.java
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceDeadlineTOMapper.java
index 6974d0907..2b944b581 100644
---
a/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceDeadlineTOMapper.java
+++
b/data-audit/kogito-addons-data-audit-jpa/kogito-addons-data-audit-jpa-common/src/main/java/org/kie/kogito/app/audit/jpa/queries/mapper/UserTaskInstanceDeadlineTOMapper.java
@@ -18,10 +18,7 @@
*/
package org.kie.kogito.app.audit.jpa.queries.mapper;
-import java.time.OffsetDateTime;
-import java.time.ZoneId;
import java.util.ArrayList;
-import java.util.Date;
import java.util.List;
import org.kie.kogito.app.audit.graphql.type.UserTaskInstanceDeadlineTO;
@@ -29,6 +26,8 @@ import org.kie.kogito.app.audit.jpa.queries.DataMapper;
import graphql.com.google.common.base.Objects;
+import static
org.kie.kogito.app.audit.jpa.queries.mapper.DateTimeUtil.toDateTime;
+
public class UserTaskInstanceDeadlineTOMapper implements
DataMapper<UserTaskInstanceDeadlineTO, Object[]> {
@Override
@@ -44,7 +43,7 @@ public class UserTaskInstanceDeadlineTOMapper implements
DataMapper<UserTaskInst
transformedData.add(current);
}
current.setEventId((String) row[0]);
- current.setEventDate(toDateTime((Date) row[1]));
+ current.setEventDate(toDateTime(row[1]));
current.setUserTaskDefinitionId((String) row[2]);
current.setUserTaskInstanceId((String) row[3]);
current.setProcessInstanceId((String) row[4]);
@@ -56,8 +55,4 @@ public class UserTaskInstanceDeadlineTOMapper implements
DataMapper<UserTaskInst
return transformedData;
}
-
- public OffsetDateTime toDateTime(Date date) {
- return (date != null) ? OffsetDateTime.ofInstant(date.toInstant(),
ZoneId.of("UTC")) : null;
- }
}
diff --git
a/data-audit/kogito-addons-data-audit-springboot/src/main/java/org/kie/kogito/app/audit/springboot/SpringbootAuditDataConfiguration.java
b/data-audit/kogito-addons-data-audit-springboot/src/main/java/org/kie/kogito/app/audit/springboot/SpringbootAuditDataConfiguration.java
index f7cbe6c52..da405657f 100644
---
a/data-audit/kogito-addons-data-audit-springboot/src/main/java/org/kie/kogito/app/audit/springboot/SpringbootAuditDataConfiguration.java
+++
b/data-audit/kogito-addons-data-audit-springboot/src/main/java/org/kie/kogito/app/audit/springboot/SpringbootAuditDataConfiguration.java
@@ -18,13 +18,32 @@
*/
package org.kie.kogito.app.audit.springboot;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class SpringbootAuditDataConfiguration {
+ // Hibernate 7 + Spring ORM 6.2 workaround: Hibernate 7's
SessionFactory.getSchemaManager()
+ // returns org.hibernate.relational.SchemaManager, conflicting with JPA
3.2's
+ // EntityManagerFactory.getSchemaManager() returning
jakarta.persistence.SchemaManager.
+ // Force plain JPA interface to avoid JDK Proxy incompatible return type
error.
+ @Bean
+ public static BeanPostProcessor auditDataEmfPostProcessor() {
+ return new BeanPostProcessor() {
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String
beanName) {
+ if (bean instanceof LocalContainerEntityManagerFactoryBean
emfb) {
+
emfb.setEntityManagerFactoryInterface(jakarta.persistence.EntityManagerFactory.class);
+ }
+ return bean;
+ }
+ };
+ }
}
diff --git
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/JsonPropertyDataFetcher.java
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/JsonPropertyDataFetcher.java
index ff21c1085..a1ab034f5 100644
---
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/JsonPropertyDataFetcher.java
+++
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/JsonPropertyDataFetcher.java
@@ -29,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.PropertyDataFetcher;
public class JsonPropertyDataFetcher implements DataFetcher {
@@ -84,6 +85,9 @@ public class JsonPropertyDataFetcher implements DataFetcher {
return null;
}
}
- return null;
+ // Fallback to PropertyDataFetcher for non-JsonNode sources (e.g.
POJOs in PostgreSQL).
+ // This allows JsonPropertyDataFetcher to be used as the default data
fetcher for all
+ // domain types regardless of the storage backend.
+ return PropertyDataFetcher.fetching(property).get(environment);
}
}
diff --git
a/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/deals-mongo.proto
b/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/deals-mongo.proto
index e3417a884..bc5fee843 100644
---
a/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/deals-mongo.proto
+++
b/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/deals-mongo.proto
@@ -23,33 +23,43 @@ import "kogito-types.proto";
option kogito_model = "Deals";
option kogito_id = "deals";
+/* @Indexed */
message Location {
- option java_package = "org.acme.travels";
+ option java_package = "org.acme.deals";
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string city = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string country = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string street = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string zipCode = 4;
}
/* @Indexed */
message Deals {
option java_package = "org.acme.deals";
- /* @Field(index = Index.YES, store = Store.YES) */
+ /* @Field(index = Index.YES, store = Store.YES) @SortableField */
optional string id = 1;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string name = 2;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string review = 3;
optional Product product = 4;
/* @Field(index = Index.NO, store = Store.YES) */
optional org.kie.kogito.index.model.KogitoMetadata metadata = 5;
}
+/* @Indexed */
message Product {
- option java_package = "org.acme.travels";
+ option java_package = "org.acme.deals";
optional Location location = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string name = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string code = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string label = 4;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional double price = 5;
-}
\ No newline at end of file
+}
diff --git
a/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/travels-mongo.proto
b/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/travels-mongo.proto
index 5465eea15..d65b2a438 100644
---
a/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/travels-mongo.proto
+++
b/data-index/data-index-quarkus/data-index-service-mongodb/src/test/resources/travels-mongo.proto
@@ -23,77 +23,121 @@ import "kogito-types.proto";
option kogito_model = "Travels";
option kogito_id = "travels";
+/* @Indexed */
message Address {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string city = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string country = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string street = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string zipCode = 4;
}
+/* @Indexed */
message Flight {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional kogito.Date arrival = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional kogito.Date departure = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string flightNumber = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string gate = 4;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string seat = 5;
}
+/* @Indexed */
message Hotel {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Address address = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string bookingNumber = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string name = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string phone = 4;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string room = 5;
}
+/* @Indexed */
message Traveller {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Address address = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string email = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string firstName = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string lastName = 4;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string nationality = 5;
+ /* @Field(index = Index.YES, store = Store.YES) */
repeated Address locations = 6;
+ /* @Field(index = Index.YES, store = Store.YES) */
repeated string aliases = 7;
}
+/* @Indexed */
message Travels {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Flight flight = 1;
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Hotel hotel = 2;
+ /* @Field(index = Index.YES, store = Store.YES) @SortableField */
optional string id = 3;
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Traveller traveller = 4;
+ /* @Field(index = Index.YES, store = Store.YES) */
optional Trip trip = 5;
+ /* @Field(index = Index.YES, store = Store.YES) */
optional VisaApplication visaApplication = 6;
+ /* @Field(index = Index.YES, store = Store.YES) */
optional org.kie.kogito.index.model.KogitoMetadata metadata = 7;
}
+
/* @Indexed */
message Trip {
option java_package = "org.acme.travels.travels";
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional kogito.Date begin = 1;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string city = 2;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string country = 3;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional kogito.Date end = 4;
- /* @Field(index = Index.NO, store = Store.YES) */
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional bool visaRequired = 5;
}
+/* @Indexed */
message VisaApplication {
option java_package = "org.acme.travels.travels";
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional bool approved = 1;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string city = 2;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string country = 3;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional int32 duration = 4;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string firstName = 5;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string lastName = 6;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string nationality = 7;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional string passportNumber = 8;
+ /* @Field(index = Index.NO, store = Store.YES) @SortableField */
optional int64 id = 9;
}
diff --git
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLProtoSchemaMapper.java
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLProtoSchemaMapper.java
index 7a46cc91f..ed65c0317 100644
---
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLProtoSchemaMapper.java
+++
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLProtoSchemaMapper.java
@@ -25,6 +25,7 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.kie.kogito.index.graphql.GraphQLObjectTypeMapper;
+import org.kie.kogito.index.graphql.JsonPropertyDataFetcher;
import org.kie.kogito.index.graphql.query.GraphQLInputObjectTypeMapper;
import org.kie.kogito.index.graphql.query.GraphQLOrderByTypeMapper;
import org.kie.kogito.index.graphql.query.GraphQLQueryParserRegistry;
@@ -59,6 +60,7 @@ import static
org.kie.kogito.index.graphql.GraphQLObjectTypeMapper.getTypeName;
public class GraphQLProtoSchemaMapper {
private static final Logger LOGGER =
LoggerFactory.getLogger(GraphQLProtoSchemaMapper.class);
+ private static final JsonPropertyDataFetcher JSON_PROPERTY_DATA_FETCHER =
new JsonPropertyDataFetcher();
@Inject
GraphQLSchemaManagerImpl schemaManager;
@@ -118,6 +120,11 @@ public class GraphQLProtoSchemaMapper {
codeBuilder.dataFetcher(coordinates("Query",
rootType.getName()),
schemaManager.getDomainModelDataFetcher(event.getProcessId()));
codeBuilder.dataFetcher(coordinates("Subscription",
rootType.getName() + "Added"),
schemaManager.getDomainModelAddedDataFetcher(event.getProcessId()));
codeBuilder.dataFetcher(coordinates("Subscription",
rootType.getName() + "Updated"),
schemaManager.getDomainModelUpdatedDataFetcher(event.getProcessId()));
+ // graphql-java 24.x LightDataFetcher optimization bypasses
instrumentDataFetcher,
+ // so PropertyDataFetcher is no longer intercepted for
JsonNode-based sources (MongoDB).
+ // Set default data fetcher factory to JsonPropertyDataFetcher
which handles both
+ // JsonNode (MongoDB) and POJO (PostgreSQL) sources.
+ codeBuilder.defaultDataFetcher(env ->
JSON_PROPERTY_DATA_FETCHER);
});
builder.codeRegistry(registry);
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 9dc6caea7..e45a6c962 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
@@ -89,8 +89,9 @@ public class GraphQLSchemaManagerImpl extends
AbstractGraphQLSchemaManager {
addJsonQueries(typeDefinitionRegistry);
loadAdditionalMutations(typeDefinitionRegistry);
+ // Note: ExtendedScalars.Json is registered once below (line ~165),
not here.
+ // graphql-java 24.x strict mode throws StrictModeWiringException on
duplicate scalar registration.
RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
- .scalar(ExtendedScalars.Json)
.type("Query", builder -> {
builder.dataFetcher("ProcessDefinitions",
this::getProcessDefinitionsValues);
builder.dataFetcher("ProcessInstances",
this::getProcessInstancesValues);
diff --git
a/data-index/data-index-springboot/data-index-storage-jpa-springboot/src/main/java/org/kie/kogito/index/jpa/springboot/storage/DataIndexSpringbootConfiguration.java
b/data-index/data-index-springboot/data-index-storage-jpa-springboot/src/main/java/org/kie/kogito/index/jpa/springboot/storage/DataIndexSpringbootConfiguration.java
index 073aa63b3..ebae71158 100644
---
a/data-index/data-index-springboot/data-index-storage-jpa-springboot/src/main/java/org/kie/kogito/index/jpa/springboot/storage/DataIndexSpringbootConfiguration.java
+++
b/data-index/data-index-springboot/data-index-storage-jpa-springboot/src/main/java/org/kie/kogito/index/jpa/springboot/storage/DataIndexSpringbootConfiguration.java
@@ -18,8 +18,11 @@
*/
package org.kie.kogito.index.jpa.springboot.storage;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration(proxyBeanMethods = false)
@@ -27,4 +30,20 @@ import
org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
public class DataIndexSpringbootConfiguration {
+ // Hibernate 7 + Spring ORM 6.2 workaround: Hibernate 7's
SessionFactory.getSchemaManager()
+ // returns org.hibernate.relational.SchemaManager, conflicting with JPA
3.2's
+ // EntityManagerFactory.getSchemaManager() returning
jakarta.persistence.SchemaManager.
+ // Force plain JPA interface to avoid JDK Proxy incompatible return type
error.
+ @Bean
+ public static BeanPostProcessor dataIndexEmfPostProcessor() {
+ return new BeanPostProcessor() {
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String
beanName) {
+ if (bean instanceof LocalContainerEntityManagerFactoryBean
emfb) {
+
emfb.setEntityManagerFactoryInterface(jakarta.persistence.EntityManagerFactory.class);
+ }
+ return bean;
+ }
+ };
+ }
}
diff --git
a/data-index/data-index-springboot/kogito-addons-springboot-data-index-persistence/kogito-addons-springboot-data-index-persistence-jpa-parent/integration-tests-process/src/main/resources/application.properties
b/data-index/data-index-springboot/kogito-addons-springboot-data-index-persistence/kogito-addons-springboot-data-index-persistence-jpa-parent/integration-tests-process/src/main/resources/application.properties
index f3a775322..e5c8061bd 100644
---
a/data-index/data-index-springboot/kogito-addons-springboot-data-index-persistence/kogito-addons-springboot-data-index-persistence-jpa-parent/integration-tests-process/src/main/resources/application.properties
+++
b/data-index/data-index-springboot/kogito-addons-springboot-data-index-persistence/kogito-addons-springboot-data-index-persistence-jpa-parent/integration-tests-process/src/main/resources/application.properties
@@ -25,4 +25,3 @@ kie.flyway.enabled=true
# Disabling Spring-Boot Flyway to avoid unnecessary Data Base initialization
spring.flyway.enabled=false
-
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/ContainsSQLFunction.java
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/ContainsSQLFunction.java
index ef0563b93..8a40313ae 100644
---
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/ContainsSQLFunction.java
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/java/org/kie/kogito/index/postgresql/ContainsSQLFunction.java
@@ -22,7 +22,7 @@ import java.util.Iterator;
import java.util.List;
import org.hibernate.dialect.function.StandardSQLFunction;
-import org.hibernate.query.ReturnableType;
+import org.hibernate.metamodel.model.domain.ReturnableType;
import org.hibernate.sql.ast.SqlAstTranslator;
import org.hibernate.sql.ast.spi.SqlAppender;
import org.hibernate.sql.ast.tree.SqlAstNode;
diff --git
a/explainability/explainability-service-messaging/src/test/java/org/kie/kogito/explainability/messaging/BaseExplainabilityMessagingHandlerIT.java
b/explainability/explainability-service-messaging/src/test/java/org/kie/kogito/explainability/messaging/BaseExplainabilityMessagingHandlerIT.java
index fd8edce95..06463a84f 100644
---
a/explainability/explainability-service-messaging/src/test/java/org/kie/kogito/explainability/messaging/BaseExplainabilityMessagingHandlerIT.java
+++
b/explainability/explainability-service-messaging/src/test/java/org/kie/kogito/explainability/messaging/BaseExplainabilityMessagingHandlerIT.java
@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.cloudevents.CloudEvent;
-import io.quarkus.test.junit.mockito.InjectMock;
+import io.quarkus.test.InjectMock;
import jakarta.inject.Inject;
diff --git
a/jobs-service/jobs-service-inmemory/src/main/resources/application.properties
b/jobs-service/jobs-service-inmemory/src/main/resources/application.properties
index e4e49a8ea..3387b029b 100644
---
a/jobs-service/jobs-service-inmemory/src/main/resources/application.properties
+++
b/jobs-service/jobs-service-inmemory/src/main/resources/application.properties
@@ -20,6 +20,10 @@
#Flyway - It's safe to enable Flyway by default for in-memory storage
quarkus.flyway.migrate-at-start=true
quarkus.flyway.baseline-on-migrate=true
+# Disable Flyway validation in dev/test to avoid conflicts with data-index
migrations applied
+# to the shared dev-services PostgreSQL container by earlier modules in the
build.
+%dev.quarkus.flyway.validate-on-migrate=false
+%test.quarkus.flyway.validate-on-migrate=false
quarkus.flyway.locations=classpath:kie-flyway/db/jobs-service/postgresql
quarkus.datasource.db-kind=postgresql
\ No newline at end of file
diff --git
a/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-common-embedded-jobs-jpa/pom.xml
b/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-common-embedded-jobs-jpa/pom.xml
index 26be02d0e..fd035b5d9 100644
---
a/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-common-embedded-jobs-jpa/pom.xml
+++
b/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-common-embedded-jobs-jpa/pom.xml
@@ -108,11 +108,5 @@
<artifactId>junit-platform-suite</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-entitymanager</artifactId>
- <version>5.6.12.Final</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
diff --git
a/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-springboot-embedded-jobs-jpa/src/main/java/org/kie/kogito/app/jobs/springboot/jpa/SpringbootJPAJobStoreConfiguration.java
b/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-springboot-embedded-jobs-jpa/src/main/java/org/kie/kogito/app/jobs/springboot/jpa/SpringbootJPAJobStoreConfiguration.java
index 87c02669a..409171ff1 100644
---
a/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-springboot-embedded-jobs-jpa/src/main/java/org/kie/kogito/app/jobs/springboot/jpa/SpringbootJPAJobStoreConfiguration.java
+++
b/jobs/kogito-addons-embedded-jobs-jpa/kogito-addons-springboot-embedded-jobs-jpa/src/main/java/org/kie/kogito/app/jobs/springboot/jpa/SpringbootJPAJobStoreConfiguration.java
@@ -18,9 +18,12 @@
*/
package org.kie.kogito.app.jobs.springboot.jpa;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@@ -29,4 +32,20 @@ import
org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableAutoConfiguration
public class SpringbootJPAJobStoreConfiguration {
+ // Hibernate 7 + Spring ORM 6.2 workaround: Hibernate 7's
SessionFactory.getSchemaManager()
+ // returns org.hibernate.relational.SchemaManager, conflicting with JPA
3.2's
+ // EntityManagerFactory.getSchemaManager() returning
jakarta.persistence.SchemaManager.
+ // Force plain JPA interface to avoid JDK Proxy incompatible return type
error.
+ @Bean
+ public static BeanPostProcessor jobStoreEmfPostProcessor() {
+ return new BeanPostProcessor() {
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String
beanName) {
+ if (bean instanceof LocalContainerEntityManagerFactoryBean
emfb) {
+
emfb.setEntityManagerFactoryInterface(jakarta.persistence.EntityManagerFactory.class);
+ }
+ return bean;
+ }
+ };
+ }
}
diff --git a/kogito-apps-build-parent/pom.xml b/kogito-apps-build-parent/pom.xml
index 600c1fecc..d765df9b4 100644
--- a/kogito-apps-build-parent/pom.xml
+++ b/kogito-apps-build-parent/pom.xml
@@ -62,7 +62,7 @@
<!-- OptaPlanner version -->
<version.org.optaplanner>${project.version}</version.org.optaplanner>
- <version.org.hibernate>6.6.11.Final</version.org.hibernate>
+ <version.org.hibernate>7.1.14.Final</version.org.hibernate>
<version.org.apache.opennlp>2.3.2</version.org.apache.opennlp>
<version.org.apache.commons.csv>1.10.0</version.org.apache.commons.csv>
<version.org.jredisearch>2.2.0</version.org.jredisearch>
@@ -70,7 +70,11 @@
<version.org.json>20231013</version.org.json>
<version.org.mapstruct>1.5.5.Final</version.org.mapstruct>
<version.org.skyscreamer>1.5.1</version.org.skyscreamer>
-
<version.com.graphql-java-extended-scalars>22.0</version.com.graphql-java-extended-scalars>
+ <!-- graphql-java upgraded from 22.0 to 24.3 for java-dataloader
3.4.0+ compatibility
+ required by Spring Boot 3.5.x
(DataLoaderOptions.newDefaultOptions()).
+ extended-scalars version must match graphql-java major version.
-->
+ <version.com.graphql-java>24.3</version.com.graphql-java>
+
<version.com.graphql-java-extended-scalars>24.0</version.com.graphql-java-extended-scalars>
<!-- Explainability Toolkit version -->
<version.explainability-core>1.22.1.Final</version.explainability-core>
@@ -138,6 +142,12 @@
<dependencyManagement>
<dependencies>
+ <!-- Override Hibernate version before BOM imports (first-wins) -->
+ <dependency>
+ <groupId>org.hibernate.orm</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version.org.hibernate}</version>
+ </dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus-bom</artifactId>
@@ -207,7 +217,7 @@
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
- <version>${version.com.graphql-java-extended-scalars}</version>
+ <version>${version.com.graphql-java}</version>
</dependency>
<dependency>
<groupId>com.graphql-java</groupId>
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/KeycloakTrustyServiceIT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/KeycloakTrustyServiceIT.java
index 6fb21ddff..4323db522 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/KeycloakTrustyServiceIT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/KeycloakTrustyServiceIT.java
@@ -29,10 +29,10 @@ import
org.kie.kogito.testcontainers.KogitoKeycloakContainer;
import org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource;
import org.kie.kogito.trusty.service.common.models.MatchedExecutionHeaders;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.common.ResourceArg;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import static io.restassured.RestAssured.given;
import static
org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource.KOGITO_OIDC_TENANTS;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/DecisionsApiV1IT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/DecisionsApiV1IT.java
index e4dbb732a..04c5a6f08 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/DecisionsApiV1IT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/DecisionsApiV1IT.java
@@ -47,8 +47,8 @@ import
org.kie.kogito.trusty.storage.api.model.decision.DecisionOutcome;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import io.restassured.filter.log.ResponseLoggingFilter;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExecutionsApiV1IT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExecutionsApiV1IT.java
index 286deb82a..77f08e959 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExecutionsApiV1IT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExecutionsApiV1IT.java
@@ -36,8 +36,8 @@ import
org.kie.kogito.trusty.storage.api.model.decision.DMNModelWithMetadata;
import org.kie.kogito.trusty.storage.api.model.decision.Decision;
import org.mockito.Mockito;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import io.restassured.http.ContentType;
import static io.restassured.RestAssured.given;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExplainabilityApiV1IT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExplainabilityApiV1IT.java
index 96c7b707d..4bae4c02d 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExplainabilityApiV1IT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/api/ExplainabilityApiV1IT.java
@@ -54,8 +54,8 @@ import org.mockito.ArgumentCaptor;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.IntNode;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import io.restassured.filter.log.RequestLoggingFilter;
import io.restassured.filter.log.ResponseLoggingFilter;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ExplainabilityResultConsumerIT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ExplainabilityResultConsumerIT.java
index 62c097be2..aa8d76ad7 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ExplainabilityResultConsumerIT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ExplainabilityResultConsumerIT.java
@@ -33,9 +33,9 @@ import
org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource;
import org.kie.kogito.trusty.service.common.TrustyService;
import io.cloudevents.CloudEvent;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ModelEventConsumerIT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ModelEventConsumerIT.java
index f312e0867..f1dd75f4b 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ModelEventConsumerIT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/ModelEventConsumerIT.java
@@ -28,9 +28,9 @@ import org.kie.kogito.trusty.service.common.TrustyService;
import org.kie.kogito.trusty.service.common.TrustyServiceTestUtils;
import org.kie.kogito.trusty.storage.api.model.decision.DMNModelWithMetadata;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doThrow;
diff --git
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/TraceEventConsumerIT.java
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/TraceEventConsumerIT.java
index fb3f49e88..31904d5d8 100644
---
a/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/TraceEventConsumerIT.java
+++
b/trusty/trusty-service/trusty-service-common/src/test/java/org/kie/kogito/trusty/service/common/messaging/incoming/TraceEventConsumerIT.java
@@ -28,9 +28,9 @@ import org.kie.kogito.trusty.service.common.TrustyService;
import org.kie.kogito.trusty.service.common.TrustyServiceTestUtils;
import org.kie.kogito.trusty.storage.api.model.decision.Decision;
+import io.quarkus.test.InjectMock;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.junit.mockito.InjectMock;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]