Reputation: 117
For every request, I create a fresh knowledge session, execute the rules and eventually dispose it. This works fine with few requests in Development environment. But in production environment, with multiple requests the Drools engine hangs with below thread dump.
`java.lang.Thread.State: RUNNABLE
at org.drools.reteoo.JoinNodeLeftTuple.getLastHandle(JoinNodeLeftTuple.java:536)
at org.drools.reteoo.AccumulateNode.addMatch(AccumulateNode.java:862)
at org.drools.reteoo.AccumulateNode.modifyRightTuple(AccumulateNode.java:558)
at org.drools.reteoo.RightInputAdapterNode.modifyLeftTuple(RightInputAdapterNode.java:222)
at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:260)
at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:355)
at org.drools.reteoo.FromNode.modifyLeftTuple(FromNode.java:299)
at org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyChildLeftTuple(CompositeLeftTupleSinkAdapter.java:316)
at org.drools.reteoo.JoinNode.modifyRightTuple(JoinNode.java:286)
at org.drools.reteoo.BetaNode.modifyObject(BetaNode.java:429)
at org.drools.reteoo.JoinNode.modifyObject(JoinNode.java:459)
at org.drools.reteoo.SingleObjectSinkAdapter.propagateModifyObject(SingleObjectSinkAdapter.java:68)
at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:150)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:468)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:436)
at org.drools.reteoo.AlphaNode.modifyObject(AlphaNode.java:150)
at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:468)
at org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:425)
at org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:287)
at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:271)
at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:467)
at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:370)
at org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:311)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1191)
- locked <0x00000007297a2008> (a org.drools.common.DefaultAgenda)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1126)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1349)
at org.drools.common.AbstractWorkingMemory.fireAllRules (AbstractWorkingMemory.java:709)
- locked <0x00000007297a1e58> (a org.drools.reteoo.ReteooStatefulSession)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:673)
at org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:228)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.runRules(AuthRulesBusinessServiceImpl.java:387)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.runAdjudicationRules(AuthRulesBusinessServiceImpl.java:229)
at com.healthnet.hnfs.service.rls.AuthRulesBusinessServiceImpl.processAuth(AuthRulesBusinessServiceImpl.java:208)
at sun.reflect.GeneratedMethodAccessor4101.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)`
The thread dump shows that there is a Deadlock at JoinNodeLeftTuple.getLastHandle(JoinNodeLeftTuple.java:536). But as im creating seperate sessions for each request, this thread lock should not happen.
Upvotes: 0
Views: 948