mxh82 opened a new issue, #3907:
URL: https://github.com/apache/incubator-kie-kogito-runtimes/issues/3907
### Describe the bug
Builds fail with a BuildException NoSuchMethodError when implementing JDBC
Postgres persistence to an existing Java, Kafka Streams, Kogito, Quarkus
project.
Kogito generates protobuf files and marshallers for persisting variables.
The Kogito marshallers are based on the ProtoStream subproject of Inifispan.
Thus, the quarkus-persistence-jdbc dependency pulls in the
org.inifinispan.protostream:5.0.8.Final library.
It appears that the codegen marshaller is calling
Descriptor.getOption(String) with a parameter. This method does not take any
parameters.
### Expected behavior
The application should build, run, and persist data to the PostgreSQL
process_instances & correlation_instances tables, which have already been
created.
### Actual behavior
`java.lang.RuntimeException: java.lang.RuntimeException:
io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[error]: Build step
org.kie.kogito.quarkus.processes.deployment.ProcessesAssetsProcessor#postGenerationProcessing
threw an exception: java.lang.NoSuchMethodError:
'org.infinispan.protostream.descriptors.Option
org.infinispan.protostream.descriptors.Descriptor.getOption(java.lang.String)'
at
org.kie.kogito.codegen.process.persistence.marshaller.AbstractMarshallerGenerator.packageFromOption(AbstractMarshallerGenerator.java:320)
at
org.kie.kogito.codegen.process.persistence.marshaller.AbstractMarshallerGenerator.lambda$generate$1(AbstractMarshallerGenerator.java:114)
at java.base/java.util.function.Predicate.lambda$and$0(Predicate.java:69)
at
java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
at
java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(AbstractList.java:720)
at
java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at
java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at
java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at
java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at
java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at
org.kie.kogito.codegen.process.persistence.marshaller.AbstractMarshallerGenerator.generate(AbstractMarshallerGenerator.java:130)
at
org.kie.kogito.codegen.process.persistence.marshaller.AbstractMarshallerGenerator.generate(AbstractMarshallerGenerator.java:100)
at
org.kie.kogito.codegen.process.persistence.PersistenceGenerator.generateProtoMarshaller(PersistenceGenerator.java:157)
at
org.kie.kogito.codegen.process.persistence.PersistenceGenerator.internalGenerate(PersistenceGenerator.java:127)
at
org.kie.kogito.codegen.core.AbstractGenerator.generate(AbstractGenerator.java:72)
at
org.kie.kogito.quarkus.workflow.deployment.WorkflowProcessor.getGeneratedPersistenceFiles(WorkflowProcessor.java:238)
at
org.kie.kogito.quarkus.workflow.deployment.WorkflowProcessor.generatePersistenceInfo(WorkflowProcessor.java:214)
at
org.kie.kogito.quarkus.workflow.deployment.WorkflowProcessor.postGenerationProcessing(WorkflowProcessor.java:184)
at
java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732)
at
io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:856)
at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at
org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
at
org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
at
org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.jboss.threads.JBossThread.run(JBossThread.java:483) `
### How to Reproduce?
Use the application.properties entries and pom.xml list below, and run mvn
clean compile quarkus:dev
`kogito.persistence.type=jdbc
quarkus.datasource.username=kogito-user
quarkus.datasource.password=kogito-pass
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/kogito
quarkus.flyway.migrade-at-start=true
quarkus.datasource.db-kind=postgresql`
`<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company</groupId>
<artifactId>state-machine-svc</artifactId>
<version>0.40.0-SNAPSHOT</version>
<properties>
<compiler-plugin.version>3.8.1</compiler-plugin.version>
<lombok.version>1.18.34</lombok.version>
<quarkus.platform.artifact-id>quarkus-universe-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>3.15.1</quarkus.platform.version>
<quarkus-plugin.version>3.15.1</quarkus-plugin.version>
<java.version>17</java.version>
<maven.compiler.parameters>true</maven.compiler.parameters>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<surefire-plugin.version>3.0.0-M7</surefire-plugin.version>
<kie.version>10.0.0</kie.version>
<commons.text.version>1.12.0</commons.text.version>
<smallrye.version>4.20.0</smallrye.version>
<sonar.coverage.jacoco.xmlReportPaths>${project.build.directory}/jacoco-report/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
<sonar.jacoco.reportPath>${project.build.directory}/jacoco-quarkus.exec</sonar.jacoco.reportPath>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${quarkus.platform.group-id}</groupId>
<artifactId>${quarkus.platform.artifact-id}</artifactId>
<version>${quarkus.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-openapi</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-health</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-client-jackson</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-kafka-streams</artifactId>
</dependency>
<!-- <dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-messaging-kafka</artifactId>
</dependency> -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-quarkus-messaging</artifactId>
<version>${kie.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-quarkus-process-management</artifactId>
<version>${kie.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kogito-addons-quarkus-common-deployment</artifactId>
<version>${kie.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus</artifactId>
</dependency> -->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-quarkus-persistence-jdbc</artifactId>
<version>${kie.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-agroal</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-quarkus</artifactId>
<version>${kie.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>${commons.text.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.2.1-jre</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-mockito</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-reactive-messaging-kafka</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye.reactive</groupId>
<artifactId>smallrye-reactive-messaging-in-memory</artifactId>
<version>${smallrye.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams-test-utils</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.cloudevents</groupId>
<artifactId>cloudevents-core</artifactId>
<version>2.5.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus-test-utils</artifactId>
<version>${kie.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.logmanager</groupId>
<artifactId>log4j2-jboss-logmanager</artifactId>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus-plugin.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>native</id>
<activation>
<property>
<name>native</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<systemPropertyVariables>
<native.image.path>
${project.build.directory}/${project.build.finalName}-runner
</native.image.path>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<quarkus.package.type>native</quarkus.package.type>
</properties>
</profile>
</profiles>
</project>
`
### Output of `uname -a` or `ver`
Linux U-28V5CKGDPPKAD 6.8.0-1027-aws #29~22.04.1-Ubuntu SMP Sun Mar 30
07:45:38 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
### Output of `java -version`
openjdk version "21.0.6" 2025-01-21 LTS OpenJDK Runtime Environment
Temurin-21.0.6+7 (build 21.0.6+7-LTS) OpenJDK 64-Bit Server VM Temurin-21.0.6+7
(build 21.0.6+7-LTS, mixed mode, sharing)
### GraalVM version (if different from Java)
_No response_
### Kogito version or git rev (or at least Quarkus version if you are using
Kogito via Quarkus platform BOM)
kie version: 10.0.0 Quarkus version: 3.15.1
### Build tool (ie. output of `mvnw --version` or `gradlew --version`)
maven
### Additional information
I was able to get rid of the BuildException NoSuchMethodError by using the
non-quarkus version of the persistence-jdbc dependency:
`<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-addons-persistence-jdbc</artifactId>
<version>${kie.version}</version>
</dependency>
`
The application builds, runs, and the JUnits pass, but persistence doesn't
work when using this dependency.
The process_instances & correlation_instances tables are empty after
supplying data to the application that should be persisted.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]