[rules-users] Are globals not permitted with queries?

Davide Sottara dsotty at gmail.com
Tue Jul 22 12:16:42 EDT 2014


The case may not be supported, but even then, it should be reported as
a compilation error, not as a NPE
I'll investigate and report back later
Thanks
Davide

On 07/22/2014 05:48 PM, Borris wrote:
> I was experimenting with ways of avoiding having to put literal strings 
> into my rules (it is very fragile and bugs can be silent for a long 
> time). I tried declaring a global and then tried supplying it to a 
> query. This generates a backtrace during the newKieSession. A simple 
> example to provoke the problem:
>
>
>              KieServices ks = KieServices.Factory.get();
>              KieContainer kContainer = ks.getKieClasspathContainer();
>              KieSession kSession = 
> kContainer.newKieSession("ksession-rules");
>
>              kSession.setGlobal("AString", "Hello World");
>
>              kSession.fireAllRules();
>
>
>
> package com.sample
>
> global java.lang.String AString;
>
> declare Thing
>      name: String @key
> end
>
> rule init
>      when
>      then
>          insert( new Thing( AString ) );
> end
>
> query test(String $in)
>      Thing( $in; )
> end
>
> rule spot
>      when
>          test( "Hello World"; )
>          Thing( "Hello World"; )
>          test( AString; )
>          Thing( AString; )
>      then
>          System.out.println("found msg\n");
> end
>
>
> java.lang.NullPointerException
>      at 
> org.drools.core.rule.LogicTransformer.processElement(LogicTransformer.java:243)
>      at 
> org.drools.core.rule.LogicTransformer.processElement(LogicTransformer.java:263)
>      at 
> org.drools.core.rule.LogicTransformer.fixClonedDeclarations(LogicTransformer.java:134)
>      at 
> org.drools.core.rule.LogicTransformer.transform(LogicTransformer.java:99)
>      at 
> org.drools.core.definitions.rule.impl.RuleImpl.getTransformedLhs(RuleImpl.java:560)
>      at 
> org.drools.core.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:105)
>      at org.drools.core.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:100)
>      at 
> org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1455)
>      at 
> org.drools.core.impl.KnowledgeBaseImpl.addRule(KnowledgeBaseImpl.java:1435)
>      at 
> org.drools.core.impl.KnowledgeBaseImpl.addPackages(KnowledgeBaseImpl.java:838)
>      at 
> org.drools.core.impl.KnowledgeBaseImpl.addKnowledgePackages(KnowledgeBaseImpl.java:266)
>      at 
> org.drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:412)
>      at 
> org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:346)
>      at 
> org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:498)
>      at 
> org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:469)
>      at com.sample.DroolsTest.main(DroolsTest.java:17)
>
>
> The 3rd action in the spot rule causes the null exception during 
> initialise, if it is present. Comment out just that line and no 
> exceptions happen and behaviour is as expected.
>
> Are globals permitted in the way I am trying to use them, as a parameter 
> to a query?
>
> Borris
>
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list