Native build fails with oracle drivers and kogito together #19121
Description
Describe the bug
I am using kogito and oracle in the same application.
The build fails with: Error: Detected a MBean server in the image heap. This is currently not supported, but could be changed in the future. Management beans are registered in many global caches that would need to be cleared and properly re-built at image build time. Class of disallowed object: com.sun.jmx.mbeanserver.JmxMBeanServer To see how this object got instantiated use --trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
I have tried different combination of options, which worked:
- test oracle + kogito with
--initialize-at-run-time=oracle.jdbc.datasource.impl.OracleDataSource
- test oracle + no kogito and no datasource init runtime
- test postgres + kogito
this looks similar to #19055, where the oracle driver has negative effects on other quarkus supported modules.
Expected behavior
Build passes.
Actual behavior
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /export/soft/appl/quarkus-order-proposal/OrderProposal/target/OrderProposal-2.0.0-SNAPSHOT-native-image-source-jar/OrderProposal-2.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /export/soft/appl/quarkus-order-proposal/OrderProposal/target/OrderProposal-2.0.0-SNAPSHOT-native-image-source-jar/OrderProposal-2.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on GraalVM 21.1.0 Java 11 CE (Java Version 11.0.11+8-jvmci-21.1-b05)
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] /home/sevel/graalvm-ce-java11-21.1.0/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false -J-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=3 -J-Duser.language=en -J-Duser.country=US -J-Dfile.encoding=UTF-8 --allow-incomplete-classpath -J-Djava.io.tmpdir=/home/sevel/tmpdir -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy\$BySpaceAndTime -H:+JNI -H:+AllowFoldMethods -jar OrderProposal-2.0.0-SNAPSHOT-runner.jar -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -J-Xmx10g -H:-AddAllCharsets -H:EnableURLProtocols=http,https -H:-UseServiceLoaderFeature -H:+StackTrace OrderProposal-2.0.0-SNAPSHOT-runner
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] classlist: 9,161.96 ms, 1.98 GB
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] (cap): 686.26 ms, 1.98 GB
WARNING: Method java.sql.SQLXML.<init>() not found.
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] setup: 3,764.39 ms, 1.98 GB
08:04:57,770 INFO [org.hib.Version] HHH000412: Hibernate ORM core version 5.5.4.Final
08:04:57,780 INFO [org.hib.ann.com.Version] HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
08:04:57,811 INFO [org.hib.dia.Dialect] HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
08:04:58,185 INFO [org.hib.val.int.uti.Version] HV000001: Hibernate Validator 6.2.0.Final
08:04:58,569 INFO [org.jbo.res.res.i18n] RESTEASY002225: Deploying javax.ws.rs.core.Application: class com.lodh.gestion.orderproposal.infrastructure.JaxRsActivator
08:06:03,772 INFO [org.jbo.threads] JBoss Threads version 3.4.0.Final
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] (clinit): 5,048.55 ms, 5.52 GB
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] (typeflow): 129,354.61 ms, 5.52 GB
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] (objects): 175,206.58 ms, 5.52 GB
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] (features): 7,396.31 ms, 5.52 GB
[OrderProposal-2.0.0-SNAPSHOT-runner:51851] analysis: 335,549.08 ms, 5.52 GB
Error: Unsupported features in 2 methods
Detailed message:
Error: Detected a MBean server in the image heap. This is currently not supported, but could be changed in the future. Management beans are registered in many global caches that would need to be cleared and properly re-built at image build time. Class of disallowed object: com.sun.jmx.mbeanserver.JmxMBeanServer To see how this object got instantiated use --trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by
indexing into array
constant java.lang.Object[]@6f97f709 reached by
reading field java.util.ArrayList.elementData of
constant java.util.ArrayList@3a670580 reached by
scanning method javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
Call path from entry point to javax.management.MBeanServerFactory.addMBeanServer(MBeanServer):
at javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:232)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:192)
at com.oracle.svm.core.jdk.management.ManagementSupport.getPlatformMBeanServer(ManagementSupport.java:250)
at com.oracle.svm.core.jdk.management.Target_java_lang_management_ManagementFactory.getPlatformMBeanServer(Target_java_lang_management_ManagementFactory.java:45)
at org.drools.core.management.DroolsManagementAgent.getMBeanServer(DroolsManagementAgent.java:273)
at org.drools.core.management.DroolsManagementAgent.registerMBean(DroolsManagementAgent.java:194)
at org.drools.core.management.DroolsManagementAgent.getKnowledgeSessionBean(DroolsManagementAgent.java:161)
at org.drools.core.management.DroolsManagementAgent.unregisterKnowledgeSessionUnderName(DroolsManagementAgent.java:138)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.dispose(StatefulKnowledgeSessionImpl.java:549)
at org.drools.core.impl.StatefulSessionPool.lambda$new$1(StatefulSessionPool.java:30)
at org.drools.core.impl.StatefulSessionPool$$Lambda$2379/0x00000007c45ac440.accept(Unknown Source)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:553)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0)
Error: type is not available in this platform: org.graalvm.compiler.hotspot.management.AggregatedMemoryPoolBean
Trace: Object was reached by
reading field java.lang.ref.Reference.referent of
constant java.util.WeakHashMap$Entry@cc808cd reached by
indexing into array
constant java.util.WeakHashMap$Entry[]@7ffcf51a reached by
reading field java.util.WeakHashMap.table of
constant com.sun.jmx.mbeanserver.MBeanIntrospector$MBeanInfoMap@40647ec1 reached by
scanning method com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
Call path from entry point to com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap():
at com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getClassMBeanInfo(MBeanIntrospector.java:416)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getMBeanInfo(MBeanIntrospector.java:392)
at com.sun.jmx.mbeanserver.MBeanSupport.<init>(MBeanSupport.java:139)
at com.sun.jmx.mbeanserver.MXBeanSupport.<init>(MXBeanSupport.java:66)
at com.sun.jmx.mbeanserver.Introspector.makeDynamicMBean(Introspector.java:203)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:888)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at com.sun.jmx.mbeanserver.JmxMBeanServer$2.run(JmxMBeanServer.java:1225)
at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:118)
at java.net.Socket.getOutputStream(Socket.java:969)
at org.jboss.logmanager.handlers.TcpOutputStream.flush(TcpOutputStream.java:214)
at java.io.PrintStream.flush(PrintStream.java:417)
at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:782)
at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
com.oracle.svm.core.util.UserError$UserException: Unsupported features in 2 methods
Detailed message:
Error: Detected a MBean server in the image heap. This is currently not supported, but could be changed in the future. Management beans are registered in many global caches that would need to be cleared and properly re-built at image build time. Class of disallowed object: com.sun.jmx.mbeanserver.JmxMBeanServer To see how this object got instantiated use --trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by
indexing into array
constant java.lang.Object[]@6f97f709 reached by
reading field java.util.ArrayList.elementData of
constant java.util.ArrayList@3a670580 reached by
scanning method javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
Call path from entry point to javax.management.MBeanServerFactory.addMBeanServer(MBeanServer):
at javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:232)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:192)
at com.oracle.svm.core.jdk.management.ManagementSupport.getPlatformMBeanServer(ManagementSupport.java:250)
at com.oracle.svm.core.jdk.management.Target_java_lang_management_ManagementFactory.getPlatformMBeanServer(Target_java_lang_management_ManagementFactory.java:45)
at org.drools.core.management.DroolsManagementAgent.getMBeanServer(DroolsManagementAgent.java:273)
at org.drools.core.management.DroolsManagementAgent.registerMBean(DroolsManagementAgent.java:194)
at org.drools.core.management.DroolsManagementAgent.getKnowledgeSessionBean(DroolsManagementAgent.java:161)
at org.drools.core.management.DroolsManagementAgent.unregisterKnowledgeSessionUnderName(DroolsManagementAgent.java:138)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.dispose(StatefulKnowledgeSessionImpl.java:549)
at org.drools.core.impl.StatefulSessionPool.lambda$new$1(StatefulSessionPool.java:30)
at org.drools.core.impl.StatefulSessionPool$$Lambda$2379/0x00000007c45ac440.accept(Unknown Source)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:553)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0)
Error: type is not available in this platform: org.graalvm.compiler.hotspot.management.AggregatedMemoryPoolBean
Trace: Object was reached by
reading field java.lang.ref.Reference.referent of
constant java.util.WeakHashMap$Entry@cc808cd reached by
indexing into array
constant java.util.WeakHashMap$Entry[]@7ffcf51a reached by
reading field java.util.WeakHashMap.table of
constant com.sun.jmx.mbeanserver.MBeanIntrospector$MBeanInfoMap@40647ec1 reached by
scanning method com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
Call path from entry point to com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap():
at com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getClassMBeanInfo(MBeanIntrospector.java:416)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getMBeanInfo(MBeanIntrospector.java:392)
at com.sun.jmx.mbeanserver.MBeanSupport.<init>(MBeanSupport.java:139)
at com.sun.jmx.mbeanserver.MXBeanSupport.<init>(MXBeanSupport.java:66)
at com.sun.jmx.mbeanserver.Introspector.makeDynamicMBean(Introspector.java:203)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:888)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at com.sun.jmx.mbeanserver.JmxMBeanServer$2.run(JmxMBeanServer.java:1225)
at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:118)
at java.net.Socket.getOutputStream(Socket.java:969)
at org.jboss.logmanager.handlers.TcpOutputStream.flush(TcpOutputStream.java:214)
at java.io.PrintStream.flush(PrintStream.java:417)
at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:782)
at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
at com.oracle.svm.core.util.UserError.abort(UserError.java:82)
at com.oracle.svm.hosted.FallbackFeature.reportAsFallback(FallbackFeature.java:233)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:798)
at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:582)
at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$2(NativeImageGenerator.java:495)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported features in 2 methods
Detailed message:
Error: Detected a MBean server in the image heap. This is currently not supported, but could be changed in the future. Management beans are registered in many global caches that would need to be cleared and properly re-built at image build time. Class of disallowed object: com.sun.jmx.mbeanserver.JmxMBeanServer To see how this object got instantiated use --trace-object-instantiation=com.sun.jmx.mbeanserver.JmxMBeanServer. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by
indexing into array
constant java.lang.Object[]@6f97f709 reached by
reading field java.util.ArrayList.elementData of
constant java.util.ArrayList@3a670580 reached by
scanning method javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
Call path from entry point to javax.management.MBeanServerFactory.addMBeanServer(MBeanServer):
at javax.management.MBeanServerFactory.addMBeanServer(MBeanServerFactory.java:418)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:232)
at javax.management.MBeanServerFactory.createMBeanServer(MBeanServerFactory.java:192)
at com.oracle.svm.core.jdk.management.ManagementSupport.getPlatformMBeanServer(ManagementSupport.java:250)
at com.oracle.svm.core.jdk.management.Target_java_lang_management_ManagementFactory.getPlatformMBeanServer(Target_java_lang_management_ManagementFactory.java:45)
at org.drools.core.management.DroolsManagementAgent.getMBeanServer(DroolsManagementAgent.java:273)
at org.drools.core.management.DroolsManagementAgent.registerMBean(DroolsManagementAgent.java:194)
at org.drools.core.management.DroolsManagementAgent.getKnowledgeSessionBean(DroolsManagementAgent.java:161)
at org.drools.core.management.DroolsManagementAgent.unregisterKnowledgeSessionUnderName(DroolsManagementAgent.java:138)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.dispose(StatefulKnowledgeSessionImpl.java:549)
at org.drools.core.impl.StatefulSessionPool.lambda$new$1(StatefulSessionPool.java:30)
at org.drools.core.impl.StatefulSessionPool$$Lambda$2379/0x00000007c45ac440.accept(Unknown Source)
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:714)
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:553)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0)
Error: type is not available in this platform: org.graalvm.compiler.hotspot.management.AggregatedMemoryPoolBean
Trace: Object was reached by
reading field java.lang.ref.Reference.referent of
constant java.util.WeakHashMap$Entry@cc808cd reached by
indexing into array
constant java.util.WeakHashMap$Entry[]@7ffcf51a reached by
reading field java.util.WeakHashMap.table of
constant com.sun.jmx.mbeanserver.MBeanIntrospector$MBeanInfoMap@40647ec1 reached by
scanning method com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
Call path from entry point to com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap():
at com.sun.jmx.mbeanserver.MXBeanIntrospector.getMBeanInfoMap(MXBeanIntrospector.java:68)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getClassMBeanInfo(MBeanIntrospector.java:416)
at com.sun.jmx.mbeanserver.MBeanIntrospector.getMBeanInfo(MBeanIntrospector.java:392)
at com.sun.jmx.mbeanserver.MBeanSupport.<init>(MBeanSupport.java:139)
at com.sun.jmx.mbeanserver.MXBeanSupport.<init>(MXBeanSupport.java:66)
at com.sun.jmx.mbeanserver.Introspector.makeDynamicMBean(Introspector.java:203)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:888)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:320)
at com.sun.jmx.mbeanserver.JmxMBeanServer$2.run(JmxMBeanServer.java:1225)
at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:118)
at java.net.Socket.getOutputStream(Socket.java:969)
at org.jboss.logmanager.handlers.TcpOutputStream.flush(TcpOutputStream.java:214)
at java.io.PrintStream.flush(PrintStream.java:417)
at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:782)
at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
at com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:129)
at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:795)
... 8 more
Error: Image build request failed with exit status 1
How to Reproduce?
Create an application with:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jdbc-oracle</artifactId>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus</artifactId>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-legacy-api</artifactId>
</dependency>
<dependency>
<groupId>org.kie.kogito</groupId>
<artifactId>kogito-quarkus-decisions</artifactId>
</dependency>
Output of uname -a
or ver
No response
Output of java -version
No response
GraalVM version (if different from Java)
21.1.0 Java 11 CE (Java Version 11.0.11+8-jvmci-21.1-b05)
Quarkus version or git rev
2.1.0.Final
Build tool (ie. output of mvnw --version
or gradlew --version
)
No response
Additional information
No response