Using 4.0.7.
At some random time and after doing literally thousands of inserts and
retracts with no issue I suddenly get this when I do a retract from working
memory:
2009-10-17 13:25:59,511 ERROR [STDERR] Caused by:
java.lang.NullPointerException
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.base.com.m2syscorp.i24card.rulesengine.facts.CountryGroup648199445$getNum.getValue(Unknown
Source)
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:127)
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.base.evaluators.StringFactory$StringEqualEvaluator.evaluate(StringFactory.java:119)
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.util.AbstractHashTable$SingleIndex.equal(AbstractHashTable.java:552)
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.util.FactHandleIndexHashTable$FieldIndexEntry.matches(FactHandleIndexHashTable.java:379)
2009-10-17 13:25:59,511 ERROR [STDERR] at
org.drools.util.FactHandleIndexHashTable.remove(FactHandleIndexHashTable.java:200)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.JoinNode.retractObject(JoinNode.java:180)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateRetractObject(CompositeObjectSinkAdapter.java:375)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:189)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.Rete.retractObject(Rete.java:215)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.ReteooRuleBase.retractObject(ReteooRuleBase.java:211)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.reteoo.ReteooWorkingMemory.doRetract(ReteooWorkingMemory.java:79)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1023)
2009-10-17 13:25:59,512 ERROR [STDERR] at
org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:982)
2009-10-17 13:25:59,512 ERROR [STDERR] at
com.m2syscorp.i24card.rulesengine.engine.RulesEngineThread.WMSyncdInsertRetract(RulesEngineThread.java:496)
It does not happen every time, just suddenly. The worst of it is that
working memory is corrupted after that and has to be closed.
I would love to be able to recreated working memory with each transaction
(fireallrules) but it takes too long to create it. I have to do
transactions very quickly and creating a new stateful session
(workingmemory) takes about 250 - 800 milliseconds.
This just started happening recently after a code change to our app that
increased the number of inserts and retracts per transaction from about 35
to 1600+.
I have 5 different types of objects to be inserted into working memory,
parallel threads query our database for the facts to be inserted. They all
call the same synchronized method from those threads to RETRACT the previous
transactions facts then INSERT the new facts.
The INSERTS and RETRACTS are done via synchronized method. The queries
that get a list of fact handles are not.
Could there be an issue where pointers to facts in working memory might be
getting corrupted when INSERTS and RETRACTS are happening elsewhere?
Any help would be appreciated.
Scott