dcdh opened a new issue, #6248:
URL: https://github.com/apache/incubator-kie-drools/issues/6248

   Hello,
   
   I am dynamically loading a rule at runtime this way:
   
   ```java
       @Path("/shouldServerBeValid")
       @POST
       public boolean shouldServerBeValid() {
           final KieServices kieServices = KieServices.Factory.get();
           final KieFileSystem kieFileSystem = getKieFileSystem(kieServices);
           kieServices.newKieBuilder(kieFileSystem).buildAll();
           final KieContainer kContainer = 
kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
           final KieBase kieBase = kContainer.getKieBase();
           for (final KiePackage kp : kieBase.getKiePackages() ) {
               for (final Rule rule : kp.getRules()) {
                   Log.info("kp " + kp + " rule " + rule.getName());
               }
           }
           try (final KieSession session = kieBase.newKieSession()) {
               final Server s1 = new Server("rhel7", 2, 1024, 2048);
               session.insert(s1);
               session.fireAllRules();
               return s1.isValid();
           }
       }
   
       private KieFileSystem getKieFileSystem(final KieServices kieServices) {
           final KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
           // language=drl
           final String externalDrl = """
                   import  org.acme.Server
                   dialect "java"
                   rule "Check Server Configuration"
                     when
                     $server : Server( processors < 2 || memory<=1024 || 
diskspace <= 2048)
                     then
                     $server.setValid(false);
                     System.out.println("Server "+ $server.getName() + " 
configuration does not meet requirements!");
                   end
                   """;
           kieFileSystem.write("src/main/resources/rules/external.drl", 
externalDrl);
           return kieFileSystem;
       }
   ```
   
   With these maven dependencies:
   
   ```xml
           <dependency>
               <groupId>org.drools</groupId>
               <artifactId>drools-quarkus</artifactId>
               <version>10.0.0</version>
           </dependency>
           <dependency>
               <groupId>org.drools</groupId>
               <artifactId>drools-ruleunits-engine</artifactId>
               <version>10.0.0</version>
           </dependency>
           <dependency>
               <groupId>org.drools</groupId>
               <artifactId>drools-compiler</artifactId>
               <version>10.0.0</version>
           </dependency>
           <dependency>
               <groupId>org.drools</groupId>
               <artifactId>drools-mvel</artifactId>
               <version>10.0.0</version>
           </dependency>
   ```
   
   Running it will lead to this exception:
   
   ```
   Suppressed: java.lang.NullPointerException: Cannot invoke 
"org.drools.compiler.compiler.Dialect.analyzeExpression(org.drools.compiler.rule.builder.PackageBuildContext,
 org.drools.drl.ast.descr.BaseDescr, Object, 
org.drools.compiler.compiler.BoundIdentifiers)" because the return value of 
"org.drools.compiler.rule.builder.RuleBuildContext.getDialect()" is null
                at 
org.drools.compiler.rule.builder.PatternBuilder.buildAnalysis(PatternBuilder.java:1585)
                at 
org.drools.compiler.rule.builder.PatternBuilder.buildEval(PatternBuilder.java:1508)
                at 
org.drools.compiler.rule.builder.PatternBuilder.createAndBuildPredicate(PatternBuilder.java:1390)
                at 
org.drools.compiler.rule.builder.PatternBuilder.buildExpression(PatternBuilder.java:998)
                at 
org.drools.compiler.rule.builder.PatternBuilder.buildCcdDescr(PatternBuilder.java:957)
                at 
org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:767)
                at 
org.drools.compiler.rule.builder.PatternBuilder.processConstraintsAndBinds(PatternBuilder.java:611)
                at 
org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:179)
                at 
org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:145)
                at 
org.drools.compiler.rule.builder.PatternBuilder.build(PatternBuilder.java:127)
                at 
org.drools.compiler.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:68)
                at 
org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:100)
                at 
org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.internalAddRule(ImmutableRuleCompilationPhase.java:342)
                at 
org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.addRule(ImmutableRuleCompilationPhase.java:337)
                at 
org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.compileRulesLevel(ImmutableRuleCompilationPhase.java:301)
                at 
org.drools.compiler.builder.impl.processors.ImmutableRuleCompilationPhase.process(ImmutableRuleCompilationPhase.java:85)
                at 
java.base/java.util.Arrays$ArrayList.forEach(Arrays.java:4305)
                at 
org.drools.compiler.builder.impl.KnowledgeBuilderImpl.compileKnowledgePackages(KnowledgeBuilderImpl.java:457)
                at 
org.drools.compiler.builder.impl.KnowledgeBuilderImpl.buildRules(KnowledgeBuilderImpl.java:1016)
                at 
org.drools.compiler.builder.impl.KnowledgeBuilderImpl.doFirstBuildStep(KnowledgeBuilderImpl.java:990)
                at 
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:119)
                at 
org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:109)
                at 
org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:280)
                at 
org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:220)
                at 
org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:84)
                at 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:285)
                at 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:251)
                at 
org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:198)
                at 
org.acme.RuntimeEndpoint.shouldServerBeValid(RuntimeEndpoint.java:53)
                at 
org.acme.RuntimeEndpoint$quarkusrestinvoker$shouldServerBeValid_91e5a3b77fe1b0322ebde70ff08c3aabb2e3173b.invoke(Unknown
 Source)
                at 
org.jboss.resteasy.reactive.server.handlers.InvocationHandler.handle(InvocationHandler.java:29)
   ```
   
   The getDialect() returns null from this point because it will define it to 
"mvel"
   
   
https://github.com/kiegroup/drools/blob/ee4c7c6a6c3753cc5e6abc76c5f5e0ebca62c9a1/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PatternBuilder.java#L1386
   
   ```java
       protected Constraint createAndBuildPredicate(RuleBuildContext context,
                                                    Pattern pattern,
                                                    BaseDescr base,
                                                    String expr,
                                                    Map<String, OperatorDescr> 
aliases) {
           Dialect dialect = context.getDialect();
           context.setDialect(context.getDialect("mvel"));
   
           PredicateDescr pdescr = new 
PredicateDescr(context.getRuleDescr().getResource(), expr);
           pdescr.copyParameters(base);
           pdescr.copyLocation(base);
           Constraint evalConstraint = buildEval(context, pattern, pdescr, 
aliases, expr, false);
   
           // fall back to original dialect
           context.setDialect(dialect);
           return evalConstraint;
       }
   ```
   
   To fix this exception I had to a dependency on mvel even if I do not use it.
   
   ```xml
           <dependency>
               <groupId>org.drools</groupId>
               <artifactId>drools-mvel</artifactId>
               <version>10.0.0</version>
           </dependency>
   ```
   
   Regards,
   
   Damien
   


-- 
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]

Reply via email to