Hanging/Long waiting threads in BRMS/BPM Suite 6 when using rule engine in active mode

Solution Unverified - Updated -

Issue

When following Drools community document page 7.5.2. Active Mode to run rules engine in the below way

KieSessionConfiguration config = KieServices.Factory.get().newKieSessionConfiguration();
config.setOption( ClockTypeOption.get("realtime") );
KieSession session = kbase.newKieSession( conf, null );

new Thread( new Runnable() {
  @Override
  public void run() {
      session.fireUntilHalt();
  }
} ).start();

Hanging or long time waiting threads can be observed (application becomes unresponsive) when calling StatefulKnowledgeSessionImpl.insert(fact) method in another thread.

Checking the thread dumps, there is a HashMap (which is thread unsafe) being used by 2 (or more) different threads like below:

"Thread-83" prio=10 tid=0x00007f1dcc900000 nid=0x659c runnable [0x00007f1d798d7000]
   java.lang.Thread.State: RUNNABLE
    at java.util.HashMap.put(HashMap.java:498)
    at org.drools.core.time.impl.TrackableTimeJobFactoryManager.addTimerJobInstance(TrackableTimeJobFactoryManager.java:65)
    at org.drools.core.time.impl.JDKTimerService.internalSchedule(JDKTimerService.java:126)
    at org.drools.core.time.impl.JDKTimerService.scheduleJob(JDKTimerService.java:99)
    ... ...
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1541)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1487)

"Thread--fireUntilHalt" prio=10 tid=0x00007f1dcc840800 nid=0x1d7b runnable [0x00007f1d7adec000] java.lang.Thread.State: RUNNABLE at java.util.HashMap.removeEntryForKey(HashMap.java:694) at java.util.HashMap.remove(HashMap.java:660) at org.drools.core.time.EnqueuedSelfRemovalJobContext$1.execute(EnqueuedSelfRemovalJobContext.java:35) ... ... at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1404) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireUntilHalt(StatefulKnowledgeSessionImpl.java:1383)

Environment

  • Red Hat JBoss BRMS
  • Red Hat JBoss BPM Suite
    • 6.x
    • 7.0

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content