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-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 0a498880e1 [incubator-kie-issues-2204] Quarkus upgrade 3.27 and Spring
Boot to 3.5.10 (#4178)
0a498880e1 is described below
commit 0a498880e155af60fdee150a0109420874a1db9b
Author: Jijo Thomas K <[email protected]>
AuthorDate: Fri Feb 20 03:40:31 2026 +0530
[incubator-kie-issues-2204] Quarkus upgrade 3.27 and Spring Boot to 3.5.10
(#4178)
* Quarkus upgrade 3.27 and Spring Boot to 3.5.10
* fix for adding beanpostprocessor in userTask as well
* removed comments as per review comments
* added dependencies for jpa
* [Fix apache/incubator-kie-issues#2254] Sorting live reload test (#2)
---------
Co-authored-by: Francisco Javier Tirado Sarti
<[email protected]>
---
.../jpa/mapper/TaskInputsEntityMapper.java | 1 -
.../jpa/mapper/TaskMetadataEntityMapper.java | 2 +-
.../jpa/mapper/TaskOutputsEntityMapper.java | 2 +-
addons/common/persistence/postgresql/pom.xml | 11 +--
kogito-build/kogito-build-no-bom-parent/pom.xml | 4 +-
kogito-build/kogito-dependencies-bom/pom.xml | 97 +++++++++++----------
.../executor/MockKafkaEventEmitterFactory.java | 3 +-
.../executor/MockKafkaEventEmitterFactory.java | 3 +-
.../workflow/asyncapi/AsyncAPIInfoConverter.java | 58 ++++++++++---
quarkus/addons/events/rules/deployment/pom.xml | 4 -
.../quarkus/KieQuarkusFlywayNamedModuleConfig.java | 2 -
quarkus/addons/grpc/deployment/pom.xml | 4 +
quarkus/addons/jwt-parser/deployment/pom.xml | 3 -
quarkus/addons/jwt-parser/runtime/pom.xml | 3 -
.../eventing/deployment/EventingConfiguration.java | 9 ++
.../eventing/deployment/SinkConfiguration.java | 2 -
.../customfunctions/it/KnativeServingAddonIT.java | 14 ++--
.../quarkus/kubernetes/ConfigValueExpanderIT.java | 3 +-
.../k8s/KnativeRouteEndpointDiscoveryTest.java | 6 +-
.../KubeDiscoveryConfigCacheUpdaterTest.java | 4 +-
quarkus/addons/kubernetes/test-utils/pom.xml | 6 +-
.../quarkus/k8s/test/utils/KubeTestUtils.java | 8 +-
.../utils/KubernetesMockServerTestResource.java | 46 ++++++----
.../utils/OpenShiftMockServerTestResource.java | 43 ++++++++--
quarkus/addons/opentelemetry/deployment/pom.xml | 3 -
quarkus/addons/opentelemetry/runtime/pom.xml | 3 -
.../opentelemetry/config/SonataFlowOtelConfig.java | 27 ++++++
.../persistence/kafka/KafkaProcessInstancesIT.java | 9 ++
.../process-instance-migration/runtime/pom.xml | 4 -
quarkus/addons/process-management/runtime/pom.xml | 1 -
quarkus/addons/rest-exception-handler/pom.xml | 1 -
.../quarkus/deployment/KogitoBuildTimeConfig.java | 12 +--
.../KogitoDevServicesBuildTimeConfig.java | 28 +++----
.../deployment/KogitoDevServicesProcessor.java | 19 +++--
quarkus/bom/pom.xml | 4 +-
.../quarkus/config/KogitoAuthRuntimeConfig.java | 2 -
.../config/KogitoEventingRuntimeConfig.java | 2 -
.../ServerlessWorkflowAssetsProcessor.java | 18 ++++
.../src/main/resources/specs/asyncAPI.yaml | 45 ++++++----
.../livereload/LiveReloadProcessorTest.java | 36 ++++++--
.../src/main/resources/specs/asyncAPI.yaml | 45 ++++++----
.../src/main/resources/specs/callbackResults.yaml | 98 ++++++++++++++--------
.../KogitoServerlessWorkflowBuildTimeConfig.java | 2 -
.../config/KogitoDevServicesBuildTimeConfig.java | 2 -
.../config/KogitoPersistenceBuildTimeConfig.java | 2 -
.../config/KogitoPersistenceRuntimeConfig.java | 2 -
.../addons/jbpm-usertask-storage-jpa/pom.xml | 4 +
.../SpringBootUserTaskJPAAutoConfiguration.java | 16 ++++
springboot/bom/pom.xml | 6 +-
.../pom.xml | 2 +-
50 files changed, 472 insertions(+), 259 deletions(-)
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
index d088af53a3..a643f51519 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskInputsEntityMapper.java
@@ -64,7 +64,6 @@ public class TaskInputsEntityMapper implements EntityMapper {
inputEntity.setValue(JSONUtils.valueToString(value).getBytes(StandardCharsets.UTF_8));
inputEntity.setJavaType(value.getClass().getName());
}
- repository.persist(inputEntity);
});
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
index 18fa39dc2c..79f148c0c7 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskMetadataEntityMapper.java
@@ -63,7 +63,7 @@ public class TaskMetadataEntityMapper implements EntityMapper
{
metadataEntity.setValue(JSONUtils.valueToString(value));
metadataEntity.setJavaType(value.getClass().getName());
}
- repository.persist(metadataEntity);
+
});
}
diff --git
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
index 131de03617..93fa6849e7 100644
---
a/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
+++
b/addons/common/jbpm-usertask-storage-jpa/src/main/java/org/jbpm/usertask/jpa/mapper/TaskOutputsEntityMapper.java
@@ -64,7 +64,7 @@ public class TaskOutputsEntityMapper implements EntityMapper {
outputEntity.setValue(JSONUtils.valueToString(value).getBytes(StandardCharsets.UTF_8));
outputEntity.setJavaType(value.getClass().getName());
}
- repository.persist(outputEntity);
+
});
}
diff --git a/addons/common/persistence/postgresql/pom.xml
b/addons/common/persistence/postgresql/pom.xml
index f486ea71f8..8b29f04f58 100644
--- a/addons/common/persistence/postgresql/pom.xml
+++ b/addons/common/persistence/postgresql/pom.xml
@@ -53,6 +53,12 @@
<groupId>io.vertx</groupId>
<artifactId>vertx-pg-client</artifactId>
</dependency>
+ <!-- Required at runtime for SASL authentication; Vert.x declares it as
optional -->
+ <dependency>
+ <groupId>com.ongres.scram</groupId>
+ <artifactId>scram-client</artifactId>
+ <scope>runtime</scope>
+ </dependency>
<!-- test dependencies -->
<dependency>
@@ -101,11 +107,6 @@
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>com.ongres.scram</groupId>
- <artifactId>client</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
diff --git a/kogito-build/kogito-build-no-bom-parent/pom.xml
b/kogito-build/kogito-build-no-bom-parent/pom.xml
index 9e81c2024c..4cb8a0ccba 100644
--- a/kogito-build/kogito-build-no-bom-parent/pom.xml
+++ b/kogito-build/kogito-build-no-bom-parent/pom.xml
@@ -106,14 +106,12 @@
<version.rpkgtests.maven.plugin>1.0.0</version.rpkgtests.maven.plugin>
<version.resources.plugin>3.1.0</version.resources.plugin>
<version.site.plugin>3.7.1</version.site.plugin>
- <version.shade.plugin>3.0.0</version.shade.plugin>
+ <version.shade.plugin>3.3.0</version.shade.plugin>
<version.sonar.plugin>3.6.1.1688</version.sonar.plugin>
<version.source.plugin>3.2.1</version.source.plugin>
<version.surefire.plugin>3.3.1</version.surefire.plugin> <!-- minimum
required by JUnit 5 -->
<version.surefire.report.plugin>3.1.2</version.surefire.report.plugin>
<version.taglist.plugin>2.4</version.taglist.plugin>
- <!-- Versions plugin should stay on version 2.5
- until https://github.com/mojohaus/versions-maven-plugin/issues/312 is
fixed -->
<version.versions.plugin>2.5</version.versions.plugin>
<version.org.jsonschema2pojo-maven-plugin>1.0.1</version.org.jsonschema2pojo-maven-plugin>
<version.org.codehaus.gmavenplus.plugin>1.5</version.org.codehaus.gmavenplus.plugin>
diff --git a/kogito-build/kogito-dependencies-bom/pom.xml
b/kogito-build/kogito-dependencies-bom/pom.xml
index 90768e859f..0093d461ee 100644
--- a/kogito-build/kogito-dependencies-bom/pom.xml
+++ b/kogito-build/kogito-dependencies-bom/pom.xml
@@ -40,46 +40,46 @@
<!-- End of various transitive overrides. -->
<!-- this version property is used in plugins but also in dependencies too
-->
- <version.io.quarkus>3.20.3</version.io.quarkus>
+ <version.io.quarkus>3.27.2</version.io.quarkus>
<version.io.quarkus.quarkus-test>${version.io.quarkus}</version.io.quarkus.quarkus-test>
- <version.org.springframework>6.2.12</version.org.springframework>
- <version.org.springframework.boot>3.4.11</version.org.springframework.boot>
- <version.org.apache.kafka>3.9.1</version.org.apache.kafka>
+ <version.org.springframework>6.2.15</version.org.springframework>
+ <version.org.springframework.boot>3.5.10</version.org.springframework.boot>
+ <version.org.apache.kafka>4.0.0</version.org.apache.kafka>
-
<version.org.bouncycastle.bc.jdk18on>1.81</version.org.bouncycastle.bc.jdk18on>
+
<version.org.bouncycastle.bc.jdk18on>1.82</version.org.bouncycastle.bc.jdk18on>
<!-- dependencies versions -->
<version.com.networknt>1.0.86</version.com.networknt>
- <version.com.fasterxml.jackson>2.18.4</version.com.fasterxml.jackson>
-
<version.com.fasterxml.jackson.databind>2.18.4</version.com.fasterxml.jackson.databind>
+ <version.com.fasterxml.jackson>2.19.2</version.com.fasterxml.jackson>
+
<version.com.fasterxml.jackson.databind>2.19.2</version.com.fasterxml.jackson.databind>
<version.com.jayway.jsonpath>2.9.0</version.com.jayway.jsonpath>
- <version.com.ongres.scram>2.1</version.com.ongres.scram>
+ <version.com.ongres.scram>3.2</version.com.ongres.scram>
<version.net.minidev.jsonsmart>2.4.10</version.net.minidev.jsonsmart>
<version.net.thisptr.jackson-jq>1.0.0-preview.20240207</version.net.thisptr.jackson-jq>
-
<version.io.quarkiverse.jackson-jq>2.2.0</version.io.quarkiverse.jackson-jq>
+
<version.io.quarkiverse.jackson-jq>2.4.0</version.io.quarkiverse.jackson-jq>
<version.io.quarkiverse.openapi.generator>2.11.0-lts</version.io.quarkiverse.openapi.generator>
- <version.io.quarkiverse.asyncapi>0.3.0</version.io.quarkiverse.asyncapi>
+ <version.io.quarkiverse.asyncapi>1.0.5</version.io.quarkiverse.asyncapi>
<version.io.quarkiverse.reactivemessaging.http>2.5.0-lts</version.io.quarkiverse.reactivemessaging.http>
<version.io.quarkiverse.embedded.postgresql>0.7.2</version.io.quarkiverse.embedded.postgresql>
<version.com.github.haifengl.smile>1.5.2</version.com.github.haifengl.smile>
- <version.com.github.javaparser>3.26.4</version.com.github.javaparser>
-
<version.com.fasterxml.jackson.datatype>2.18.2</version.com.fasterxml.jackson.datatype>
+ <version.com.github.javaparser>3.27.0</version.com.github.javaparser>
+
<version.com.fasterxml.jackson.datatype>2.19.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>
<!-- We don't use gson directly. This is just to align versions of
transitive dependencies -->
- <version.com.google.gson>2.10.1</version.com.google.gson>
+ <version.com.google.gson>2.13.2</version.com.google.gson>
<!-- currently required for integration test only -->
<version.com.sun.xml.bind.core>4.0.5</version.com.sun.xml.bind.core>
- <version.com.sun.activation>2.0.1</version.com.sun.activation>
+ <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.jakarta.annotation-api>2.1.1</version.jakarta.annotation-api>
- <version.jakarta.validation-api>3.0.2</version.jakarta.validation-api>
+ <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>
- <version.io.netty>4.1.128.Final</version.io.netty>
+ <version.io.netty>4.1.130.Final</version.io.netty>
<version.io.cloudevents>3.0.0</version.io.cloudevents>
<!--
@@ -87,31 +87,30 @@
Don't add as a management dependency because it will break SpringBoot and
Quarkus
Kubernetes addons since they use a different version.
-->
-
<version.io.fabric8.kubernetes-client>7.1.0</version.io.fabric8.kubernetes-client>
-
<version.io.fabric8.openshift-mock>6.13.5</version.io.fabric8.openshift-mock>
+
<version.io.fabric8.kubernetes-client>7.3.1</version.io.fabric8.kubernetes-client>
<version.io.micrometer>1.14.12</version.io.micrometer>
<version.org.flywaydb>11.14.1</version.org.flywaydb>
<version.org.postgresql>42.7.8</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.io.serverlessworkflow>4.1.0.Final</version.io.serverlessworkflow>
<version.io.smallrye-open-api>4.0.12</version.io.smallrye-open-api>
- <version.io.smallrye-config>3.11.4</version.io.smallrye-config>
- <version.org.awaitility>4.2.2</version.org.awaitility>
+ <version.io.smallrye-config>3.13.4</version.io.smallrye-config>
+ <version.org.awaitility>4.3.0</version.org.awaitility>
<version.com.squareup.okhttp3>4.12.0</version.com.squareup.okhttp3>
-
<version.io.smallrye.reactive.mutiny-vertx-web-client>3.18.1</version.io.smallrye.reactive.mutiny-vertx-web-client>
+
<version.io.smallrye.reactive.mutiny-vertx-web-client>3.21.3</version.io.smallrye.reactive.mutiny-vertx-web-client>
- <version.io.vertx>4.5.22</version.io.vertx>
+ <version.io.vertx>4.5.23</version.io.vertx>
<version.io.grpc>1.76.0</version.io.grpc>
- <version.io.quarkus.camel>3.20.2</version.io.quarkus.camel>
+ <version.io.quarkus.camel>3.27.2</version.io.quarkus.camel>
<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.commons.io>2.19.0</version.commons.io>
+ <version.commons.io>2.20.0</version.commons.io>
<version.org.graalvm.nativeimage>23.1.2</version.org.graalvm.nativeimage>
@@ -121,7 +120,7 @@
<version.org.rocksdb>7.10.2</version.org.rocksdb>
<!-- consider migrating to 3.x JDK 9:
https://jakarta.ee/specifications/restful-ws/ -->
<version.jakarta.ws.rs>3.1.0</version.jakarta.ws.rs>
- <version.jakarta.persistence-api>3.1.0</version.jakarta.persistence-api>
+ <version.jakarta.persistence-api>3.2.0</version.jakarta.persistence-api>
<version.org.jboss.resteasy>6.2.12.Final</version.org.jboss.resteasy>
<version.org.keycloak>26.1.0</version.org.keycloak>
@@ -131,31 +130,32 @@
<version.org.mongo-image>5.0.31</version.org.mongo-image>
<version.org.mozilla.rhino>1.8.1</version.org.mozilla.rhino>
<version.org.redis>2.0.4</version.org.redis>
- <version.org.postgres>15.9-alpine3.20</version.org.postgres>
+ <!-- PostgreSQL 16.8+ required for SASL authentication protocol -->
+ <version.org.postgres>16.8-alpine3.21</version.org.postgres>
<!-- we align to version used by quarkus -->
- <version.org.apache.avro>1.12.0</version.org.apache.avro>
+ <version.org.apache.avro>1.12.1</version.org.apache.avro>
<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.12.2</version.org.junit.jupiter>
- <version.org.junit.platform>1.12.2</version.org.junit.platform><!--
otherwise Quarkus brings its own, silently disabling some tests -->
- <version.org.mockito>5.17.0</version.org.mockito>
+ <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.mockito>5.18.0</version.org.mockito>
<version.org.testcontainers>2.0.3</version.org.testcontainers>
<version.org.xmlunit-core>2.10.4</version.org.xmlunit-core>
<version.io.rest-assured>5.5.6</version.io.rest-assured>
- <version.net.byte-buddy>1.15.11</version.net.byte-buddy>
+ <version.net.byte-buddy>1.17.6</version.net.byte-buddy>
<version.org.mvel>2.5.2.Final</version.org.mvel>
<version.org.reactivestreams>1.0.4</version.org.reactivestreams>
<version.org.reflections>0.10.2</version.org.reflections>
- <version.org.slf4j>2.0.6</version.org.slf4j>
+ <version.org.slf4j>2.0.17</version.org.slf4j>
<version.maven>3.9.11</version.maven>
<version.maven.project>2.2.1</version.maven.project>
- <version.maven.plugin>3.7.1</version.maven.plugin>
+ <version.maven.plugin>3.15.1</version.maven.plugin>
<version.maven.invoker>3.2.0</version.maven.invoker>
<version.maven.plugin.testing.harness>4.0.0-alpha-2</version.maven.plugin.testing.harness>
<version.plexus>2.1.0</version.plexus>
@@ -165,11 +165,13 @@
<version.com.github.stephenc.jcip>1.0-1</version.com.github.stephenc.jcip>
<version.black.ninia>4.2.0</version.black.ninia>
<version.com.google.collections>1.0</version.com.google.collections>
- <version.com.google.guava>33.0.0-jre</version.com.google.guava>
-
<version.apache.commons.commons-compress>1.27.1</version.apache.commons.commons-compress>
+ <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.48</version.tomcat.embed.core>
- <version.org.lz4.java>1.8.1</version.org.lz4.java>
+ <version.at.yawk.lz4.java>1.10.1</version.at.yawk.lz4.java> <!-- Upgraded
for CVE fix (The library has moved from org.lz4:lz4-java to
at.yawk.lz4:lz4-java )-->
+ <version.org.hibernate>7.1.14.Final</version.org.hibernate>
+
</properties>
<dependencyManagement>
@@ -182,9 +184,9 @@
<version>${version.angus.mail}</version>
</dependency>
<dependency>
- <groupId>org.lz4</groupId>
+ <groupId>at.yawk.lz4</groupId>
<artifactId>lz4-java</artifactId>
- <version>${version.org.lz4.java}</version>
+ <version>${version.at.yawk.lz4.java}</version>
</dependency>
<!-- End of various transitive overrides. -->
@@ -827,13 +829,6 @@
<version>${version.io.fabric8.kubernetes-client}</version>
</dependency>
- <!-- fabric8 - openshift mock server -->
- <dependency>
- <groupId>io.fabric8</groupId>
- <artifactId>openshift-server-mock</artifactId>
- <version>${version.io.fabric8.openshift-mock}</version>
- </dependency>
-
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
@@ -978,11 +973,11 @@
<version>${version.org.wiremock}</version>
<scope>test</scope>
</dependency>
+ <!-- SCRAM authentication for PostgreSQL 16+; required by Vert.x
reactive pg-client -->
<dependency>
<groupId>com.ongres.scram</groupId>
- <artifactId>client</artifactId>
+ <artifactId>scram-client</artifactId>
<version>${version.com.ongres.scram}</version>
- <scope>test</scope>
</dependency>
<dependency>
@@ -1356,7 +1351,11 @@
<artifactId>testcontainers-toxiproxy</artifactId>
<version>${version.org.testcontainers}</version>
</dependency>
-
+ <dependency>
+ <groupId>org.hibernate.orm</groupId>
+ <artifactId>hibernate-core</artifactId>
+ <version>${version.org.hibernate}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-kafka/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-kafka/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
index dff90d95cc..9858217b8c 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-kafka/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-kafka/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
@@ -28,7 +28,8 @@ import io.cloudevents.kafka.CloudEventSerializer;
public class MockKafkaEventEmitterFactory extends KafkaEventEmitterFactory {
- public static MockProducer<byte[], CloudEvent> producer = new
MockProducer<>(true, new ByteArraySerializer(), new CloudEventSerializer() {
+ // null partitioner uses default partitioning; ByteArraySerializer is used
for keys and CloudEventSerializer for values
+ public static MockProducer<byte[], CloudEvent> producer = new
MockProducer<>(true, null, new ByteArraySerializer(), new
CloudEventSerializer() {
@Override
public byte[] serialize(String topic, CloudEvent data) {
return super.serialize(topic, new RecordHeaders(), data);
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-tests/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-tests/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
index dff90d95cc..9858217b8c 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-executor-tests/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-executor-tests/src/test/java/org/kie/kogito/serverless/workflow/executor/MockKafkaEventEmitterFactory.java
@@ -28,7 +28,8 @@ import io.cloudevents.kafka.CloudEventSerializer;
public class MockKafkaEventEmitterFactory extends KafkaEventEmitterFactory {
- public static MockProducer<byte[], CloudEvent> producer = new
MockProducer<>(true, new ByteArraySerializer(), new CloudEventSerializer() {
+ // null partitioner uses default partitioning; ByteArraySerializer is used
for keys and CloudEventSerializer for values
+ public static MockProducer<byte[], CloudEvent> producer = new
MockProducer<>(true, null, new ByteArraySerializer(), new
CloudEventSerializer() {
@Override
public byte[] serialize(String topic, CloudEvent data) {
return super.serialize(topic, new RecordHeaders(), data);
diff --git
a/quarkus/addons/asyncapi/deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/asyncapi/AsyncAPIInfoConverter.java
b/quarkus/addons/asyncapi/deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/asyncapi/AsyncAPIInfoConverter.java
index 8a7edf8736..9862419147 100644
---
a/quarkus/addons/asyncapi/deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/asyncapi/AsyncAPIInfoConverter.java
+++
b/quarkus/addons/asyncapi/deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/asyncapi/AsyncAPIInfoConverter.java
@@ -27,9 +27,10 @@ import
org.kie.kogito.serverless.workflow.asyncapi.AsyncChannelInfo;
import org.kie.kogito.serverless.workflow.asyncapi.AsyncInfo;
import org.kie.kogito.serverless.workflow.asyncapi.AsyncInfoConverter;
-import com.asyncapi.v2._6_0.model.AsyncAPI;
-import com.asyncapi.v2._6_0.model.channel.ChannelItem;
-import com.asyncapi.v2._6_0.model.channel.operation.Operation;
+import com.asyncapi.v3._0_0.model.AsyncAPI;
+import com.asyncapi.v3._0_0.model.channel.Channel;
+import com.asyncapi.v3._0_0.model.operation.Operation;
+import com.asyncapi.v3._0_0.model.operation.OperationAction;
import io.quarkiverse.asyncapi.config.AsyncAPIRegistry;
@@ -47,20 +48,51 @@ public class AsyncAPIInfoConverter implements
AsyncInfoConverter {
}
private static AsyncInfo from(AsyncAPI asyncApi) {
- Map<String, AsyncChannelInfo> map = new HashMap<>();
- for (Entry<String, ChannelItem> entry :
asyncApi.getChannels().entrySet()) {
- addChannel(map, entry.getValue().getPublish(), entry.getKey() +
"_out", true);
- addChannel(map, entry.getValue().getSubscribe(), entry.getKey(),
false);
+ Map<String, String> channelIdToAddress =
buildChannelAddressMap(asyncApi);
+ Map<String, AsyncChannelInfo> channelInfoByOperationId =
buildOperationChannelInfoMap(asyncApi, channelIdToAddress);
+ return new AsyncInfo(channelInfoByOperationId);
+ }
+
+ /**
+ * Builds a mapping from channel ID to its address from the AsyncAPI
channels.
+ */
+ private static Map<String, String> buildChannelAddressMap(AsyncAPI
asyncApi) {
+ Map<String, String> channelIdToAddress = new HashMap<>();
+ if (asyncApi.getChannels() != null) {
+ for (Entry<String, Object> ch : asyncApi.getChannels().entrySet())
{
+ if (ch.getValue() instanceof Channel channel) {
+ String channelId = ch.getKey();
+ String address =
Optional.ofNullable(channel.getAddress()).orElse(channelId);
+ channelIdToAddress.put(channelId, address);
+ }
+ }
}
- return new AsyncInfo(map);
+ return channelIdToAddress;
}
- private static void addChannel(Map<String, AsyncChannelInfo> map,
Operation operation, String channelName, boolean publish) {
- if (operation != null) {
- String operationId = operation.getOperationId();
- if (operationId != null) {
- map.putIfAbsent(operationId, new AsyncChannelInfo(channelName,
publish));
+ /**
+ * Builds a mapping from operation ID to {@link AsyncChannelInfo} by
resolving channel references.
+ */
+ private static Map<String, AsyncChannelInfo>
buildOperationChannelInfoMap(AsyncAPI asyncApi, Map<String, String>
channelIdToAddress) {
+ Map<String, AsyncChannelInfo> channelInfoByOperationId = new
HashMap<>();
+ if (asyncApi.getOperations() != null) {
+ for (Entry<String, Object> opEntry :
asyncApi.getOperations().entrySet()) {
+ if (opEntry.getValue() instanceof Operation op &&
op.getChannel() != null) {
+ String operationId = opEntry.getKey();
+ String ref = op.getChannel().getRef();
+ if (ref != null && ref.contains("/")) {
+ String channelId = ref.substring(ref.lastIndexOf('/')
+ 1);
+ String address = channelIdToAddress.get(channelId);
+ OperationAction action = op.getAction();
+ if (address != null && action != null) {
+ boolean publish = action == OperationAction.SEND;
+ String channelName = publish ? address + "_out" :
address;
+ channelInfoByOperationId.putIfAbsent(operationId,
new AsyncChannelInfo(channelName, publish));
+ }
+ }
+ }
}
}
+ return channelInfoByOperationId;
}
}
diff --git a/quarkus/addons/events/rules/deployment/pom.xml
b/quarkus/addons/events/rules/deployment/pom.xml
index 6d77c9ddf5..849cba7327 100644
--- a/quarkus/addons/events/rules/deployment/pom.xml
+++ b/quarkus/addons/events/rules/deployment/pom.xml
@@ -57,10 +57,6 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health-deployment</artifactId>
</dependency>
- <dependency>
- <groupId>io.quarkus</groupId>
- <artifactId>quarkus-jackson-deployment</artifactId>
- </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-vertx-http-deployment</artifactId>
diff --git
a/quarkus/addons/flyway/runtime/src/main/java/org/kie/flyway/quarkus/KieQuarkusFlywayNamedModuleConfig.java
b/quarkus/addons/flyway/runtime/src/main/java/org/kie/flyway/quarkus/KieQuarkusFlywayNamedModuleConfig.java
index 81e6bd3e4c..bac51520f6 100644
---
a/quarkus/addons/flyway/runtime/src/main/java/org/kie/flyway/quarkus/KieQuarkusFlywayNamedModuleConfig.java
+++
b/quarkus/addons/flyway/runtime/src/main/java/org/kie/flyway/quarkus/KieQuarkusFlywayNamedModuleConfig.java
@@ -19,10 +19,8 @@
package org.kie.flyway.quarkus;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
-@ConfigGroup
public interface KieQuarkusFlywayNamedModuleConfig {
/**
diff --git a/quarkus/addons/grpc/deployment/pom.xml
b/quarkus/addons/grpc/deployment/pom.xml
index 159e4a7233..4317e682f4 100644
--- a/quarkus/addons/grpc/deployment/pom.xml
+++ b/quarkus/addons/grpc/deployment/pom.xml
@@ -58,6 +58,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-grpc-deployment</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-devtools-utilities</artifactId>
+ </dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
diff --git a/quarkus/addons/jwt-parser/deployment/pom.xml
b/quarkus/addons/jwt-parser/deployment/pom.xml
index 4eb8692b94..bf208330d4 100644
--- a/quarkus/addons/jwt-parser/deployment/pom.xml
+++ b/quarkus/addons/jwt-parser/deployment/pom.xml
@@ -64,9 +64,6 @@
<version>${version.io.quarkus}</version>
</path>
</annotationProcessorPaths>
- <compilerArgs>
- <arg>-AlegacyConfigRoot=true</arg>
- </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git a/quarkus/addons/jwt-parser/runtime/pom.xml
b/quarkus/addons/jwt-parser/runtime/pom.xml
index 4da4898d02..966b4a3b3a 100644
--- a/quarkus/addons/jwt-parser/runtime/pom.xml
+++ b/quarkus/addons/jwt-parser/runtime/pom.xml
@@ -86,9 +86,6 @@
<version>${version.io.quarkus}</version>
</path>
</annotationProcessorPaths>
- <compilerArgs>
- <arg>-AlegacyConfigRoot=true</arg>
- </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/EventingConfiguration.java
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/EventingConfiguration.java
index 22102a9150..de5cc377f9 100644
---
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/EventingConfiguration.java
+++
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/EventingConfiguration.java
@@ -47,6 +47,15 @@ public interface EventingConfiguration {
@WithDefault("true")
Boolean autoGenerateBroker();
+ /**
+ * Configuration for the Knative Sink used by this Kogito service.
+ * <p>
+ * The Sink configuration defines the target Knative resource (Broker,
Channel, or Service) where events
+ * will be sent. This is used to configure the "sink" property in the
generated Knative SinkBinding.
+ * <p>
+ * Use the nested properties under
`org.kie.kogito.addons.knative.eventing.sink.*` to customize
+ * the sink's namespace, API version, name, and kind.
+ */
@WithName("sink")
SinkConfiguration sinkConfig();
}
diff --git
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/SinkConfiguration.java
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/SinkConfiguration.java
index b1151b21ce..79410b2a24 100644
---
a/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/SinkConfiguration.java
+++
b/quarkus/addons/knative/eventing/deployment/src/main/java/org/kie/kogito/addons/quarkus/knative/eventing/deployment/SinkConfiguration.java
@@ -20,10 +20,8 @@ package
org.kie.kogito.addons.quarkus.knative.eventing.deployment;
import java.util.Optional;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
-@ConfigGroup
public interface SinkConfiguration {
String DEFAULT_SINK_API_VERSION = "eventing.knative.dev/v1";
diff --git
a/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
b/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
index d908ec863d..56a3832a9a 100644
---
a/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
+++
b/quarkus/addons/knative/serving/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/knative/serving/customfunctions/it/KnativeServingAddonIT.java
@@ -25,16 +25,16 @@ import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.KubernetesMockServerTestResource;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.KubernetesTestServer;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import io.restassured.http.ContentType;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
@@ -52,7 +52,7 @@ import static
org.kie.kogito.addons.quarkus.k8s.test.utils.KubeTestUtils.createK
import static
org.kie.kogito.addons.quarkus.knative.serving.customfunctions.KnativeWorkItemHandler.APPLICATION_CLOUDEVENTS_JSON_CHARSET_UTF_8;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(KubernetesMockServerTestResource.class)
class KnativeServingAddonIT {
public static final String AT_LEAST_ONE_NON_WHITE_CHARACTER_REGEX =
".*\\S.*";
@@ -66,8 +66,8 @@ class KnativeServingAddonIT {
@ConfigProperty(name = "kogito.sw.functions.greet_with_timeout.timeout")
Long requestTimeout;
- @KubernetesTestServer
- KubernetesServer mockServer;
+ @jakarta.inject.Inject
+ KubernetesClient kubernetesClient;
@BeforeAll
static void beforeAll() {
@@ -89,7 +89,7 @@ class KnativeServingAddonIT {
@BeforeEach
void beforeEach() {
- createKnativeServiceIfNotExists(mockServer.getClient(),
"knative/quarkus-greeting.yaml", NAMESPACE,
+ createKnativeServiceIfNotExists(kubernetesClient,
"knative/quarkus-greeting.yaml", NAMESPACE,
SERVICENAME, remoteServiceUrl);
}
diff --git
a/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
b/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
index a82716419d..2a475d65bc 100644
---
a/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
+++
b/quarkus/addons/kubernetes/integration-tests/src/test/java/org/kie/kogito/addons/quarkus/kubernetes/ConfigValueExpanderIT.java
@@ -21,7 +21,6 @@ package org.kie.kogito.addons.quarkus.kubernetes;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
import io.quarkus.test.junit.QuarkusIntegrationTest;
import io.quarkus.test.kubernetes.client.KubernetesTestServer;
import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
@@ -39,7 +38,7 @@ class ConfigValueExpanderIT {
private static final String SERVICENAME =
"serverless-workflow-greeting-quarkus";
@KubernetesTestServer
- KubernetesServer mockServer;
+ io.quarkus.test.kubernetes.client.KubernetesServer mockServer;
@BeforeEach
void beforeEach() {
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
index c2ff5ad565..0cd9424496 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
+++
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/KnativeRouteEndpointDiscoveryTest.java
@@ -29,14 +29,15 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.kie.kogito.addons.k8s.Endpoint;
import org.kie.kogito.addons.k8s.KnativeRouteEndpointDiscovery;
+import
org.kie.kogito.addons.quarkus.k8s.test.utils.KubernetesMockServerTestResource;
import io.fabric8.knative.client.KnativeClient;
import io.fabric8.knative.serving.v1.Route;
import io.fabric8.knative.serving.v1.RouteBuilder;
import io.fabric8.knative.serving.v1.RouteStatus;
import io.fabric8.kubernetes.client.KubernetesClient;
+import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.quarkus.test.kubernetes.client.WithKubernetesTestServer;
import jakarta.inject.Inject;
@@ -45,11 +46,12 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@QuarkusTest
-@WithKubernetesTestServer
+@QuarkusTestResource(KubernetesMockServerTestResource.class)
public class KnativeRouteEndpointDiscoveryTest {
@Inject
KubernetesClient kubernetesClient;
+
KnativeClient knativeClient;
@BeforeEach
diff --git
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
index 9e8d7e7632..0aa6afa6f3 100644
---
a/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
+++
b/quarkus/addons/kubernetes/runtime/src/test/java/org/kie/kogito/addons/quarkus/k8s/config/KubeDiscoveryConfigCacheUpdaterTest.java
@@ -50,7 +50,9 @@ class KubeDiscoveryConfigCacheUpdaterTest {
@BeforeEach
void beforeEach() {
- createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting.yaml", "test",
"serverless-workflow-greeting-quarkus", remoteServiceUrl);
+ createKnativeServiceIfNotExists(client,
"knative/quarkus-greeting.yaml", "test",
+ "serverless-workflow-greeting-quarkus", remoteServiceUrl);
+
kubeDiscoveryConfigCacheUpdater = new
KubeDiscoveryConfigCacheUpdater(kubernetesServiceCatalog);
}
diff --git a/quarkus/addons/kubernetes/test-utils/pom.xml
b/quarkus/addons/kubernetes/test-utils/pom.xml
index 021303a2d8..53edd9c792 100644
--- a/quarkus/addons/kubernetes/test-utils/pom.xml
+++ b/quarkus/addons/kubernetes/test-utils/pom.xml
@@ -39,7 +39,7 @@
<dependencies>
<dependency>
<groupId>io.fabric8</groupId>
- <artifactId>openshift-server-mock</artifactId>
+ <artifactId>kubernetes-server-mock</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
@@ -53,6 +53,10 @@
<groupId>io.fabric8</groupId>
<artifactId>kubernetes-client</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.fabric8</groupId>
+ <artifactId>openshift-client</artifactId>
+ </dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-kubernetes</artifactId>
diff --git
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
index 1926189ab2..ce2dafe78f 100644
---
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
+++
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubeTestUtils.java
@@ -28,6 +28,9 @@ import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.dsl.Resource;
+/**
+ * Utility methods for Kubernetes test resources using Fabric8 CRUD-mode mock
server.
+ */
public final class KubeTestUtils {
private KubeTestUtils() {
@@ -87,9 +90,10 @@ public final class KubeTestUtils {
}
public static void createKnativeServiceIfNotExists(KubernetesClient
client, String yamlPath, String namespace, String serviceName, String
remoteServiceUrl) {
- if
(client.services().inNamespace(namespace).withName(serviceName).get() == null) {
- KnativeClient knativeClient = client.adapt(KnativeClient.class);
+ KnativeClient knativeClient = client.adapt(KnativeClient.class);
+ // Check if Knative service exists (not regular K8s service)
+ if
(knativeClient.services().inNamespace(namespace).withName(serviceName).get() ==
null) {
Service service =
knativeClient.services().inNamespace(namespace).load(getResourceAsStream(yamlPath)).item();
if (remoteServiceUrl != null) {
diff --git
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubernetesMockServerTestResource.java
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubernetesMockServerTestResource.java
index 3474a37029..3c633280c6 100644
---
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubernetesMockServerTestResource.java
+++
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/KubernetesMockServerTestResource.java
@@ -22,7 +22,10 @@ import java.util.HashMap;
import java.util.Map;
import io.fabric8.kubernetes.client.Config;
-import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesCrudDispatcher;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
+import io.fabric8.mockwebserver.MockWebServer;
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
/**
@@ -31,19 +34,24 @@ import
io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
public class KubernetesMockServerTestResource implements
QuarkusTestResourceLifecycleManager {
private static final String TEST_NAMESPACE =
"serverless-workflow-greeting-quarkus";
- private final KubernetesServer server = new KubernetesServer(false, true);
// Use CRUD mode
+ private KubernetesMockServer server;
+ private KubernetesClient client;
+ private String previousMasterUrl;
@Override
public Map<String, String> start() {
- try {
- server.before(); // Start the mock Kubernetes server
- } catch (Exception e) {
- throw new RuntimeException("Failed to start Kubernetes mock
server", e);
- }
+ server = new KubernetesMockServer(
+ new io.fabric8.mockwebserver.Context(),
+ new MockWebServer(),
+ new HashMap<>(),
+ new KubernetesCrudDispatcher(),
+ false);
+ server.init();
- String mockServerUrl =
server.getClient().getConfiguration().getMasterUrl();
+ client = server.createClient();
+ String mockServerUrl = client.getConfiguration().getMasterUrl();
- // Ensure the Fabric8 client picks up the mock server
+ previousMasterUrl =
System.getProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY);
System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY,
mockServerUrl);
Map<String, String> config = new HashMap<>();
@@ -55,15 +63,25 @@ public class KubernetesMockServerTestResource implements
QuarkusTestResourceLife
@Override
public void stop() {
+ if (previousMasterUrl != null) {
+ System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY,
previousMasterUrl);
+ } else {
+ System.clearProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY);
+ }
+ if (client != null) {
+ client.close();
+ }
if (server != null) {
- server.after(); // Stop the mock server
+ server.destroy();
+ server = null;
}
}
- /**
- * Expose the Fabric8 Kubernetes mock server instance for advanced use in
tests.
- */
- public KubernetesServer getServer() {
+ public KubernetesMockServer getServer() {
return server;
}
+
+ public KubernetesClient getClient() {
+ return client;
+ }
}
diff --git
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
index cc308cffd0..cdf1d83457 100644
---
a/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
+++
b/quarkus/addons/kubernetes/test-utils/src/main/java/org/kie/kogito/addons/quarkus/k8s/test/utils/OpenShiftMockServerTestResource.java
@@ -18,33 +18,62 @@
*/
package org.kie.kogito.addons.quarkus.k8s.test.utils;
+import java.util.HashMap;
import java.util.Map;
-import io.fabric8.openshift.client.server.mock.OpenShiftServer;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.server.mock.KubernetesCrudDispatcher;
+import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
+import io.fabric8.mockwebserver.MockWebServer;
+import io.fabric8.openshift.client.OpenShiftClient;
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
+/**
+ * Quarkus test resource that provides a Fabric8 Kubernetes mock server with
OpenShift support.
+ * Uses KubernetesMockServer with CRUD mode and adapts the client to
OpenShiftClient.
+ */
public class OpenShiftMockServerTestResource implements
QuarkusTestResourceLifecycleManager {
- private OpenShiftServer server;
+ private KubernetesMockServer server;
+ private KubernetesClient kubernetesClient;
+ private OpenShiftClient openShiftClient;
@Override
public Map<String, String> start() {
- server = new OpenShiftServer(true, true);
- server.before(); // Start mock server
+ server = new KubernetesMockServer(
+ new io.fabric8.mockwebserver.Context(),
+ new MockWebServer(),
+ new HashMap<>(),
+ new KubernetesCrudDispatcher(),
+ false);
+ server.init();
+
+ kubernetesClient = server.createClient();
+ openShiftClient = kubernetesClient.adapt(OpenShiftClient.class);
return Map.of(
- "quarkus.kubernetes-client.master-url",
server.getOpenshiftClient().getMasterUrl().toString(),
+ "quarkus.kubernetes-client.master-url",
kubernetesClient.getConfiguration().getMasterUrl(),
"quarkus.kubernetes-client.trust-certs", "true");
}
@Override
public void stop() {
+ if (openShiftClient != null) {
+ openShiftClient.close();
+ }
+ if (kubernetesClient != null) {
+ kubernetesClient.close();
+ }
if (server != null) {
- server.after(); // Stop mock server
+ server.destroy();
}
}
- public OpenShiftServer getServer() {
+ public KubernetesMockServer getServer() {
return server;
}
+
+ public OpenShiftClient getClient() {
+ return openShiftClient;
+ }
}
diff --git a/quarkus/addons/opentelemetry/deployment/pom.xml
b/quarkus/addons/opentelemetry/deployment/pom.xml
index 4d47bf5cdf..4e61d8335e 100644
--- a/quarkus/addons/opentelemetry/deployment/pom.xml
+++ b/quarkus/addons/opentelemetry/deployment/pom.xml
@@ -81,9 +81,6 @@
<version>${version.io.quarkus}</version>
</path>
</annotationProcessorPaths>
- <compilerArgs>
- <arg>-AlegacyConfigRoot=true</arg>
- </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git a/quarkus/addons/opentelemetry/runtime/pom.xml
b/quarkus/addons/opentelemetry/runtime/pom.xml
index 17403cb8ed..ee84636310 100644
--- a/quarkus/addons/opentelemetry/runtime/pom.xml
+++ b/quarkus/addons/opentelemetry/runtime/pom.xml
@@ -143,9 +143,6 @@
<version>${version.io.quarkus}</version>
</path>
</annotationProcessorPaths>
- <compilerArgs>
- <arg>-AlegacyConfigRoot=true</arg>
- </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git
a/quarkus/addons/opentelemetry/runtime/src/main/java/org/kie/kogito/quarkus/serverless/workflow/opentelemetry/config/SonataFlowOtelConfig.java
b/quarkus/addons/opentelemetry/runtime/src/main/java/org/kie/kogito/quarkus/serverless/workflow/opentelemetry/config/SonataFlowOtelConfig.java
index 207bb0bfea..47b1406ec5 100644
---
a/quarkus/addons/opentelemetry/runtime/src/main/java/org/kie/kogito/quarkus/serverless/workflow/opentelemetry/config/SonataFlowOtelConfig.java
+++
b/quarkus/addons/opentelemetry/runtime/src/main/java/org/kie/kogito/quarkus/serverless/workflow/opentelemetry/config/SonataFlowOtelConfig.java
@@ -24,32 +24,59 @@ import io.smallrye.config.WithDefault;
@ConfigMapping(prefix = "sonataflow.otel")
public interface SonataFlowOtelConfig {
+ /**
+ * Enable or disable OpenTelemetry integration for SonataFlow
+ */
@WithDefault("true")
boolean enabled();
+ /**
+ * Service name for OpenTelemetry traces
+ */
@WithDefault("${quarkus.application.name:kogito-workflow-service}")
String serviceName();
+ /**
+ * Service version for OpenTelemetry traces
+ */
@WithDefault("${quarkus.application.version:unknown}")
String serviceVersion();
+ /**
+ * Span configuration
+ */
SpanConfig spans();
+ /**
+ * Event configuration
+ */
EventConfig events();
interface SpanConfig {
+ /**
+ * Enable or disable span creation
+ */
@WithDefault("true")
boolean enabled();
}
interface EventConfig {
+ /**
+ * Enable or disable event tracking
+ */
@WithDefault("true")
boolean enabled();
}
+ /**
+ * Test infrastructure configuration
+ */
TestInfrastructureConfig testInfrastructure();
interface TestInfrastructureConfig {
+ /**
+ * Enable or disable test infrastructure
+ */
@WithDefault("false")
boolean enabled();
}
diff --git
a/quarkus/addons/persistence/kafka/runtime/src/test/java/org/kie/kogito/persistence/kafka/KafkaProcessInstancesIT.java
b/quarkus/addons/persistence/kafka/runtime/src/test/java/org/kie/kogito/persistence/kafka/KafkaProcessInstancesIT.java
index 5fb7679903..14e35cc5f9 100644
---
a/quarkus/addons/persistence/kafka/runtime/src/test/java/org/kie/kogito/persistence/kafka/KafkaProcessInstancesIT.java
+++
b/quarkus/addons/persistence/kafka/runtime/src/test/java/org/kie/kogito/persistence/kafka/KafkaProcessInstancesIT.java
@@ -18,6 +18,9 @@
*/
package org.kie.kogito.persistence.kafka;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.time.Duration;
import java.util.List;
import java.util.Properties;
@@ -234,6 +237,12 @@ public class KafkaProcessInstancesIT {
Properties properties = new Properties();
properties.put(StreamsConfig.APPLICATION_ID_CONFIG, "kogito");
properties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG,
kafka.getBootstrapServers());
+ try {
+ Path tempDir = Files.createTempDirectory("kafka-streams-test");
+ properties.put(StreamsConfig.STATE_DIR_CONFIG, tempDir.toString());
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to create temp directory for
Kafka Streams state", e);
+ }
return properties;
}
diff --git a/quarkus/addons/process-instance-migration/runtime/pom.xml
b/quarkus/addons/process-instance-migration/runtime/pom.xml
index 01b2e36fc2..98ae16bc13 100644
--- a/quarkus/addons/process-instance-migration/runtime/pom.xml
+++ b/quarkus/addons/process-instance-migration/runtime/pom.xml
@@ -84,7 +84,6 @@
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<scope>test</scope>
- <version>4.0.1</version>
</dependency>
</dependencies>
@@ -119,9 +118,6 @@
<version>${version.io.quarkus}</version>
</path>
</annotationProcessorPaths>
- <compilerArgs>
- <arg>-AlegacyConfigRoot=true</arg>
- </compilerArgs>
</configuration>
</plugin>
</plugins>
diff --git a/quarkus/addons/process-management/runtime/pom.xml
b/quarkus/addons/process-management/runtime/pom.xml
index 48161a444b..d65e3945d0 100644
--- a/quarkus/addons/process-management/runtime/pom.xml
+++ b/quarkus/addons/process-management/runtime/pom.xml
@@ -88,7 +88,6 @@
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<scope>test</scope>
- <version>4.0.1</version>
</dependency>
</dependencies>
diff --git a/quarkus/addons/rest-exception-handler/pom.xml
b/quarkus/addons/rest-exception-handler/pom.xml
index 03f28e9266..57328c69c8 100644
--- a/quarkus/addons/rest-exception-handler/pom.xml
+++ b/quarkus/addons/rest-exception-handler/pom.xml
@@ -79,7 +79,6 @@
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<scope>test</scope>
- <version>4.0.1</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
diff --git
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoBuildTimeConfig.java
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoBuildTimeConfig.java
index 5586588de8..068cec708d 100644
---
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoBuildTimeConfig.java
+++
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoBuildTimeConfig.java
@@ -18,16 +18,18 @@
*/
package org.kie.kogito.tracing.decision.quarkus.deployment;
-import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;
+import io.smallrye.config.ConfigMapping;
+import io.smallrye.config.WithName;
-@ConfigRoot(name = "kogito", phase = ConfigPhase.BUILD_TIME)
-public class KogitoBuildTimeConfig {
+@ConfigMapping(prefix = "kogito")
+@ConfigRoot(phase = ConfigPhase.BUILD_TIME)
+public interface KogitoBuildTimeConfig {
/**
* Configuration for DevServices. DevServices allows Quarkus to
automatically start TrustyService in dev and test mode.
*/
- @ConfigItem
- public KogitoDevServicesBuildTimeConfig devServicesTrusty;
+ @WithName("dev-services-trusty")
+ KogitoDevServicesBuildTimeConfig devServicesTrusty();
}
diff --git
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesBuildTimeConfig.java
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesBuildTimeConfig.java
index 1546e26d49..d964490fa6 100644
---
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesBuildTimeConfig.java
+++
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesBuildTimeConfig.java
@@ -20,32 +20,28 @@ package org.kie.kogito.tracing.decision.quarkus.deployment;
import java.util.Optional;
-import io.quarkus.runtime.annotations.ConfigGroup;
-import io.quarkus.runtime.annotations.ConfigItem;
+import io.smallrye.config.WithDefault;
-@ConfigGroup
-public class KogitoDevServicesBuildTimeConfig {
+public interface KogitoDevServicesBuildTimeConfig {
/**
* If Dev Services for Kogito has been explicitly enabled or disabled. Dev
Services are generally enabled
* by default, unless there is an existing configuration present.
*/
- @ConfigItem
- public Optional<Boolean> enabled = Optional.empty();
+ Optional<Boolean> enabled();
/**
* Optional fixed port the dev service will listen to.
* <p>
* If not defined, 8081 will be used.
*/
- @ConfigItem(defaultValue = "8081")
- public Optional<Integer> port;
+ @WithDefault("8081")
+ Optional<Integer> port();
/**
* The TrustyService image to use.
*/
- @ConfigItem
- public String imageName;
+ Optional<String> imageName();
/**
* Indicates if the TrustyService instance managed by Quarkus DevServices
is shared.
@@ -58,8 +54,8 @@ public class KogitoDevServicesBuildTimeConfig {
* <p>
* Container sharing is only used in dev mode.
*/
- @ConfigItem(defaultValue = "true")
- public boolean shared;
+ @WithDefault("true")
+ boolean shared();
/**
* The value of the {@code kogito-dev-service-trusty-service} label
attached to the started container.
@@ -69,13 +65,13 @@ public class KogitoDevServicesBuildTimeConfig {
* container instead of starting a new one. Otherwise, it starts a new
container with the
* {@code kogito-dev-service-trusty-service} label set to the specified
value.
*/
- @ConfigItem(defaultValue = "kogito-trusty-service")
- public String serviceName;
+ @WithDefault("kogito-trusty-service")
+ String serviceName();
/**
* Optional random port the dev service will listen to in tests.
*/
- @ConfigItem(defaultValue = "-1")
- public Integer portUsedByTest;
+ @WithDefault("-1")
+ Integer portUsedByTest();
}
diff --git
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesProcessor.java
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesProcessor.java
index e4bd729ffd..98f99d8e17 100644
---
a/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesProcessor.java
+++
b/quarkus/addons/tracing-decision/deployment/src/main/java/org/kie/kogito/tracing/decision/quarkus/deployment/KogitoDevServicesProcessor.java
@@ -231,6 +231,11 @@ public class KogitoDevServicesProcessor {
return null;
}
+ if (config.imageName == null) {
+ LOGGER.warn("No TrustyService image name configured, unable to
start DevServices.");
+ return null;
+ }
+
final Optional<ContainerAddress> maybeContainerAddress =
LOCATOR.locateContainer(config.serviceName,
config.shared,
launchMode.getLaunchMode());
@@ -277,7 +282,7 @@ public class KogitoDevServicesProcessor {
}
private TrustyServiceDevServiceConfig getConfiguration(final
KogitoBuildTimeConfig cfg) {
- KogitoDevServicesBuildTimeConfig devServicesConfig =
cfg.devServicesTrusty;
+ KogitoDevServicesBuildTimeConfig devServicesConfig =
cfg.devServicesTrusty();
return new TrustyServiceDevServiceConfig(devServicesConfig);
}
@@ -319,12 +324,12 @@ public class KogitoDevServicesProcessor {
private final int portUsedByTest;
public TrustyServiceDevServiceConfig(final
KogitoDevServicesBuildTimeConfig config) {
- this.devServicesEnabled = config.enabled.orElse(true);
- this.imageName = config.imageName;
- this.fixedExposedPort = config.port.orElse(0);
- this.shared = config.shared;
- this.serviceName = config.serviceName;
- this.portUsedByTest = config.portUsedByTest;
+ this.devServicesEnabled = config.enabled().orElse(true);
+ this.imageName = config.imageName().orElse(null);
+ this.fixedExposedPort = config.port().orElse(0);
+ this.shared = config.shared();
+ this.serviceName = config.serviceName();
+ this.portUsedByTest = config.portUsedByTest();
}
@Override
diff --git a/quarkus/bom/pom.xml b/quarkus/bom/pom.xml
index 7896bd79a3..cc7a2f8f2c 100755
--- a/quarkus/bom/pom.xml
+++ b/quarkus/bom/pom.xml
@@ -37,8 +37,8 @@
<description>Internal BOM descriptor for Kogito modules targeting Quarkus
use-cases. Specific dependencies targeting the Quarkus platform must be added
here.</description>
<properties>
- <!-- Keep it aligned with
https://github.com/quarkusio/quarkus/blob/3.20.1/pom.xml#L72 -->
-
<version.io.fabric8.kubernetes-client>7.1.0</version.io.fabric8.kubernetes-client>
+ <!-- Keep it aligned with
https://github.com/quarkusio/quarkus/blob/3.27.2/pom.xml#L72 -->
+
<version.io.fabric8.kubernetes-client>7.3.1</version.io.fabric8.kubernetes-client>
</properties>
<dependencyManagement>
diff --git
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoAuthRuntimeConfig.java
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoAuthRuntimeConfig.java
index e667f7aff9..23309af7ad 100644
---
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoAuthRuntimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoAuthRuntimeConfig.java
@@ -21,11 +21,9 @@ package org.kie.kogito.quarkus.config;
import java.util.Optional;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-@ConfigGroup
public interface KogitoAuthRuntimeConfig {
/**
diff --git
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoEventingRuntimeConfig.java
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoEventingRuntimeConfig.java
index b6402115ea..9f5f620b83 100644
---
a/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoEventingRuntimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-extension-common/kogito-quarkus-common/src/main/java/org/kie/kogito/quarkus/config/KogitoEventingRuntimeConfig.java
@@ -18,11 +18,9 @@
*/
package org.kie.kogito.quarkus.config;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-@ConfigGroup
public interface KogitoEventingRuntimeConfig {
String MAX_THREADS_PROPERTY = "threads.poolSize";
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java
index 3defff2e3e..d9dbd53f59 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/deployment/ServerlessWorkflowAssetsProcessor.java
@@ -145,4 +145,22 @@ public class ServerlessWorkflowAssetsProcessor extends
WorkflowProcessor {
combinedIndexBuildItem.getComputingIndex().getAllKnownImplementors(DotName.createSimple("com.networknt.schema.JsonValidator"))
.forEach(c -> reflectiveClass.produce(new
ReflectiveClassBuildItem(true, true, c.name().toString())));
}
+
+ /**
+ * Register primitive wrapper types for reflection in native builds.
+ * This is needed so that RESTEasy's DefaultTextPlain provider can use
+ * TypeConverter to deserialize text/plain responses into primitive wrapper
+ * types (e.g. Float, Double) via their valueOf(String) methods.
+ */
+ @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class)
+ public ReflectiveClassBuildItem
registerPrimitiveWrapperTypesForReflection() {
+ return new ReflectiveClassBuildItem(true, false,
+ java.lang.Float.class.getName(),
+ java.lang.Double.class.getName(),
+ java.lang.Integer.class.getName(),
+ java.lang.Long.class.getName(),
+ java.lang.Short.class.getName(),
+ java.lang.Byte.class.getName(),
+ java.lang.Boolean.class.getName());
+ }
}
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/main/resources/specs/asyncAPI.yaml
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/main/resources/specs/asyncAPI.yaml
index 9f0b86e381..4cb3f54042 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/main/resources/specs/asyncAPI.yaml
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/main/resources/specs/asyncAPI.yaml
@@ -17,34 +17,45 @@
# under the License.
#
-asyncapi: '2.0.0'
-id: 'oneConsumer'
+asyncapi: 3.0.0
+id: oneConsumer
info:
title: Kafka Application
- version: '1.0.0'
+ version: 1.0.0
description: Kafka Application
license:
name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0
+ url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
production:
- url: localhost:9092
- description: Development server
+ host: 'localhost:9092'
protocol: kafka
- protocolVersion: '1.0.0'
+ protocolVersion: 1.0.0
+ description: Development server
channels:
wait:
- description: A message channel
- subscribe:
- operationId: wait
- summary: Get messages
- message:
+ address: wait
+ messages:
+ sendWait.message:
$ref: '#/components/messages/message'
- publish:
- operationId: sendWait
- summary: Send messages
- message:
+ wait.message:
$ref: '#/components/messages/message'
+ description: A message channel
+operations:
+ sendWait:
+ action: send
+ channel:
+ $ref: '#/channels/wait'
+ summary: Send messages
+ messages:
+ - $ref: '#/channels/wait/messages/sendWait.message'
+ wait:
+ action: receive
+ channel:
+ $ref: '#/channels/wait'
+ summary: Get messages
+ messages:
+ - $ref: '#/channels/wait/messages/wait.message'
components:
messages:
message:
@@ -53,7 +64,7 @@ components:
summary: A message
contentType: application/json
payload:
- $ref: "#/components/schemas/message"
+ $ref: '#/components/schemas/message'
schemas:
message:
type: object
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/test/java/org/kie/kogito/quarkus/serverless/workflow/deployment/livereload/LiveReloadProcessorTest.java
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/test/java/org/kie/kogito/quarkus/serverless/workflow/deployment/livereload/LiveReloadProcessorTest.java
index 0ea4e89ff3..edc2ccf406 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/test/java/org/kie/kogito/quarkus/serverless/workflow/deployment/livereload/LiveReloadProcessorTest.java
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-extension-live-reload-test/src/test/java/org/kie/kogito/quarkus/serverless/workflow/deployment/livereload/LiveReloadProcessorTest.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.time.Duration;
import java.util.Collections;
import java.util.Map;
import java.util.Objects;
@@ -31,8 +32,13 @@ import java.util.stream.Stream;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.parallel.Execution;
import org.kie.kogito.test.utils.SocketUtils;
import com.github.tomakehurst.wiremock.WireMockServer;
@@ -49,9 +55,15 @@ import static
com.github.tomakehurst.wiremock.client.WireMock.post;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static io.restassured.RestAssured.given;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.awaitility.Awaitility.await;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
+import static org.junit.jupiter.api.parallel.ExecutionMode.SAME_THREAD;
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@Execution(SAME_THREAD)
+@TestMethodOrder(OrderAnnotation.class)
+//@Disabled("Disabled temporarily - live reload tests are unstable in dev
mode")
public class LiveReloadProcessorTest {
private static final int PORT = SocketUtils.findAvailablePort();
@@ -108,6 +120,7 @@ public class LiveReloadProcessorTest {
}
@Test
+ @Order(2)
void testOpenApi() throws IOException {
given()
.contentType(ContentType.JSON)
@@ -134,6 +147,7 @@ public class LiveReloadProcessorTest {
}
@Test
+ @Order(3)
void testGrpc() throws InterruptedException, IOException {
Server server = GreeterService.buildServer(PORT);
server.start();
@@ -167,6 +181,7 @@ public class LiveReloadProcessorTest {
}
@Test
+ @Order(1)
void testAsyncApi() throws IOException {
given()
.contentType(ContentType.JSON)
@@ -180,15 +195,18 @@ public class LiveReloadProcessorTest {
test.addResourceFile("asyncPublisher.sw.json", new
String(Objects.requireNonNull(inputStream).readAllBytes()));
}
- String id = given()
- .contentType(ContentType.JSON)
- .when()
- .body(Collections.singletonMap("workflowdata",
Collections.emptyMap()))
- .post("/asyncEventPublisher")
- .then()
- .statusCode(201)
- .extract().path("id");
+ // Wait for Quarkus to complete the hot reload (max 10 seconds)
+ await().atMost(Duration.ofSeconds(10)).untilAsserted(() -> {
+ String id = given()
+ .contentType(ContentType.JSON)
+ .when()
+ .body(Collections.singletonMap("workflowdata",
Collections.emptyMap()))
+ .post("/asyncEventPublisher")
+ .then()
+ .statusCode(201)
+ .extract().path("id");
- assertThat(id).isNotBlank();
+ assertThat(id).isNotBlank();
+ });
}
}
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/asyncAPI.yaml
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/asyncAPI.yaml
index 9f0b86e381..4cb3f54042 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/asyncAPI.yaml
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/asyncAPI.yaml
@@ -17,34 +17,45 @@
# under the License.
#
-asyncapi: '2.0.0'
-id: 'oneConsumer'
+asyncapi: 3.0.0
+id: oneConsumer
info:
title: Kafka Application
- version: '1.0.0'
+ version: 1.0.0
description: Kafka Application
license:
name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0
+ url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
production:
- url: localhost:9092
- description: Development server
+ host: 'localhost:9092'
protocol: kafka
- protocolVersion: '1.0.0'
+ protocolVersion: 1.0.0
+ description: Development server
channels:
wait:
- description: A message channel
- subscribe:
- operationId: wait
- summary: Get messages
- message:
+ address: wait
+ messages:
+ sendWait.message:
$ref: '#/components/messages/message'
- publish:
- operationId: sendWait
- summary: Send messages
- message:
+ wait.message:
$ref: '#/components/messages/message'
+ description: A message channel
+operations:
+ sendWait:
+ action: send
+ channel:
+ $ref: '#/channels/wait'
+ summary: Send messages
+ messages:
+ - $ref: '#/channels/wait/messages/sendWait.message'
+ wait:
+ action: receive
+ channel:
+ $ref: '#/channels/wait'
+ summary: Get messages
+ messages:
+ - $ref: '#/channels/wait/messages/wait.message'
components:
messages:
message:
@@ -53,7 +64,7 @@ components:
summary: A message
contentType: application/json
payload:
- $ref: "#/components/schemas/message"
+ $ref: '#/components/schemas/message'
schemas:
message:
type: object
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/callbackResults.yaml
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/callbackResults.yaml
index 7b7b97d277..f13d5fc9a2 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/callbackResults.yaml
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/specs/callbackResults.yaml
@@ -17,57 +17,89 @@
# under the License.
#
-asyncapi: '2.0.0'
-id: 'callbackResults'
+asyncapi: 3.0.0
+id: callbackResults
info:
title: Kafka Application
- version: '1.0.0'
+ version: 1.0.0
description: Kafka Application
license:
name: Apache 2.0
- url: https://www.apache.org/licenses/LICENSE-2.0
+ url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
production:
- url: localhost:9092
- description: Development server
+ host: 'localhost:9092'
protocol: kafka
- protocolVersion: '1.0.0'
+ protocolVersion: 1.0.0
+ description: Development server
channels:
success:
- description: A message channel for successful completions
- publish:
- operationId: sendSuccess
- summary: Success
- message:
+ address: success
+ messages:
+ sendSuccess.message:
$ref: '#/components/messages/message'
+ description: A message channel for successful completions
timeoutCallbackError:
- description: A message channel for callback timeout error
- publish:
- operationId: sendTimeoutExpiredForCallbackError
- summary: Timeout Expired
- message:
+ address: timeoutCallbackError
+ messages:
+ sendTimeoutExpiredForCallbackError.message:
$ref: '#/components/messages/message'
+ description: A message channel for callback timeout error
timeoutError:
- description: A message channel for timeout error
- publish:
- operationId: sendTimeoutExpiredError
- summary: Timeout Expired
- message:
+ address: timeoutError
+ messages:
+ sendTimeoutExpiredError.message:
$ref: '#/components/messages/message'
+ description: A message channel for timeout error
sendEvenError:
- description: A message channel for publishing errors
- publish:
- operationId: sendEvenError
- summary: Reporting error
- message:
+ address: sendEvenError
+ messages:
+ sendEvenError.message:
$ref: '#/components/messages/message'
+ description: A message channel for publishing errors
error:
- description: A message channel for failed executions
- publish:
- operationId: sendFailed
- summary: Failed
- message:
+ address: error
+ messages:
+ sendFailed.message:
$ref: '#/components/messages/message'
+ description: A message channel for failed executions
+operations:
+ sendSuccess:
+ action: send
+ channel:
+ $ref: '#/channels/success'
+ summary: Success
+ messages:
+ - $ref: '#/channels/success/messages/sendSuccess.message'
+ sendTimeoutExpiredForCallbackError:
+ action: send
+ channel:
+ $ref: '#/channels/timeoutCallbackError'
+ summary: Timeout Expired
+ messages:
+ - $ref: >-
+
#/channels/timeoutCallbackError/messages/sendTimeoutExpiredForCallbackError.message
+ sendTimeoutExpiredError:
+ action: send
+ channel:
+ $ref: '#/channels/timeoutError'
+ summary: Timeout Expired
+ messages:
+ - $ref:
'#/channels/timeoutError/messages/sendTimeoutExpiredError.message'
+ sendEvenError:
+ action: send
+ channel:
+ $ref: '#/channels/sendEvenError'
+ summary: Reporting error
+ messages:
+ - $ref: '#/channels/sendEvenError/messages/sendEvenError.message'
+ sendFailed:
+ action: send
+ channel:
+ $ref: '#/channels/error'
+ summary: Failed
+ messages:
+ - $ref: '#/channels/error/messages/sendFailed.message'
components:
messages:
message:
@@ -76,7 +108,7 @@ components:
summary: A message
contentType: application/json
payload:
- $ref: "#/components/schemas/message"
+ $ref: '#/components/schemas/message'
schemas:
message:
type: object
diff --git
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/quarkus/serverless/workflow/config/KogitoServerlessWorkflowBuildTimeConfig.java
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/quarkus/serverless/workflow/config/KogitoServerlessWorkflowBuildTimeConfig.java
index 9e6b53a612..6c0ceeca81 100644
---
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/quarkus/serverless/workflow/config/KogitoServerlessWorkflowBuildTimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/src/main/java/org/kie/kogito/quarkus/serverless/workflow/config/KogitoServerlessWorkflowBuildTimeConfig.java
@@ -18,11 +18,9 @@
*/
package org.kie.kogito.quarkus.serverless.workflow.config;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-@ConfigGroup
public interface KogitoServerlessWorkflowBuildTimeConfig {
/**
diff --git
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/config/KogitoDevServicesBuildTimeConfig.java
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/config/KogitoDevServicesBuildTimeConfig.java
index e996b76c04..491cc8ca5f 100644
---
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/config/KogitoDevServicesBuildTimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common-deployment/src/main/java/org/kie/kogito/quarkus/workflow/deployment/config/KogitoDevServicesBuildTimeConfig.java
@@ -20,10 +20,8 @@ package org.kie.kogito.quarkus.workflow.deployment.config;
import java.util.Optional;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
-@ConfigGroup
public interface KogitoDevServicesBuildTimeConfig {
/**
diff --git
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceBuildTimeConfig.java
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceBuildTimeConfig.java
index a85942ae7c..24035e6eea 100644
---
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceBuildTimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceBuildTimeConfig.java
@@ -18,11 +18,9 @@
*/
package org.kie.kogito.quarkus.workflow.config;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-@ConfigGroup
public interface KogitoPersistenceBuildTimeConfig {
/**
diff --git
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceRuntimeConfig.java
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceRuntimeConfig.java
index 90d64ee976..6415c353f0 100644
---
a/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceRuntimeConfig.java
+++
b/quarkus/extensions/kogito-quarkus-workflow-extension-common/kogito-quarkus-workflow-common/src/main/java/org/kie/kogito/quarkus/workflow/config/KogitoPersistenceRuntimeConfig.java
@@ -20,11 +20,9 @@ package org.kie.kogito.quarkus.workflow.config;
import java.util.Optional;
-import io.quarkus.runtime.annotations.ConfigGroup;
import io.smallrye.config.WithDefault;
import io.smallrye.config.WithName;
-@ConfigGroup
public interface KogitoPersistenceRuntimeConfig {
/**
diff --git a/springboot/addons/jbpm-usertask-storage-jpa/pom.xml
b/springboot/addons/jbpm-usertask-storage-jpa/pom.xml
index 7dad79c279..e70e2aa21c 100644
--- a/springboot/addons/jbpm-usertask-storage-jpa/pom.xml
+++ b/springboot/addons/jbpm-usertask-storage-jpa/pom.xml
@@ -41,6 +41,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
+ </dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-addons-usertask-storage-jpa</artifactId>
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 2e855b05d1..95c233937c 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
@@ -19,10 +19,26 @@
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.context.annotation.Bean;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@SpringBootConfiguration
@EntityScan("org.jbpm.usertask.jpa.model")
public class SpringBootUserTaskJPAAutoConfiguration {
+
+ @Bean
+ public static BeanPostProcessor usertaskEmfPostProcessor() {
+ 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/springboot/bom/pom.xml b/springboot/bom/pom.xml
index 4fc06a63af..4f70bbd5f3 100644
--- a/springboot/bom/pom.xml
+++ b/springboot/bom/pom.xml
@@ -42,10 +42,10 @@
<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-2022.0-Release-Notes
-->
-
<version.org.springframework.cloud>2024.0.2</version.org.springframework.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.2.0</version.io.fabric8>
+ <version.io.fabric8>7.3.1</version.io.fabric8>
</properties>
<dependencyManagement>
diff --git
a/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/pom.xml
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/pom.xml
index 5a2782c45e..ca8983371b 100644
---
a/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/pom.xml
+++
b/springboot/integration-tests/integration-tests-springboot-processes-persistence-it/integration-tests-springboot-processes-postgresql/pom.xml
@@ -104,7 +104,7 @@
</dependency>
<dependency>
<groupId>com.ongres.scram</groupId>
- <artifactId>client</artifactId>
+ <artifactId>scram-client</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]