1

動的にルール 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 の以前のリリースで対処されているようです。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

5.5.1-SNAPSHOT を試してください。ルール削除アルゴリズムがかなり変更されました (現在は反復的で、以前は再帰的でした)。これで問題が解決した可能性があります。

編集: 5.5.0.Final にはありません。5.5.1-SNAPSHOT のみにあります。

于 2013-04-12T10:11:41.067 に答える