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@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users