1

我正在使用 drools 专家 5.4.0.Final,用于动态创建规则 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 中得到解决。任何帮助深表感谢。谢谢。

4

2 回答 2

0

我的坏..我的申请有问题。我还在 5.4.0.Final 上,自从每次添加新规则时我开始在知识构建器中记录规则名称以来,NPE 就消失了!谢谢你的帮助。

于 2013-04-15T10:31:45.797 回答
0

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

编辑:不在5.5.0.Final 中,仅在 5.5.1-SNAPSHOT

于 2013-04-12T10:11:41.067 回答