在org.drools. reteooer . reteoobuilder . removerule (ReteooBu



我使用的是drools expert 5.4.0。最后,对于动态创建规则DRL、将其添加到知识库并触发规则的场景。我试图在稍后禁用/启用规则(在添加DRL之后)。为了实现这一点,我试图从知识库中删除禁用规则,如下所示:

    KnowledgeBase sessionBase = kSession.getKnowledgeBase();
    sessionBase.removeRule(RULE_PACKAGE_NAME, name);

第一次可以正常运行。

然后,通过再次添加DRL来启用该规则,如下所示:

    kBuilder.add(ResourceFactory.newByteArrayResource(rule.toDrl().getBytes()),
                ResourceType.DRL);
    kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());

然后,当我再次禁用它时,我得到以下异常:

    Caused by: java.lang.NullPointerException
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:259)
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:459)
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1107)
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1085)
at org.drools.impl.KnowledgeBaseImpl.removeRule(KnowledgeBaseImpl.java:208)
    ...

显然这个问题已经在早期版本的drools中得到了解决。非常感谢任何帮助。谢谢。

尝试5.5.1-SNAPSHOT,他们对规则删除算法进行了相当多的更改(现在是迭代的,以前是递归的)。这可能已经解决了问题。

编辑:is not最后,它只在5.5.1-SNAPSHOT

我的错。我的申请有问题。我还在5.4.0版本。最后,由于每次添加新规则时我都开始在知识构建器中记录规则名称,NPE已经消失了!谢谢你的帮助。

最新更新