Двигатель слюни зависает при многократном сохранении состояния выполнения
Для каждого запроса я создаю новую сессию знаний, выполняю правила и в конце концов распоряжаюсь ею. Это прекрасно работает с несколькими запросами в среде разработки. Но в производственной среде с несколькими запросами движок Drools зависает с дампом потока ниже.
`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)`
Дамп потока показывает, что в JoinNodeLeftTuple.getLastHandle есть тупик (JoinNodeLeftTuple.java:536). Но так как я создаю отдельные сессии для каждого запроса, блокировка потока не должна происходить.
- В чем может быть причина тупика
- Как я могу решить эту проблему