как создать многоразовый KieBase в слюнях 7 - PullRequest
0 голосов
/ 11 января 2019

Мы создаем KIEBases прагматически следующим образом и храним скомпилированные Kiebases на карте Java:

private static Map<String, KieBase> kieBaseMap = new HashMap<>();

public setKieBaseMap(String groupId,String drl){
    KieHelper kieHelper = new KieHelper();
    kieHelper.addContent(drl, ResourceType.DRL);
    Results results = kieHelper.verify(); 
    kieBaseMap.put(groupId,kieHelper.build()); 
}

StatelessKieSession buildKieSession(String ruleGroupId) {
    return kieBaseMap.get(ruleGroupId).newStatelessKieSession();
}

но если мы пытаемся выполнить тот же Kiebase снова, мы получаем ниже Исключение:

java.lang.NullPointerException
    at org.drools.core.phreak.PhreakJoinNode.doLeftInserts(PhreakJoinNode.java:95)
    at org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:71)
    at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:552)
    at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:538)
    at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:373)
    at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:333)
    at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:169)
    at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:127)
    at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:212)
    at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:87)
    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:1308)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1299)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1283)
    at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:281)

Я установил drools.getWorkingMemory().getKnowledgeBase().getConfiguration().setProperty(SequentialOption.PROPERTY_NAME,"true")

чтобы выполнить все правила по порядку. Пожалуйста, помогите, почему я получаю это исключение

Ответы [ 2 ]

0 голосов
/ 29 января 2019

, так как я хотел запускать группы Повестки дня последовательно, необходимо было установить SequentialAgendaOption.DYNAMIC во время создания модуля самостоятельно:

 kieSessionBuilder.setKieBaseMap(
        ruleGroupId, kieHelper.build(SequentialAgendaOption.DYNAMIC, SequentialOption.YES));

тогда эта проблема не пришла

0 голосов
/ 11 января 2019

Это похоже на ошибку. Какую версию Drools вы используете? Последний выпущенный должен быть 7.16.0.Final. Если вы не используете эту версию, не могли бы вы попробовать использовать ее? Если и в последней версии произойдет сбой, создайте заявку в https://issues.jboss.org, в идеале с репродуктором. Воспроизводителем может быть простой тест JUnit, описывающий ваш вариант использования и создающий исключение.

...