[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