Hello,
I have a project built with Spring Boot 2, Java 11 and Drools 7, deployed in PCF (Pivotal Cloud Foundry).
I'm trying to upgrade this project to Spring Boot 3, Java 17 and Drools 9.
I replaced the following dependencies:
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>7.16.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>7.16.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.16.0.Final</version>
</dependency>
With:
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>9.44.0.Final</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-engine-classic</artifactId>
<version>9.44.0.Final</version>
</dependency>
Locally the app starts correctly and loads the rule, but when I deploy the app to PCF, I get errors like:
java.lang.NoClassDefFoundError: org/drools/mvel/accessors/BaseIntClassFieldReader\n\tat java.base/java.lang.ClassLoader.defineClass1(Native Method)\n\tat java.base/java.lang.ClassLoader.defineClass(Unknown Source)\n\tat org.drools.wiring.dynamic.DynamicComponentsSupplier$DefaultByteArrayClassLoader.defineClass(DynamicComponentsSupplier.java:68)\n\tat org.drools.mvel.asm.ClassFieldAccessorFactory.getClassFieldReader(ClassFieldAccessorFactory.java:96)\n\tat org.drools.mvel.asm.ClassFieldAccessorFactory.getClassFieldReader(ClassFieldAccessorFactory.java:50)\n\tat org.drools.core.base.ClassFieldAccessorCache$CacheEntry.getReadAccessor(ClassFieldAccessorCache.java:178)\n\tat org.drools.core.base.ClassFieldAccessorCache.getReadAccessor(ClassFieldAccessorCache.java:100)\n\tat org.drools.mvel.accessors.ClassFieldAccessorStore.wire(ClassFieldAccessorStore.java:279)\n\tat org.drools.mvel.accessors.ClassFieldAccessorStore.getReader(ClassFieldAccessorStore.java:112)\n\tat org.drools.mvel.accessors.ClassFieldAccessorStore.getReader(ClassFieldAccessorStore.java:90)\n\tat org.drools.mvel.MVELKnowledgePackageImpl.getReader(MVELKnowledgePackageImpl.java:113)\n\tat org.drools.compiler.rule.builder.PatternBuilder.getFieldReadAccessor(PatternBuilder.java:1791)\n\tat org.drools.compiler.rule.builder.PatternBuilder.getFieldReadAccessor(PatternBuilder.java:1755)\n\tat org.drools.compiler.rule.builder.PatternBuilder.buildConstraintForPattern(PatternBuilder.java:1167)\n\tat org.drools.compiler.rule.builder.PatternBuilder.buildRelationalExpression(PatternBuilder.java:1114)\n\tat org.drools.compiler.rule.builder.PatternBuilder.buildExpression(PatternBuilder.java:983)\n\tat org.drools.compiler.rule.builder.PatternBuilder.buildCcdDescr(PatternBuilder.java:955)\n\tat org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:765)\n\tat org.drools.compiler.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternBuilder.java:609)\n\tat org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:177)\n\tat org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:143)\n\tat org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:125)\n\tat org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:66)\n\tat org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:36)\n\tat org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:66)\n\tat org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:98)\n\tat org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.internalAddRule(ImmutableRuleCompilationPhase.java:339)\n\tat org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.addRule(ImmutableRuleCompilationPhase.java:334)\n\tat org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.compileRulesLevel(ImmutableRuleCompilationPhase.java:298)\n\tat org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.process(ImmutableRuleCompilationPhase.java:82)\n\tat java.base/java.util.Arrays$ArrayList.forEach(Unknown Source)\n\tat org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileKnowledgePackages(KnowledgeBuilderImpl.java:461)\n\tat org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addPackageWithResource(KnowledgeBuilderImpl.java:446)\n\tat org.drools.compiler.builder.impl.KnowledgeBuilderImpl.addKnowledgeResource(KnowledgeBuilderImpl.java:377)\n\tat org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:919)\n\tat org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:908)\n\tat com.garmin.ecommerce.drools.manager.KnowledgeWrapper.add(KnowledgeWrapper.java:22)\n\tat com.garmin.ecommerce.drools.manager.KnowledgeBaseFactory.lambda$fromPartitionedRules$3(KnowledgeBaseFactory.java:60)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)\n\tat java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)\n\tat java.base/java.util.AbstractList$RandomAccessSpliterator.forEachRemaining(Unknown Source)\n\tat java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)\n\tat java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)\n\tat java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)\n\tat java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)\n\tat java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)\n\tat com.garmin.ecommerce.drools.manager.KnowledgeBaseFactory.lambda$fromPartitionedRules$4(KnowledgeBaseFactory.java:60)\n\tat java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)\n\tat java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(Unknown Source)\n\tat java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)\n\tat java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)\n\tat java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)\n\tat java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)\n\tat java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)\nCaused by: java.lang.ClassNotFoundException: org.drools.mvel.accessors.BaseIntClassFieldReader\n\tat java.base/java.lang.ClassLoader.findClass(Unknown Source)\n\tat java.base/java.lang.ClassLoader.loadClass(Unknown Source)\n\tat
And:
Could not add Rule=rule1, errors -> Unable to resolve ObjectType 'LoopControl' : [Rule name='05c66cd8-a87d-49c7-b225-f70e0163b50a']\n\nUnable to resolve ObjectType 'Country'
............
Failed to compileShared: 1 compilation error(s): \n - (1,16) could not resolve class: LoopControl]\n[Near : {... drools.insert( new LoopControl( \"05c66cd8-a87 ....}]\n ^\n[Line: 27, Column: 0] : [Rule name='05c66cd8-a87d-49c7-b225-f70e0163b50a']\n\nError importing :
Any idea what dependency I'm missing and why those classes are not accessible at runtime?
Thank you,
Cristina