[
https://issues.jboss.org/browse/DROOLS-1135?page=com.atlassian.jira.plugi...
]
Eli Israel commented on DROOLS-1135:
------------------------------------
Any chance of a backport of this fix to 6.5.0 before it goes final? I know it's
probably asking a lot, but I'm hitting this problem often and would rather not have do
something ugly like a global lock around calls to rule engine execution.
I'm assuming that 7.0.0.Final is still some ways off and I'm looking for the
safest, quickest way to fix this up for our production usage. Thanks for considering
this.
NullPointerExceptions when using multiple concurrent KieSessions
----------------------------------------------------------------
Key: DROOLS-1135
URL:
https://issues.jboss.org/browse/DROOLS-1135
Project: Drools
Issue Type: Bug
Components: core engine
Reporter: Mario Fusco
Assignee: Mario Fusco
Priority: Critical
Fix For: 7.0.0.Beta1
A number of worker threads is running simultaneously in a thread pool. Each thread is
initialised with the same KieContainer from which they extract a KieBase using
KieContainer.getKieBase("name"). Each worker thread obtains a KieSession from
its KieBase, and then executes a simple loop, taking instructions from a queue, inserting
and removing facts based on those instructions, and then firing all rules:
{code}
kieSession = kieBase.newKieSession();
try {
while (true) {
work = getItemsFromQueue();
addAndRemoveFacts(kieSession, work);
kieSession.fireAllRules();
}
} finally {
kieSession.dispose();
}
{code}
This causes the following exceptions:
{code}
Exception in thread "Worker-1" java.lang.NullPointerException at
org.drools.core.reteoo.NodeTypeEnums.isLeftTupleSource(NodeTypeEnums.java:84)
at
org.drools.core.phreak.SegmentUtilities.updateRiaAndTerminalMemory(SegmentUtilities.java:380)
at
org.drools.core.phreak.SegmentUtilities.createSegmentMemory(SegmentUtilities.java:171)
at
org.drools.core.phreak.SegmentUtilities.getQuerySegmentMemory(SegmentUtilities.java:205)
at org.drools.core.phreak.SegmentUtilities.processQueryNode(SegmentUtilities.java:192)
at
org.drools.core.phreak.SegmentUtilities.createSegmentMemory(SegmentUtilities.java:115)
at
org.drools.core.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:166)
at
org.drools.core.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:63)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:300)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
at com.X.processRequests(X.java:86)
at com.X$$Lambda$104/975722152.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
{code}
{code}
Exception in thread "Worker-6" java.lang.NullPointerException at
org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:410)
at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:416)
at org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:416)
at org.drools.core.reteoo.ObjectTypeNode.checkDirty(ObjectTypeNode.java:274)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:294)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
at com.X.processRequests(X.java:86)
at com.X$$Lambda$162/1410998625.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
{code}
{code}
Exception in thread "Worker-7" java.lang.NullPointerException at
org.drools.core.reteoo.ObjectTypeNode.updateTupleSinkId(ObjectTypeNode.java:410)
at org.drools.core.reteoo.ObjectTypeNode.checkDirty(ObjectTypeNode.java:274)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:294)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:78)
at
org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:73)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.flushPropagations(StatefulKnowledgeSessionImpl.java:2017)
at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1334)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1288)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1306)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1297)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1278)
at com.X.processRequests(X.java:86)
at com.X$$Lambda$99/1591140286.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
{code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)