我正在使用 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 中得到解决。任何帮助深表感谢。谢谢。