Слюни: Можно ли вызывать запросы из RHS правила? - PullRequest
0 голосов
/ 04 января 2019

У меня есть некоторый код, который вызывает KieRuntime :: getQueryResults () во время обработки действий над RHS правила, то есть в разгар KieRuntime :: fireAllRules ()

Как правило, в течение некоторого времени это нормально работало, но недавно при определенных обстоятельствах оно зашло в тупик.

Стек ниже иллюстрирует это (с некоторыми удаленными кадрами)

Я не уверен, поддерживается ли вообще такая операция, т. Е. Вызывает вторую операцию на KieSession из того же потока, который обрабатывает первый - кажется разумным, что это не будет.

Кто-нибудь может подтвердить / прокомментировать?

Спасибо.

"pool-1-thread-1@3924" prio=5 tid=0xf nid=NA waiting
  java.lang.Thread.State: WAITING
      at sun.misc.Unsafe.park(Unsafe.java:-1)
      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
      at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
      at org.drools.core.phreak.PropagationEntry$PropagationEntryWithResult.getResult(PropagationEntry.java:117)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.evalQuery(StatefulKnowledgeSessionImpl.java:895)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalGetQueryResult(StatefulKnowledgeSessionImpl.java:823)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.getQueryResults(StatefulKnowledgeSessionImpl.java:783)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.getQueryResults(StatefulKnowledgeSessionImpl.java:163)
...

      at org.drools.core.phreak.RuleExecutor.innerFireActivation(RuleExecutor.java:431)
      at org.drools.core.phreak.RuleExecutor.fireActivation(RuleExecutor.java:379)
      at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:135)
      at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:88)
      at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:34)
      at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
      at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1067)
      at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1014)
      at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1006)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1337)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1328)
      at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1312)
      at 
...
...