[rules-users] Defeasible: NPE: with multiple @Defeasible

Mark Proctor mproctor at codehaus.org
Tue Jul 22 17:44:56 EDT 2014


Stack trace shows the error:
org.drools.core.beliefsystem.defeasible.DefeasibleBeliefSet.removeUndefeated(DefeasibleBeliefSet.java:295)
https://github.com/sotty/drools/blob/master/drools-core/src/main/java/org/drools/core/beliefsystem/defeasible/DefeasibleBeliefSet.java

Maybe have a go fixing it yourself? And submit the fix with a unit test, as a pull request?
http://docs.jboss.org/drools/release/5.6.0.Final/droolsjbpm-introduction-docs/html/gettingstarted.html

Mark
On 22 Jul 2014, at 20:40, Borris <borris at chaos.org.uk> wrote:

> Hi Davide,
> 
> I've got a null pointer exception with defeasible. My test case is:
> 
> package com.sample
> 
> declare Fact
>     fact: String @key
> end
> 
> rule init
>     when
>     then
>         System.out.println("inserting initial facts");
>         insert( new Fact( "one" ) );
>         insert( new Fact( "two" ) );
>         insert( new Fact( "two" ) );
> end
> 
> rule rule1
>     @Defeasible
>     enabled true
>     when
>         Fact( "one"; )
>     then
>         System.out.println("one causes wibble");
>         insertLogical( new Fact( "wibble") );
> end
> 
> rule rule2
>     @Defeasible
>     when
>         Fact( "two"; )
>     then
>         System.out.println("two causes wibble");
>         insertLogical( new Fact( "wibble") );
> end
> 
> rule rule3
>     @Defeater
>     @Defeats( "rule2" )
>     when
>         Fact( "two"; )
>     then
>         System.out.println("two negates wibble");
>         insertLogical( new Fact( "wibble"), "neg" );
> end
> 
> The output I get is
> 
> inserting initial facts
> one causes wibble
> two causes wibble
> two causes wibble
> two negates wibble
> two negates wibble
> Exception executing consequence for rule "rule3" in com.sample: 
> java.lang.NullPointerException
>     at 
> org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
>     at 
> org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1057)
>     at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:152)
>     at 
> org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:94)
>     at 
> org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:964)
>     at 
> org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1234)
>     at 
> org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1239)
>     at 
> org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1212)
>     at com.sample.DroolsTest.main(DroolsTest.java:21)
> Caused by: java.lang.NullPointerException
>     at 
> org.drools.core.beliefsystem.defeasible.DefeasibleBeliefSet.removeUndefeated(DefeasibleBeliefSet.java:295)
>     at 
> org.drools.core.beliefsystem.defeasible.DefeasibleBeliefSet.add(DefeasibleBeliefSet.java:126)
>     at 
> org.drools.core.beliefsystem.jtms.JTMSBeliefSystem.insert(JTMSBeliefSystem.java:52)
>     at 
> org.drools.core.beliefsystem.defeasible.DefeasibleBeliefSystem.insert(DefeasibleBeliefSystem.java:45)
>     at 
> org.drools.core.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:136)
>     at 
> org.drools.core.common.TruthMaintenanceSystem.addLogicalDependency(TruthMaintenanceSystem.java:107)
>     at 
> org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:234)
>     at 
> org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1430)
>     at 
> org.drools.core.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:275)
>     at 
> org.drools.core.base.DefaultKnowledgeHelper.insertLogical(DefaultKnowledgeHelper.java:247)
>     at 
> com.sample.Rule_rule32132126114.defaultConsequence(Rule_rule32132126114.java:8)
>     at 
> com.sample.Rule_rule32132126114DefaultConsequenceInvokerGenerated.evaluate(Unknown 
> Source)
>     at 
> com.sample.Rule_rule32132126114DefaultConsequenceInvoker.evaluate(Unknown Source)
>     at 
> org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1046)
>     ... 7 more
> 
> 
> I believe I am using snapshot 6.1.0.201407170510 but I suspect the 
> precise version doesn't matter too much.
> 
> In the above example, if you disable rule1 then the NPE doesn't happen. 
> Only doing one "two" fact insertion in the init rule likewise means the 
> NPE doesn't happen. I think the issue is something like rule3 does more 
> than one defeat on rule2's scoring on "wibble" fact, but rule1 still has 
> a say in the continuing existence of the "wibble" fact.
> 
> Should I get a Jira log in and enter these well qualified bugs directly?
> 
> Regards,
> 
> 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