[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