FYI: I tested my application with the latest Drools release 5.2.0.Final and I couldn't
reproduce the problem described below. It seems that it is solved.
Best regards,
Wolfgang
Von: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] Im
Auftrag von Weiss, Wolfgang
Gesendet: Dienstag, 21. Juni 2011 10:19
An: rules-users(a)lists.jboss.org
Betreff: [rules-users] NullPointerException in RightTupleIndexHashTable.remove()
Hi all!
I encountered that null pointer exceptions occur when retracting an object from the
working memory. Sometimes the problem occurs sooner sometimes later but it certainly
happens. I think it also depends on the workload on the machine. Sometimes the NPE is
thrown in 'LeftTupleIndexHashTable' but mainly in
'RightTupleIndexHashTable'. After the exception is thrown, the object to retract
is still in the working memory. When I remove the line 'retract($obj)' in my rule,
I don't get an exception.
The problem occurs mainly in this rule, but also in other rules:
rule "remove a cross talk"
agenda-group "evaluation"
activation-group "ag-crossTalk"
lock-on-active true
salience 40
when
$ctf : CrossTalkFact($persID : uniquePersonID, $ctfTimestamp : timestamp)
$pers : AnalysisCue(cueType == AnalysisCue.ACTION_STOP_TALKING, uniquePersonID ==
$persID, timestamp > $ctfTimestamp) from entry-point "LowLevelCueStream"
then
retract($ctf); //the suspicious line
//... do some other things
end
My configuration:
drools.dialect.java.compiler = JANINO
EventProcessingOption = STREAM
I was able to reproduce the problem with following versions:
5.1.1
5.2.0.M1
5.2.0.CR1
Stack trace from the version: 5.2.0.CR1
org.drools.runtime.rule.ConsequenceException: rule: remove a cross talk
at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:915)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:844)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1055)
at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)
at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)
at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
...
Caused by: java.lang.NullPointerException
at
org.drools.core.util.RightTupleIndexHashTable.remove(RightTupleIndexHashTable.java:351)
at org.drools.reteoo.NotNode.retractRightTuple(NotNode.java:178)
at
org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:235)
at
org.drools.reteoo.EntryPointNode.retractObject(EntryPointNode.java:229)
at org.drools.common.NamedEntryPoint.retract(NamedEntryPoint.java:529)
at
org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:226)
at
eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0.defaultConsequence(Unknown
Source)
at
eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0DefaultConsequenceInvoker.evaluate(Unknown
Source)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:905)
... 31 more
Sometimes the exception occurs in the LeftTupleIndexHashTable:
org.drools.runtime.rule.ConsequenceException: rule: remove a cross talk
at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:915)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:844)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1055)
at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)
at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)
at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
...
Caused by: java.lang.NullPointerException
at
org.drools.core.util.LeftTupleIndexHashTable.remove(LeftTupleIndexHashTable.java:275)
at org.drools.reteoo.NotNode.retractLeftTuple(NotNode.java:231)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:212)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:86)
at org.drools.reteoo.JoinNode.retractLeftTuple(JoinNode.java:210)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateRetractLeftTuple(SingleLeftTupleSinkAdapter.java:212)
at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateRetractRightTuple(SingleLeftTupleSinkAdapter.java:119)
at org.drools.reteoo.JoinNode.retractRightTuple(JoinNode.java:192)
at
org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:235)
at
org.drools.reteoo.EntryPointNode.retractObject(EntryPointNode.java:229)
at org.drools.common.NamedEntryPoint.retract(NamedEntryPoint.java:529)
at
org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:226)
at
eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0.defaultConsequence(Unknown
Source)
at
eu.ta2.orchestration.engine.cueLifter.Rule_remove_a_cross_talk_0DefaultConsequenceInvoker.evaluate(Unknown
Source)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:905)
... 31 more
Any help is appreciated.
Best regards,
Wolfgang