2012-05-30 22 views
9

ルール間の階層(実行順序だけでなく)を定義し、ルールの実行を制御する方法があるかどうかは疑問でした。つまり、親ルールが起動した場合、等...Drools - ルール階層と条件付き実行

Information in this thread is an option but it is essentially IF/THEN/ELSE

異なるオプションがありますか?私はあなたの質問を理解していますが、必要なものを達成かもしれませんアクティベーショングループと伝統的な紛争解決の戦略の組み合わせを使用している場合

おかげ

答えて

14

私はわかりません。たとえば、A、B、Cの3つのルールがあるとします。顕著性をもって実行優先度を順番に使用したい場合は、そのグループ内の他のルールを実行しないでください。あなたはこのようにそれらを定義することができます。

rule A 
    salience 30 
    activation-group "x" 
... 

rule B 
    salience 20 
    activation-group "x" 
... 

rule C 
    salience 10 
    activation-group "x" 
... 

顕著性は、Aが活性化した場合、それは彼らが活性化された場合はCに続いて、Bに続いて、最初に発火することを保証します。アクティベーショングループは、ルールの1つが発生すると、そのグループ内の他のアクティブなルールはすべてキャンセルされることを保証します。つまり、あなたのセッションでは、ルールBとCが有効になりますが、AではなくBが発生し、Cはキャンセルされると言います。

アクティベーショングループでは、後でルールを再アクティブ化できないことに注意してください。それは、グループの中のルールのうちの1つの時点でアジェンダに現在あるすべてのアクティベーションをキャンセルするだけです。