[rules-users] Exception when using retract

Weiss, Wolfgang Wolfgang.Weiss at joanneum.at
Thu Apr 25 10:02:13 EDT 2013


Hi all!

I noticed problems when using retract in rules. Thereby, I get sometimes NullPointerExceptions like this (Drools Version 6.0.0.Beta1):
Exception executing consequence for rule "rule 6 - ts filter" in test: java.lang.NullPointerException
                at org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
                at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1409)
                at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1328)
                at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1546)
                at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:637)
                at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:601)
                at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:233)
                at test.DroolsMain.insertEvent(DroolsMain.java:50)
                at test.EventSender.run(EventSender.java:73)
                at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
                at org.drools.core.util.index.LeftTupleIndexHashTable.remove(LeftTupleIndexHashTable.java:381)
                at org.drools.core.reteoo.NotNode.retractLeftTuple(NotNode.java:301)
                at org.drools.core.reteoo.CompositeLeftTupleSinkAdapter.doPropagateRetractLeftTuple(CompositeLeftTupleSinkAdapter.java:261)
                at org.drools.core.reteoo.CompositeLeftTupleSinkAdapter.propagateRetractRightTuple(CompositeLeftTupleSinkAdapter.java:172)
                at org.drools.core.reteoo.JoinNode.retractRightTuple(JoinNode.java:181)
                at org.drools.core.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:344)
                at org.drools.core.reteoo.EntryPointNode.retractObject(EntryPointNode.java:406)
                at org.drools.core.common.NamedEntryPoint.delete(NamedEntryPoint.java:591)
                at org.drools.core.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:429)
                at test.Rule_rule_6___ts_filter247591339.defaultConsequence(Rule_rule_6___ts_filter247591339.java:18)
                at test.Rule_rule_6___ts_filter247591339DefaultConsequenceInvokerGenerated.evaluate(Unknown Source)
                at test.Rule_rule_6___ts_filter247591339DefaultConsequenceInvoker.evaluate(Unknown Source)
                at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1399)
                ... 8 more


Or, using Drools 5.5.1-SNAPSHOT
Exception executing consequence for rule "rule 3 - remove start stop fact" in test: java.lang.NullPointerException
                at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1291)
                at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1215)
                at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1450)
                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)
                at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)
                at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:230)
                at test.DroolsMain.insertEvent(DroolsMain.java:50)
                at test.EventSender.run(EventSender.java:73)
                at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
                at org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:419)
                at test.Rule_rule_3___remove_start_stop_fact.defaultConsequence(Rule_rule_3___remove_start_stop_fact.java:8)
                at test.Rule_rule_3___remove_start_stop_factDefaultConsequenceInvokerGenerated.evaluate(Unknown Source)
                at test.Rule_rule_3___remove_start_stop_factDefaultConsequenceInvoker.evaluate(Unknown Source)
                at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1281)
                ... 8 more


The problematic rules mostly look something like this:
rule "rule 6 - ts filter"
  agenda-group "evaluation"

  when
    $evtA : Event(type == EventType.START) from entry-point "InputStream"
    $evtB : Event(type == EventType.START, this after $evtA, this != $evtA, senderId == $evtA.senderId) from entry-point "InputStream"
  then
    //do something
    //...
    retract($evtA);
end

The exception does not immediately occur. Sometimes it occurs sooner, sometimes it takes longer until it occurs. When the exception is thrown, it looks like that the event is not removed from the knowledge base (I watch the number of events in the knowledge base - fact count). I made the experience that this problem only occurs when the rule file grows (e.g. when there are more than 10 rules to execute) and when the load increases. To work temporarily around this problem, I set the java process to use only 1 processor in the windows task manager - which looks like this is a multi threading issue.
I can reproduce this exception with the Drools versions 5.5.0, 5.5.1-SNAPSHOT and 6.0.0.Beta1. I did not test the previous versions explicitly.

Please find attached a small dummy test application to reproduce this problem. Execute therefore the main method from the class "test.DroolsMain". Depending on your machine and load, the problem occurs sometimes sooner or sometimes later. Or, you might notice some other exception, but the problem when retracting events or facts is currently the biggest one in my productive applications.

Best regards,
Wolfgang

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130425/b3cf07dd/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Drools-Test-Application.zip
Type: application/x-zip-compressed
Size: 12930 bytes
Desc: Drools-Test-Application.zip
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20130425/b3cf07dd/attachment-0001.bin 


More information about the rules-users mailing list