Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-1135

NullPointerExceptions when using multiple concurrent KieSessions

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Critical Critical
    • 7.0.0.Beta1
    • None
    • core engine
    • None

      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:

      kieSession = kieBase.newKieSession();
      try {
        while (true) {
          work = getItemsFromQueue();
          addAndRemoveFacts(kieSession, work);
          kieSession.fireAllRules();
        }
      } finally {
        kieSession.dispose();
      }
      

      This causes the following exceptions:

      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)
      
      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)
      
      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)
      

              mfusco@redhat.com Mario Fusco
              mfusco@redhat.com Mario Fusco
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated:
                Resolved: