Open Edition

 View Only
  • 1.  Is it possible to build the Native image?

    Posted Thu July 20, 2023 01:11 AM

    Hi Everyone,

    Is it possible to build the native image using the GraalVM?

    I am using IBM BAMOE version 9.0. when I am trying to build a native image so then getting an error.
    Please find the below error logs.

    GraalVM Native Image: Generating 'kogito-dmn-optimization-example-s-1.0.0-SNAPSHOT-runner' (executable)...
    ========================================================================================================================
    [1/7] Initializing...                                                                                   (55.1s @ 0.29GB)
     Version info: 'GraalVM 22.3.2.1-Final Java 17 Mandrel Distribution'
     Java version info: '17.0.7+7'
     C compiler: gcc (redhat, x86_64, 8.5.0)
     Garbage collector: Serial GC
     4 user-specific feature(s)
     - com.oracle.svm.thirdparty.gson.GsonFeature
     - io.quarkus.runner.Feature: Auto-generated class by Quarkus from the existing extensions
     - io.quarkus.runtime.graal.DisableLoggingFeature: Disables INFO logging during the analysis phase for the [org.jboss.threads] categories
     - io.quarkus.runtime.graal.ResourcesFeature: Register each line in META-INF/quarkus-native-resources.txt as a resource on Substrate VM
    [2/7] Performing analysis...  [*******]                                                                (172.8s @ 1.54GB)
      19,232 (88.59%) of 21,709 classes reachable
      26,962 (62.25%) of 43,310 fields reachable
      91,853 (57.46%) of 159,856 methods reachable
       1,003 classes,   431 fields, and 5,300 methods registered for reflection
          63 classes,    68 fields, and    55 methods registered for JNI access
           4 native libraries: dl, pthread, rt, z

    Error: Class initialization of io.quarkus.runner.ApplicationImpl failed. Use the option --initialize-at-run-time=io.quarkus.runner.ApplicationImpl to explicitly request delayed initialization of this class.
    Detailed message:

    com.oracle.svm.core.util.UserError$UserException: Class initialization of io.quarkus.runner.ApplicationImpl failed. Use the option --initialize-at-run-time=io.quarkus.runner.ApplicationImpl to explicitly request delayed initialization of this class.
    Detailed message:

            at org.graalvm.nativeimage.builder/com.oracle.svm.core.util.UserError.abort(UserError.java:85)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.FallbackFeature.reportAsFallback(FallbackFeature.java:248)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:776)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:578)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:535)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:580)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:128)
    Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Class initialization of io.quarkus.runner.ApplicationImpl failed. Use the option --initialize-at-run-time=io.quarkus.runner.ApplicationImpl to explicitly request delayed initialization of this class.
    Detailed message:

            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:126)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:771)
            ... 5 more
    Caused by: java.lang.ExceptionInInitializerError
            at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
            at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ClassInitializationSupport.ensureClassInitialized(ClassInitializationSupport.java:172)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ProvenSafeClassInitializationSupport.computeInitKindAndMaybeInitializeClass(ProvenSafeClassInitializationSupport.java:344)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ProvenSafeClassInitializationSupport.computeInitKindAndMaybeInitializeClass(ProvenSafeClassInitializationSupport.java:75)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.classinitialization.ClassInitializationSupport.maybeInitializeHosted(ClassInitializationSupport.java:163)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.SVMHost.initializeType(SVMHost.java:267)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.initializeType(AnalysisUniverse.java:682)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.lambda$new$0(AnalysisType.java:293)
            at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
            at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AnalysisFuture.ensureDone(AnalysisFuture.java:63)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.ensureInitialized(AnalysisType.java:670)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.onReachable(AnalysisType.java:567)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.AtomicUtils.atomicMarkAndRun(AtomicUtils.java:52)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.lambda$registerAsReachable$7(AnalysisType.java:539)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.forAllSuperTypes(AnalysisType.java:650)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.forAllSuperTypes(AnalysisType.java:636)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.forAllSuperTypes(AnalysisType.java:632)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisType.registerAsReachable(AnalysisType.java:539)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ameta.AnalysisConstantReflectionProvider.registerAsReachable(AnalysisConstantReflectionProvider.java:254)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.ameta.HostedDynamicHubFeature.replace(HostedDynamicHubFeature.java:52)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisUniverse.replaceObject(AnalysisUniverse.java:595)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.snippets.ReflectionPlugins.getIntrinsic(ReflectionPlugins.java:567)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.snippets.ReflectionPlugins.pushConstant(ReflectionPlugins.java:608)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.snippets.ReflectionPlugins.processClassForName(ReflectionPlugins.java:339)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.snippets.ReflectionPlugins$3.apply(ReflectionPlugins.java:271)
            at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.execute(InvocationPlugin.java:329)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.applyInvocationPlugin(BytecodeParser.java:2264)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.AnalysisGraphBuilderPhase$AnalysisBytecodeParser.applyInvocationPlugin(AnalysisGraphBuilderPhase.java:89)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.tryInvocationPlugin(BytecodeParser.java:2203)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.AnalysisGraphBuilderPhase$AnalysisBytecodeParser.tryInvocationPlugin(AnalysisGraphBuilderPhase.java:70)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.appendInvoke(BytecodeParser.java:1887)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1671)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.genInvokeStatic(BytecodeParser.java:1651)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBytecode(BytecodeParser.java:5288)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.iterateBytecodesForBlock(BytecodeParser.java:3385)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.handleBytecodeBlock(BytecodeParser.java:3345)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.processBlock(BytecodeParser.java:3190)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.build(BytecodeParser.java:1138)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.BytecodeParser.buildRootMethod(BytecodeParser.java:1030)
            at jdk.internal.vm.compiler/org.graalvm.compiler.java.GraphBuilderPhase$Instance.run(GraphBuilderPhase.java:97)
            at org.graalvm.nativeimage.builder/com.oracle.svm.hosted.phases.SharedGraphBuilderPhase.run(SharedGraphBuilderPhase.java:84)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.run(Phase.java:49)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.BasePhase.apply(BasePhase.java:446)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:42)
            at jdk.internal.vm.compiler/org.graalvm.compiler.phases.Phase.apply(Phase.java:38)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.AnalysisParsedGraph.parseBytecode(AnalysisParsedGraph.java:135)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.meta.AnalysisMethod.ensureGraphParsed(AnalysisMethod.java:685)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.lookupEncodedGraph(InlineBeforeAnalysis.java:180)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.doInline(PEGraphDecoder.java:1162)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.tryInline(PEGraphDecoder.java:1145)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.trySimplifyInvoke(PEGraphDecoder.java:1003)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.handleInvoke(PEGraphDecoder.java:957)
            at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.GraphDecoder.processNextNode(GraphDecoder.java:817)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysisGraphDecoder.processNextNode(InlineBeforeAnalysis.java:240)
            at jdk.internal.vm.compiler/org.graalvm.compiler.nodes.GraphDecoder.decode(GraphDecoder.java:548)
            at jdk.internal.vm.compiler/org.graalvm.compiler.replacements.PEGraphDecoder.decode(PEGraphDecoder.java:833)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.phases.InlineBeforeAnalysis.decodeGraph(InlineBeforeAnalysis.java:98)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.parse(MethodTypeFlowBuilder.java:179)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlowBuilder.apply(MethodTypeFlowBuilder.java:349)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.createFlowsGraph(MethodTypeFlow.java:93)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.ensureFlowsGraphCreated(MethodTypeFlow.java:83)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.flow.MethodTypeFlow.getOrCreateMethodFlowsGraph(MethodTypeFlow.java:65)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.typestate.DefaultStaticInvokeTypeFlow.update(DefaultStaticInvokeTypeFlow.java:64)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.PointsToAnalysis$1.run(PointsToAnalysis.java:488)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.executeCommand(CompletionExecutor.java:193)
            at org.graalvm.nativeimage.pointsto/com.oracle.graal.pointsto.util.CompletionExecutor.lambda$executeService$0(CompletionExecutor.java:177)
            at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395)
            at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
            at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
            at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
            at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
            at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
    Caused by: java.lang.RuntimeException: Failed to start quarkus
            at io.quarkus.runner.ApplicationImpl.<clinit>(Unknown Source)
            ... 74 more
    Caused by: java.lang.SecurityException: class "com.ibm.bamoe.ilmt.quarkus.pamoe.PAMOESwidTagGen"'s signer information does not match signer information of other classes in the same package
            at java.base/java.lang.ClassLoader.checkCerts(ClassLoader.java:1158)
            at java.base/java.lang.ClassLoader.preDefineClass(ClassLoader.java:902)
            at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
            at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
            at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
            at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
            at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
            at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
            at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
            at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
            at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
            at java.base/jdk.internal.loader.Loader.loadClass(Loader.java:564)
            at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
            at java.base/java.lang.Class.forName0(Native Method)
            at java.base/java.lang.Class.forName(Class.java:467)
            at com.ibm.bamoe.ilmt.quarkus.pamoe.PAMOESwidTagGen_Bean.<init>(Unknown Source)
            at io.quarkus.arc.setup.Default_ComponentsProvider.addBeans2(Unknown Source)
            at io.quarkus.arc.setup.Default_ComponentsProvider.getComponents(Unknown Source)
            at io.quarkus.arc.impl.ArcContainerImpl.<init>(ArcContainerImpl.java:117)
            at io.quarkus.arc.Arc.initialize(Arc.java:31)
            at io.quarkus.arc.runtime.ArcRecorder.initContainer(ArcRecorder.java:43)
            at io.quarkus.deployment.steps.ArcProcessor$generateResources844392269.deploy_0(Unknown Source)
            at io.quarkus.deployment.steps.ArcProcessor$generateResources844392269.deploy(Unknown Source)
            ... 75 more
    ------------------------------------------------------------------------------------------------------------------------
                            12.9s (5.5% of total time) in 48 GCs | Peak RSS: 3.32GB | CPU load: 5.13
    ========================================================================================================================
    Failed generating 'kogito-dmn-optimization-example-s-1.0.0-SNAPSHOT-runner' after 3m 49s.
    Error: Image build request failed with exit status 1
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  06:06 min
    [INFO] Finished at: 2023-07-20T10:31:30+05:30
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal io.quarkus.platform:quarkus-maven-plugin:2.16.7.Final:build (default) on project kogito-dmn-optimization-example-s: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [ERROR]         [error]: Build step io.quarkus.deployment.pkg.steps.NativeImageBuildStep#build threw an exception: io.quarkus.deployment.pkg.steps.NativeImageBuildStep$ImageGenerationFailureException: Image generation failed. Exit code: 1
    [ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.imageGenerationFailed(NativeImageBuildStep.java:422)
    [ERROR]         at io.quarkus.deployment.pkg.steps.NativeImageBuildStep.build(NativeImageBuildStep.java:263)
    [ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [ERROR]         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [ERROR]         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [ERROR]         at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    [ERROR]         at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
    [ERROR]         at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
    [ERROR]         at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
    [ERROR]         at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
    [ERROR]         at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
    [ERROR]         at java.base/java.lang.Thread.run(Thread.java:829)
    [ERROR]         at org.jboss.threads.JBossThread.run(JBossThread.java:501)
    [ERROR] -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException



    ------------------------------
    Kishan Kumar
    ------------------------------


  • 2.  RE: Is it possible to build the Native image?

    Posted Thu July 20, 2023 09:06 AM

    Hi, thanks for the question, it should be possible. I am checking locally what is causing this. When I know more, I will let you know here. 



    ------------------------------
    Tibor Zimányi
    Principal Software Engineer
    IBM
    ------------------------------



  • 3.  RE: Is it possible to build the Native image?

    Posted Tue August 01, 2023 04:13 AM

    Hi, I created a discussion in the Quarkus group. Please see here: https://github.com/quarkusio/quarkus/discussions/34909. I think it may be a problem in GraalVM that needs to be solved. I will let you know when I find out more. 



    ------------------------------
    Tibor Zimányi
    Principal Software Engineer
    IBM
    ------------------------------



  • 4.  RE: Is it possible to build the Native image?

    Posted Thu August 17, 2023 07:45 AM

    Hi Tibor,

    I am following up on this thread.



    ------------------------------
    Kishan Kumar
    ------------------------------



  • 5.  RE: Is it possible to build the Native image?

    Posted Wed August 30, 2023 04:53 AM

    Hi Tibor,

    When I remove a bamoe-ilmt-compliance-quarkus-pamoe dependency the build succeeds.



    ------------------------------
    Kishan Kumar
    ------------------------------



  • 6.  RE: Is it possible to build the Native image?

    Posted Wed August 30, 2023 06:29 AM

    Hi, yes, however that only fixes the symptom and not the problem. The problem is caused by having a signed jar as a dependency in the project. So it could happen with any other jar that would be used in the future and is signed. Also unfortunately I think the ilmt library is a required dependency with BAMOE. @Alex Porcelli can provide more info about the requirement.



    ------------------------------
    Tibor Zimányi
    Principal Software Engineer
    IBM
    ------------------------------



  • 7.  RE: Is it possible to build the Native image?

    Posted Wed September 13, 2023 10:07 AM

    Hi Kishan, 

    just an update - Quarkus team confirmed it is a bug in Quarkus. Please see here https://github.com/quarkusio/quarkus/issues/35906.

    Best regards,

    Tibor



    ------------------------------
    Tibor Zimányi
    ------------------------------



  • 8.  RE: Is it possible to build the Native image?

    Posted Mon January 15, 2024 07:20 AM

    Hi Everyone,

    The native Image build issue is fixed on DMOE version 9.0.1.Final



    ------------------------------
    Kishan Kumar
    ------------------------------