This is an automated email from the ASF dual-hosted git repository.
gitgabrio pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 116ad8bada [incubator-kie-issues#2288] - Springboot 4.0.x upgrade
(#4270)
116ad8bada is described below
commit 116ad8bada530c647b7603a0aa645d016dbcdaaa
Author: Nithin R Krishnan <[email protected]>
AuthorDate: Mon May 18 14:05:21 2026 +0530
[incubator-kie-issues#2288] - Springboot 4.0.x upgrade (#4270)
* feat: Upgrade dependencies and adapt to Spring Boot 4
- Updated Spring Framework dependencies to version 7.0.6 and Spring Boot to
4.0.5.
- Bumped Jackson dependencies to version 2.21.2 and Logback to 1.5.32.
- Adjusted Infinispan health check implementation to accommodate changes in
Infinispan 15.x.
- Refactored GlobalObjectMapper to use ObjectMapper directly instead of
Jackson2ObjectMapperBuilderCustomizer.
- Updated test configurations to use MockitoBean for mocking.
- Modified various resource templates to handle HTTP headers correctly.
- Introduced compatibility shims for transitioning to Spring Boot 4,
including CacheAutoConfiguration.
- Increased timeout for parallel persistence tests due to performance
changes in Spring Boot 4.
- Added new properties for Netty version management specific to Spring Boot.
- Updated MongoDB connection properties to support changes in Spring Boot 4.
* ci: trigger build
* Update PostgreSQL dependency version to 42.7.11
* Refactor BOM comments and update Jackson migration notes for Spring Boot
4 compatibility
* Update generatedSourcesDir path to use Gradle's build directory
* Refactor JUnit version management in BOM for clarity and consistency
* Refactor Jackson migration comments to clarify removal plans for Jackson
2 components
* Refactor JUnit version properties for consistency in dependency management
* Refactor MongoDB connection property comments for clarity and accuracy
* Refactor projectBuildOutputDirectory and generatedSourcesDir
initialization for clarity and consistency
* Refactor TIMEOUT duration in PersistenceTest for optimized performance
* ci: retrigger
* netty patch version matching cve
---
kogito-build/kogito-dependencies-bom/pom.xml | 82 ++++++++++++++--------
.../config/GlobalObjectMapperSpringTemplate.java | 28 ++++----
.../RestResourceSignalSpringTemplate.java | 2 +-
.../RestResourceSpringTemplate.java | 2 +-
.../infinispan/health/InfinispanHealthCheck.java | 65 +++++------------
.../SpringbootMongoDBEventPublisherTest.java | 4 +-
.../SpringBootExplainableResourceTest.java | 2 +-
.../KieFlywaySpringbootAutoConfiguration.java | 2 +-
.../SpringBootUserTaskJPAAutoConfiguration.java | 2 +-
.../AddonObjectMapperBuilderCustomizer.java | 18 ++++-
.../AddonObjectMapperBuilderCustomizerTest.java | 10 +--
.../org/kie/kogito/addons/springboot/k8s/App.java | 10 +++
springboot/addons/messaging/implementation/pom.xml | 6 +-
.../spring/SpringKafkaConsumerConfig.java | 4 +-
springboot/bom/pom.xml | 10 +--
.../springboot/MonitoringTest.java | 2 -
.../cache/CacheAutoConfiguration.java} | 17 ++---
springboot/pom.xml | 69 ++++++++++++++++++
.../kogito-processes-spring-boot-starter/pom.xml | 6 ++
.../kogito/process/ProcessesHealthIndicator.java | 4 +-
.../springboot/MongoDBSpringBootTestResource.java | 11 ++-
21 files changed, 226 insertions(+), 130 deletions(-)
diff --git a/kogito-build/kogito-dependencies-bom/pom.xml
b/kogito-build/kogito-dependencies-bom/pom.xml
index 974a6429b6..64a9e60d76 100644
--- a/kogito-build/kogito-dependencies-bom/pom.xml
+++ b/kogito-build/kogito-dependencies-bom/pom.xml
@@ -42,16 +42,16 @@
<!-- this version property is used in plugins but also in dependencies too
-->
<version.io.quarkus>3.27.3</version.io.quarkus>
<version.io.quarkus.quarkus-test>${version.io.quarkus}</version.io.quarkus.quarkus-test>
- <version.org.springframework>6.2.18</version.org.springframework>
- <version.org.springframework.boot>3.5.14</version.org.springframework.boot>
+ <version.org.springframework>7.0.6</version.org.springframework>
+ <version.org.springframework.boot>4.0.5</version.org.springframework.boot>
<version.org.apache.kafka>4.1.2</version.org.apache.kafka>
<version.org.bouncycastle.bc.jdk18on>1.84</version.org.bouncycastle.bc.jdk18on>
<!-- dependencies versions -->
<version.com.networknt>1.0.86</version.com.networknt>
- <version.com.fasterxml.jackson>2.21.1</version.com.fasterxml.jackson>
-
<version.com.fasterxml.jackson.databind>2.21.1</version.com.fasterxml.jackson.databind>
+ <version.com.fasterxml.jackson>2.21.2</version.com.fasterxml.jackson>
+
<version.com.fasterxml.jackson.databind>2.21.2</version.com.fasterxml.jackson.databind>
<version.com.fasterxml.jackson.annotations>2.21</version.com.fasterxml.jackson.annotations>
<version.com.jayway.jsonpath>2.9.0</version.com.jayway.jsonpath>
<version.com.ongres.scram>3.2</version.com.ongres.scram>
@@ -64,7 +64,7 @@
<version.io.quarkiverse.embedded.postgresql>0.8.0</version.io.quarkiverse.embedded.postgresql>
<version.com.github.haifengl.smile>1.5.2</version.com.github.haifengl.smile>
<version.com.github.javaparser>3.27.0</version.com.github.javaparser>
-
<version.com.fasterxml.jackson.datatype>2.21.1</version.com.fasterxml.jackson.datatype>
+
<version.com.fasterxml.jackson.datatype>2.21.2</version.com.fasterxml.jackson.datatype>
<version.com.github.victools>4.37.0</version.com.github.victools>
<version.org.wiremock>3.13.0</version.org.wiremock>
<version.com.google.protobuf>3.25.5</version.com.google.protobuf>
@@ -75,11 +75,13 @@
<version.com.sun.activation>2.0.2</version.com.sun.activation>
<version.javax.inject>2.0.1</version.javax.inject>
<version.org.eclipse.microprofile.openapi>4.0.2</version.org.eclipse.microprofile.openapi>
- <version.ch.qos.logback>1.5.25</version.ch.qos.logback>
+ <version.ch.qos.logback>1.5.32</version.ch.qos.logback>
<version.jakarta.annotation-api>3.0.0</version.jakarta.annotation-api>
<version.jakarta.validation-api>3.1.1</version.jakarta.validation-api>
<version.jakarta.xml.bind-api>4.0.4</version.jakarta.xml.bind-api>
+ <!-- TODO move to per-runtime BOMs after the planned BOM split. Pinned
4.1.x for Quarkus/Vert.x;
+ SB modules need 4.2.x and override per-artifact in
springboot/pom.xml. -->
<version.io.netty>4.1.133.Final</version.io.netty>
<version.io.cloudevents>3.0.0</version.io.cloudevents>
@@ -89,10 +91,10 @@
Kubernetes addons since they use a different version.
-->
<version.io.fabric8.kubernetes-client>7.3.1</version.io.fabric8.kubernetes-client>
- <version.io.micrometer>1.14.12</version.io.micrometer>
+ <version.io.micrometer>1.16.4</version.io.micrometer>
<version.org.flywaydb>11.14.1</version.org.flywaydb>
<version.org.postgresql>42.7.11</version.org.postgresql>
- <version.com.h2>2.3.232</version.com.h2> <!-- Overriding version 2.3.230
to fix https://github.com/h2database/h2database/issues/4079 -->
+ <version.com.h2>2.4.240</version.com.h2>
<version.io.smallrye-open-api>4.0.12</version.io.smallrye-open-api>
<version.io.smallrye-config>3.13.4</version.io.smallrye-config>
<version.org.awaitility>4.3.0</version.org.awaitility>
@@ -109,12 +111,12 @@
<version.io.swagger.parser.v3>2.1.34</version.io.swagger.parser.v3>
<version.io.swagger.core.v3>2.2.38</version.io.swagger.core.v3>
- <version.org.apache.commons>3.18.0</version.org.apache.commons>
+ <version.org.apache.commons>3.19.0</version.org.apache.commons>
<version.commons.io>2.20.0</version.commons.io>
<version.org.graalvm.nativeimage>23.1.2</version.org.graalvm.nativeimage>
- <version.org.infinispan>15.0.21.Final</version.org.infinispan>
+ <version.org.infinispan>15.2.6.Final</version.org.infinispan>
<version.org.infinispan.protostream>5.0.13.Final</version.org.infinispan.protostream>
<version.org.rocksdb>7.10.2</version.org.rocksdb>
@@ -137,12 +139,16 @@
<version.org.assertj>3.27.7</version.org.assertj>
<version.org.glassfish.jaxb>4.0.6</version.org.glassfish.jaxb>
<version.org.json-unit-assertj>2.9.0</version.org.json-unit-assertj>
- <version.org.hamcrest>2.2</version.org.hamcrest> <!-- else old version
coming from Mockito wins and breaks tests -->
- <version.org.junit>4.13.2</version.org.junit>
- <version.org.junit.jupiter>5.13.4</version.org.junit.jupiter>
- <version.org.junit.platform>1.13.4</version.org.junit.platform><!--
otherwise Quarkus brings its own, silently disabling some tests -->
+ <version.org.hamcrest>3.0</version.org.hamcrest> <!-- else old version
coming from Mockito wins and breaks tests -->
+ <!-- JUnit 4 API for legacy test classes that still use org.junit.*
annotations.
+ junit-vintage-engine (part of JUnit 6 below) runs them on the JUnit
Platform. -->
+ <version.junit>4.13.2</version.junit>
+ <!-- JUnit 6: single pin for jupiter + platform + vintage via junit-bom.
-->
+ <version.org.junit>6.0.3</version.org.junit>
<version.org.mockito>5.18.0</version.org.mockito>
- <version.org.testcontainers>2.0.3</version.org.testcontainers>
+ <version.org.testcontainers>2.0.4</version.org.testcontainers>
+ <!-- TODO move to the Spring-specific BOM after the planned BOM split. -->
+ <version.com.github.docker-java>3.7.1</version.com.github.docker-java><!--
align with testcontainers ABI; Quarkus BOM pins older docker-java missing
ImageHistoryCmd -->
<version.org.xmlunit-core>2.10.4</version.org.xmlunit-core>
<version.io.rest-assured>5.5.6</version.io.rest-assured>
@@ -168,9 +174,11 @@
<version.com.google.guava>33.4.8-jre</version.com.google.guava>
<version.apache.commons.commons-compress>1.28.0</version.apache.commons.commons-compress>
- <version.tomcat.embed.core>10.1.54</version.tomcat.embed.core>
- <version.org.hibernate>7.1.14.Final</version.org.hibernate>
- <version.com.graphql-java>24.3</version.com.graphql-java>
+ <version.tomcat.embed.core>11.0.20</version.tomcat.embed.core>
+ <!-- TODO move to the Spring-specific BOM after the planned BOM split.
Pinned 7.1.x because
+ Quarkus's quarkus-hibernate-orm uses
org.hibernate.internal.CoreLogging, removed in 7.2.x. -->
+ <version.org.hibernate>7.1.18.Final</version.org.hibernate>
+ <version.com.graphql-java>25.0</version.com.graphql-java>
</properties>
<dependencyManagement>
@@ -839,7 +847,7 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -851,48 +859,48 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>${version.org.junit}</version>
+ <version>${version.junit}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
- <dependency> <!-- TODO move this dep into surefire-plugin when all
modules are migrated to JUnit 5 -->
+ <dependency> <!-- move this dep into surefire-plugin when all modules
are migrated to JUnit 5 -->
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-engine</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
- <version>${version.org.junit.platform}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
- <version>${version.org.junit.jupiter}</version>
+ <version>${version.org.junit}</version>
<scope>test</scope>
</dependency>
@@ -941,6 +949,12 @@
<version>${version.io.rest-assured}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>io.rest-assured</groupId>
+ <artifactId>json-schema-validator</artifactId>
+ <version>${version.io.rest-assured}</version>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
@@ -1308,6 +1322,18 @@
<version>${version.org.testcontainers}</version>
</dependency>
+ <!-- TODO move to the Spring-specific BOM after the planned BOM split.
-->
+ <dependency>
+ <groupId>com.github.docker-java</groupId>
+ <artifactId>docker-java-api</artifactId>
+ <version>${version.com.github.docker-java}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.github.docker-java</groupId>
+ <artifactId>docker-java-transport-zerodep</artifactId>
+ <version>${version.com.github.docker-java}</version>
+ </dependency>
+
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-kafka</artifactId>
diff --git
a/kogito-codegen-modules/kogito-codegen-core/src/main/resources/class-templates/config/GlobalObjectMapperSpringTemplate.java
b/kogito-codegen-modules/kogito-codegen-core/src/main/resources/class-templates/config/GlobalObjectMapperSpringTemplate.java
index 77d853abd9..befe1953a7 100644
---
a/kogito-codegen-modules/kogito-codegen-core/src/main/resources/class-templates/config/GlobalObjectMapperSpringTemplate.java
+++
b/kogito-codegen-modules/kogito-codegen-core/src/main/resources/class-templates/config/GlobalObjectMapperSpringTemplate.java
@@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import
org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
@@ -33,24 +32,23 @@ import java.util.TimeZone;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+// Jackson 2 @Bean (codegen template — emitted into every Spring Boot kogito
app). Remove together with
+// https://github.com/apache/incubator-kie-drools/issues/6702 (Jackson 3
migration).
@SpringBootConfiguration
public class GlobalObjectMapper {
-
+
@Autowired
ConfigBean configBean;
@Bean
- public Jackson2ObjectMapperBuilderCustomizer customizeGlobalObjectMapper()
{
- return new Jackson2ObjectMapperBuilderCustomizer() {
- @Override
- public void customize(Jackson2ObjectMapperBuilder builder) {
- if (!configBean.failOnEmptyBean()) {
- builder.featuresToDisable
(SerializationFeature.FAIL_ON_EMPTY_BEANS);
- }
-
builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- builder.dateFormat(new
StdDateFormat().withColonInTimeZone(true).withTimeZone(TimeZone.getDefault()));
- builder.modulesToInstall(new JavaTimeModule());
- }
- };
+ public ObjectMapper objectMapper() {
+ Jackson2ObjectMapperBuilder builder =
Jackson2ObjectMapperBuilder.json();
+ if (!configBean.failOnEmptyBean()) {
+
builder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+ }
+
builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ builder.dateFormat(new
StdDateFormat().withColonInTimeZone(true).withTimeZone(TimeZone.getDefault()));
+ builder.modulesToInstall(new JavaTimeModule());
+ return builder.build();
}
-}
\ No newline at end of file
+}
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSignalSpringTemplate.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSignalSpringTemplate.java
index b6ac262dbb..fb697365da 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSignalSpringTemplate.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSignalSpringTemplate.java
@@ -45,7 +45,7 @@ public class $Type$Resource {
this.processService.createProcessInstance(process,
businessKey,
model,
- httpHeaders,
+
httpHeaders.asMultiValueMap(),
httpHeaders.getOrEmpty("X-KOGITO-StartFromNode").stream().findFirst().orElse(null),
"$signalName$",
httpHeaders.getOrEmpty("X-KOGITO-ReferenceId").stream().findFirst().orElse(null),
diff --git
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSpringTemplate.java
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSpringTemplate.java
index e4880ff753..fe227d7538 100644
---
a/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSpringTemplate.java
+++
b/kogito-codegen-modules/kogito-codegen-processes/src/main/resources/class-templates/RestResourceSpringTemplate.java
@@ -75,7 +75,7 @@ public class $Type$Resource {
ProcessInstance<$Type$> pi =
processService.createProcessInstance(process,
businessKey,
Optional.ofNullable(resource).orElse(new $Type$Input()).toModel(),
-
httpHeaders,
+
httpHeaders.asMultiValueMap(),
httpHeaders.getOrEmpty("X-KOGITO-StartFromNode").stream().findFirst().orElse(null),
null,
httpHeaders.getOrEmpty("X-KOGITO-ReferenceId").stream().findFirst().orElse(null),
diff --git
a/quarkus/addons/persistence/infinispan/health/src/main/java/org/kie/kogito/infinispan/health/InfinispanHealthCheck.java
b/quarkus/addons/persistence/infinispan/health/src/main/java/org/kie/kogito/infinispan/health/InfinispanHealthCheck.java
index 803f1ed141..874e0adb43 100644
---
a/quarkus/addons/persistence/infinispan/health/src/main/java/org/kie/kogito/infinispan/health/InfinispanHealthCheck.java
+++
b/quarkus/addons/persistence/infinispan/health/src/main/java/org/kie/kogito/infinispan/health/InfinispanHealthCheck.java
@@ -18,29 +18,24 @@
*/
package org.kie.kogito.infinispan.health;
-import java.net.SocketAddress;
-import java.util.Collections;
import java.util.Optional;
-import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
import org.infinispan.client.hotrod.RemoteCacheManager;
-import org.infinispan.client.hotrod.configuration.Configuration;
-import org.infinispan.client.hotrod.event.impl.ClientListenerNotifier;
-import org.infinispan.client.hotrod.impl.operations.OperationsFactory;
-import org.infinispan.client.hotrod.impl.operations.PingOperation;
-import org.infinispan.client.hotrod.impl.operations.PingResponse;
-import org.infinispan.client.hotrod.impl.transport.netty.ChannelFactory;
import jakarta.enterprise.inject.Instance;
/**
* This is a health check implementation for Infinispan Hot Rod Server, based
on client and
- * {@link RemoteCacheManager}. Basically it executes a ping operation to all
nodes and if all are down it responds as
- * Down, otherwise it responds as Up.
+ * {@link RemoteCacheManager}. Performs a remote roundtrip against the
cluster: if it succeeds the
+ * server responds as Up, otherwise as Down.
*/
+// The "cluster reachable" probe uses RemoteCacheManager#getCacheNames()
because Infinispan's
+// public hotrod API no longer exposes a per-server probe. Restore per-server
probes if Infinispan
+// reintroduces them.
public class InfinispanHealthCheck implements HealthCheck {
private Optional<RemoteCacheManager> cacheManagerOptional;
@@ -54,49 +49,25 @@ public class InfinispanHealthCheck implements HealthCheck {
@Override
public HealthCheckResponse call() {
return cacheManagerOptional.map(cacheManager -> {
-
- final ChannelFactory channelFactory =
cacheManager.getChannelFactory();
- final Configuration configuration =
cacheManager.getConfiguration();
- final ClientListenerNotifier listenerNotifier = new
ClientListenerNotifier(
- cacheManager.getMarshaller(),
- channelFactory,
- configuration);
- final OperationsFactory operationsFactory = new
OperationsFactory(channelFactory,
- listenerNotifier,
- configuration);
-
- return Optional.of(channelFactory
- .getServers()
- .stream()
- .map(server -> invokePingOperation(channelFactory,
operationsFactory, server)
- .thenApply(PingResponse::isSuccess)
- .exceptionally(ex -> false))
- .map(op -> {
- try {
- return op.get(500, TimeUnit.MILLISECONDS);
- } catch (Exception e) {
- return false;
- }
- })
- .allMatch(Boolean.FALSE::equals))
- .map(allDown -> buildResponse(channelFactory, !allDown))
- .orElse(buildResponse(channelFactory, false));
+ boolean up;
+ try {
+ cacheManager.getCacheNames();
+ up = true;
+ } catch (Exception ex) {
+ up = false;
+ }
+ return buildResponse(cacheManager, up);
}).orElse(null);
}
- private HealthCheckResponse buildResponse(ChannelFactory channelFactory,
boolean state) {
+ private HealthCheckResponse buildResponse(RemoteCacheManager cacheManager,
boolean state) {
return HealthCheckResponse.builder()
- .withData("nodes",
Optional.ofNullable(channelFactory.getServers())
- .orElse(Collections.emptyList())
- .stream()
- .map(String::valueOf)
+ .withData("nodes",
Optional.ofNullable(cacheManager.getServers())
+ .map(Stream::of)
+ .orElseGet(Stream::empty)
.collect(Collectors.joining(",")))
.name(state ? "Infinispan is Up" : "Infinispan is Down")
.status(state)
.build();
}
-
- private PingOperation invokePingOperation(ChannelFactory channelFactory,
OperationsFactory operationsFactory, SocketAddress server) {
- return channelFactory.fetchChannelAndInvoke(server,
operationsFactory.newPingOperation(true));
- }
}
diff --git
a/springboot/addons/events/mongodb/src/test/java/org/kie/kogito/events/mongodb/SpringbootMongoDBEventPublisherTest.java
b/springboot/addons/events/mongodb/src/test/java/org/kie/kogito/events/mongodb/SpringbootMongoDBEventPublisherTest.java
index 979411595f..6b96ecbbcd 100644
---
a/springboot/addons/events/mongodb/src/test/java/org/kie/kogito/events/mongodb/SpringbootMongoDBEventPublisherTest.java
+++
b/springboot/addons/events/mongodb/src/test/java/org/kie/kogito/events/mongodb/SpringbootMongoDBEventPublisherTest.java
@@ -24,9 +24,9 @@ import
org.kie.kogito.mongodb.transaction.AbstractTransactionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
-import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
+import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -68,7 +68,7 @@ class SpringbootMongoDBEventPublisherTest {
@Autowired
MongoClient mongoClient;
- @MockBean
+ @MockitoBean
AbstractTransactionManager transactionManager;
@Autowired
diff --git
a/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/SpringBootExplainableResourceTest.java
b/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/SpringBootExplainableResourceTest.java
index b6d49dd9e2..0629f70103 100644
---
a/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/SpringBootExplainableResourceTest.java
+++
b/springboot/addons/explainability/src/test/java/org/kie/kogito/explainability/SpringBootExplainableResourceTest.java
@@ -106,7 +106,7 @@ class SpringBootExplainableResourceTest {
input.getModelIdentifier().setResourceId(unknownwResourceId);
ResponseEntity responseEntity = resource.predict(singletonList(input));
- assertEquals(HttpStatus.BAD_REQUEST.value(),
responseEntity.getStatusCodeValue());
+ assertEquals(HttpStatus.BAD_REQUEST.value(),
responseEntity.getStatusCode().value());
assertEquals("An Exception occurred processing the predict request.
Please see the logs for more details.", responseEntity.getBody());
}
diff --git
a/springboot/addons/flyway/src/main/java/org/kie/flyway/springboot/KieFlywaySpringbootAutoConfiguration.java
b/springboot/addons/flyway/src/main/java/org/kie/flyway/springboot/KieFlywaySpringbootAutoConfiguration.java
index dba3430b91..f79a73013c 100644
---
a/springboot/addons/flyway/src/main/java/org/kie/flyway/springboot/KieFlywaySpringbootAutoConfiguration.java
+++
b/springboot/addons/flyway/src/main/java/org/kie/flyway/springboot/KieFlywaySpringbootAutoConfiguration.java
@@ -26,8 +26,8 @@ import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration;
import
org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
diff --git
a/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootUserTaskJPAAutoConfiguration.java
b/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootUserTaskJPAAutoConfiguration.java
index 95c233937c..f2ec3a0da1 100644
---
a/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootUserTaskJPAAutoConfiguration.java
+++
b/springboot/addons/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/springboot/SpringBootUserTaskJPAAutoConfiguration.java
@@ -21,7 +21,7 @@ package org.jbpm.usertask.jpa.springboot;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.SpringBootConfiguration;
-import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.persistence.autoconfigure.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
diff --git
a/springboot/addons/jobs/src/main/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizer.java
b/springboot/addons/jobs/src/main/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizer.java
index ee70bcbe61..1a264b59e1 100644
---
a/springboot/addons/jobs/src/main/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizer.java
+++
b/springboot/addons/jobs/src/main/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizer.java
@@ -19,15 +19,27 @@
package org.kie.kogito.jobs.management.springboot;
import org.kie.kogito.jobs.service.api.serialization.SerializationUtils;
-import
org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+// Jackson 2 BeanPostProcessor (registers cloud-events descriptors on the
autowired ObjectMapper). Remove
+// together with https://github.com/apache/incubator-kie-drools/issues/6702
(Jackson 3 migration).
@Configuration
public class AddonObjectMapperBuilderCustomizer {
@Bean
- public Jackson2ObjectMapperBuilderCustomizer customizer() {
- return builder ->
builder.postConfigurer(SerializationUtils::registerDescriptors);
+ public static BeanPostProcessor addonObjectMapperPostProcessor() {
+ return new BeanPostProcessor() {
+ @Override
+ public Object postProcessAfterInitialization(Object bean, String
beanName) {
+ if (bean instanceof ObjectMapper) {
+ SerializationUtils.registerDescriptors((ObjectMapper)
bean);
+ }
+ return bean;
+ }
+ };
}
}
diff --git
a/springboot/addons/jobs/src/test/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizerTest.java
b/springboot/addons/jobs/src/test/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizerTest.java
index 980fb17f4a..2e4a1ea0df 100644
---
a/springboot/addons/jobs/src/test/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizerTest.java
+++
b/springboot/addons/jobs/src/test/java/org/kie/kogito/jobs/management/springboot/AddonObjectMapperBuilderCustomizerTest.java
@@ -19,14 +19,16 @@
package org.kie.kogito.jobs.management.springboot;
import org.junit.jupiter.api.Test;
-import
org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import static org.assertj.core.api.Assertions.assertThat;
+// Jackson 2 test fixture for the BeanPostProcessor above. Remove together with
+// https://github.com/apache/incubator-kie-drools/issues/6702 (Jackson 3
migration).
class AddonObjectMapperBuilderCustomizerTest {
@Test
- void customizer() {
- Jackson2ObjectMapperBuilderCustomizer customizer = new
AddonObjectMapperBuilderCustomizer().customizer();
- assertThat(customizer).isNotNull();
+ void postProcessor() {
+ BeanPostProcessor postProcessor =
AddonObjectMapperBuilderCustomizer.addonObjectMapperPostProcessor();
+ assertThat(postProcessor).isNotNull();
}
}
diff --git
a/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
b/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
index 0907c6abe1..f8c68dbee0 100644
---
a/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
+++
b/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
@@ -20,6 +20,9 @@ package org.kie.kogito.addons.springboot.k8s;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
@SpringBootApplication(scanBasePackages =
"org.kie.kogito.addons.springboot.k8s.**")
public class App {
@@ -28,4 +31,11 @@ public class App {
SpringApplication.run(App.class, args);
}
+ // Jackson 2 @Bean (test fixture; production apps get this from the
codegen GlobalObjectMapper).
+ // Remove together with
https://github.com/apache/incubator-kie-drools/issues/6702 (Jackson 3
migration).
+ @Bean
+ ObjectMapper objectMapper() {
+ return new ObjectMapper();
+ }
+
}
diff --git a/springboot/addons/messaging/implementation/pom.xml
b/springboot/addons/messaging/implementation/pom.xml
index a488b3ab1a..3633463814 100644
--- a/springboot/addons/messaging/implementation/pom.xml
+++ b/springboot/addons/messaging/implementation/pom.xml
@@ -40,9 +40,11 @@
<groupId>org.kie</groupId>
<artifactId>kie-addons-messaging</artifactId>
</dependency>
+ <!-- spring-boot-kafka: hosts the Kafka auto-configure classes. TODO move
version pin to the
+ Spring-specific BOM after the planned BOM split. -->
<dependency>
- <groupId>org.springframework.kafka</groupId>
- <artifactId>spring-kafka</artifactId>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-kafka</artifactId>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
diff --git
a/springboot/addons/messaging/implementation/src/main/java/org/kie/kogito/addon/cloudevents/spring/SpringKafkaConsumerConfig.java
b/springboot/addons/messaging/implementation/src/main/java/org/kie/kogito/addon/cloudevents/spring/SpringKafkaConsumerConfig.java
index fee6d22955..69f89d1eb2 100644
---
a/springboot/addons/messaging/implementation/src/main/java/org/kie/kogito/addon/cloudevents/spring/SpringKafkaConsumerConfig.java
+++
b/springboot/addons/messaging/implementation/src/main/java/org/kie/kogito/addon/cloudevents/spring/SpringKafkaConsumerConfig.java
@@ -21,8 +21,8 @@ package org.kie.kogito.addon.cloudevents.spring;
import java.util.Map;
import org.springframework.beans.factory.ObjectProvider;
-import
org.springframework.boot.autoconfigure.kafka.DefaultKafkaConsumerFactoryCustomizer;
-import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
+import
org.springframework.boot.kafka.autoconfigure.DefaultKafkaConsumerFactoryCustomizer;
+import org.springframework.boot.kafka.autoconfigure.KafkaProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
diff --git a/springboot/bom/pom.xml b/springboot/bom/pom.xml
index 4f70bbd5f3..3081d83837 100644
--- a/springboot/bom/pom.xml
+++ b/springboot/bom/pom.xml
@@ -42,10 +42,12 @@
<version.org.apache.groovy>4.0.29</version.org.apache.groovy>
<version.org.spockframework>2.2-groovy-4.0</version.org.spockframework>
<!-- Spring Boot Cloud aligned with Spring Boot Framework version. See:
https://spring.io/projects/spring-cloud -->
- <!--
https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2025.0-Release-Notes
-->
-
<version.org.springframework.cloud>2025.0.1</version.org.springframework.cloud>
- <!-- Aligned with Spring Boot Cloud -->
- <version.io.fabric8>7.3.1</version.io.fabric8>
+ <!-- 2025.1.x (Oakwood) is the first Spring Cloud train compatible with
Spring Boot 4.0.x;
+ 2025.1.1 specifically targets Spring Boot 4.0.1+. -->
+ <!--
https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2025.1-Release-Notes
-->
+
<version.org.springframework.cloud>2025.1.1</version.org.springframework.cloud>
+ <!-- Aligned with Spring Boot Cloud (spring-cloud-kubernetes-fabric8 5.0.1
declares fabric8 7.4.0) -->
+ <version.io.fabric8>7.4.0</version.io.fabric8>
</properties>
<dependencyManagement>
diff --git
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/MonitoringTest.java
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/MonitoringTest.java
index 48d5bb1437..213b5ce081 100644
---
a/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/MonitoringTest.java
+++
b/springboot/integration-tests/integration-tests-springboot-processes-it/src/test/java/org/kie/kogito/integrationtests/springboot/MonitoringTest.java
@@ -25,7 +25,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
import org.kie.kogito.KogitoGAV;
import org.kie.kogito.config.ConfigBean;
import org.springframework.beans.factory.annotation.Autowired;
-import
org.springframework.boot.test.autoconfigure.actuate.observability.AutoConfigureObservability;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@@ -39,7 +38,6 @@ import static org.hamcrest.Matchers.emptyOrNullString;
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = KogitoSpringbootApplication.class)
-@AutoConfigureObservability
public class MonitoringTest extends BaseRestTest {
@Autowired
diff --git
a/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-infinispan/src/test/java/org/springframework/boot/autoconfigure/cache/CacheAutoConfiguration.java
similarity index 67%
copy from
springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
copy to
springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-infinispan/src/test/java/org/springframework/boot/autoconfigure/cache/CacheAutoConfiguration.java
index 0907c6abe1..9fec3e233b 100644
---
a/springboot/addons/kubernetes/src/test/java/org/kie/kogito/addons/springboot/k8s/App.java
+++
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-infinispan/src/test/java/org/springframework/boot/autoconfigure/cache/CacheAutoConfiguration.java
@@ -16,16 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.kie.kogito.addons.springboot.k8s;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication(scanBasePackages =
"org.kie.kogito.addons.springboot.k8s.**")
-public class App {
-
- public static void main(String[] args) {
- SpringApplication.run(App.class, args);
- }
+package org.springframework.boot.autoconfigure.cache;
+// Empty stub at the legacy FQN. infinispan-spring-boot3-starter-remote 15.2.6
declares
+// @AutoConfigureBefore(CacheAutoConfiguration.class) pointing here; the real
class lives at
+// org.springframework.boot.cache.autoconfigure.CacheAutoConfiguration. Drop
when the Infinispan
+// starter targets that FQN.
+public class CacheAutoConfiguration {
}
diff --git a/springboot/pom.xml b/springboot/pom.xml
index 3735936fe2..089011bc32 100644
--- a/springboot/pom.xml
+++ b/springboot/pom.xml
@@ -34,6 +34,75 @@
<name>Kogito :: Spring Boot</name>
<packaging>pom</packaging>
+ <properties>
+ <!-- Override Netty to 4.2.x for SB modules. The shared
kogito-dependencies-bom pins 4.1.x for
+ Quarkus/Vert.x, but Infinispan 15.x's Hot Rod client needs Netty 4.2
(uses io.netty.channel.IoHandle).
+ Per-artifact pins below are required because BOM-imported entries
cannot override the parent-
+ imported BOM's explicit versions. Add any new netty-* artifacts SB
pulls in transitively here too.
+ TODO drop this block after the planned BOM split lets each runtime
own its own Netty pin. -->
+ <version.io.netty>4.2.12.Final</version.io.netty>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-buffer</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-dns</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-http</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-http2</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-socks</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-common</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-handler</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-handler-proxy</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-resolver</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-resolver-dns</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-transport</artifactId>
+ <version>${version.io.netty}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
<modules>
<module>bom</module>
<module>addons</module>
diff --git a/springboot/starters/kogito-processes-spring-boot-starter/pom.xml
b/springboot/starters/kogito-processes-spring-boot-starter/pom.xml
index 33ac657e28..fa09f7bfc0 100644
--- a/springboot/starters/kogito-processes-spring-boot-starter/pom.xml
+++ b/springboot/starters/kogito-processes-spring-boot-starter/pom.xml
@@ -48,6 +48,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
</dependency>
+ <!-- spring-boot-health: hosts the actuator health SPI. TODO move version
pin to the
+ Spring-specific BOM after the planned BOM split. -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-health</artifactId>
+ </dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-rest-workitem</artifactId>
diff --git
a/springboot/starters/kogito-processes-spring-boot-starter/src/main/java/org/kie/kogito/process/ProcessesHealthIndicator.java
b/springboot/starters/kogito-processes-spring-boot-starter/src/main/java/org/kie/kogito/process/ProcessesHealthIndicator.java
index 9a4a5248f5..ad0ecf2e68 100644
---
a/springboot/starters/kogito-processes-spring-boot-starter/src/main/java/org/kie/kogito/process/ProcessesHealthIndicator.java
+++
b/springboot/starters/kogito-processes-spring-boot-starter/src/main/java/org/kie/kogito/process/ProcessesHealthIndicator.java
@@ -22,8 +22,8 @@ import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.actuate.health.Health;
-import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.health.contributor.Health;
+import org.springframework.boot.health.contributor.HealthIndicator;
import org.springframework.stereotype.Component;
@Component
diff --git
a/springboot/test/src/main/java/org/kie/kogito/testcontainers/springboot/MongoDBSpringBootTestResource.java
b/springboot/test/src/main/java/org/kie/kogito/testcontainers/springboot/MongoDBSpringBootTestResource.java
index f4550c52cc..b157504346 100644
---
a/springboot/test/src/main/java/org/kie/kogito/testcontainers/springboot/MongoDBSpringBootTestResource.java
+++
b/springboot/test/src/main/java/org/kie/kogito/testcontainers/springboot/MongoDBSpringBootTestResource.java
@@ -18,13 +18,12 @@
*/
package org.kie.kogito.testcontainers.springboot;
+import java.util.HashMap;
import java.util.Map;
import org.kie.kogito.test.resources.ConditionalSpringBootTestResource;
import org.kie.kogito.testcontainers.KogitoMongoDBContainer;
-import static java.util.Collections.singletonMap;
-
/**
* MongoDB spring boot resource that works within the test lifecycle.
*
@@ -32,6 +31,8 @@ import static java.util.Collections.singletonMap;
public class MongoDBSpringBootTestResource extends
ConditionalSpringBootTestResource<KogitoMongoDBContainer> {
public static final String MONGODB_CONNECTION_PROPERTY =
"spring.data.mongodb.uri";
+ // MongoClient and Spring Data MongoDB read different prefixes; set both.
+ public static final String MONGODB_BASIC_CONNECTION_PROPERTY =
"spring.mongodb.uri";
public MongoDBSpringBootTestResource() {
super(new KogitoMongoDBContainer());
@@ -39,7 +40,11 @@ public class MongoDBSpringBootTestResource extends
ConditionalSpringBootTestReso
@Override
protected Map<String, String> getProperties() {
- return singletonMap(MONGODB_CONNECTION_PROPERTY,
getTestResource().getReplicaSetUrl());
+ Map<String, String> props = new HashMap<>();
+ String uri = getTestResource().getReplicaSetUrl();
+ props.put(MONGODB_CONNECTION_PROPERTY, uri);
+ props.put(MONGODB_BASIC_CONNECTION_PROPERTY, uri);
+ return props;
}
public static class Conditional extends MongoDBSpringBootTestResource {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]