動的にルール DRL を作成し、それをナレッジベースに追加してルールを起動するシナリオで、drools エキスパート 5.4.0.Final を使用しています。後で (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 の以前のリリースで対処されているようです。どんな助けでも大歓迎です。ありがとう。