[jboss-jira] [JBoss JIRA] (DROOLS-1135) NullPointerExceptions when using multiple concurrent KieSessions
Eli Israel (JIRA)
issues at jboss.org
Wed Oct 19 12:41:00 EDT 2016
[ https://issues.jboss.org/browse/DROOLS-1135?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13309396#comment-13309396 ]
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)
More information about the jboss-jira
mailing list