2017-02-07 21 views
0

私はここに単純なルールのケースを持ってのDrools:複数の一致ルール

salience 50 
no-loop true 
rule "1" 
    when 
     input: Input(a == 20, b == 16026) 
    then 
     modify(input) {setZ(3)} 
end 

salience 40 
no-loop true 
rule "2" 
    when 
     input: Input(a == 20, c == 209) 
    then 
     modify(input) {setZ(9)} 
end 

あるとして、私は上記のルールのままにした場合、彼らは連続ループに入ります。 Iから両方のルールを変更する場合は、:に

modify(input) {setZ(9)} 

input.setZ(9); 

予想通りその後ルールが順に実行されます。

私の質問はです。私はmodifyキーワードを使用する必要がありますか? modifyキーワードは何をしますか?

答えて

1

Drools Engineが変更されたファクトオブジェクトの新しい値に従ってルールを再評価する場合は、modify(またはupdate)を使用する必要があります。これを省略すると、制約が新しい値と一致するルールはトリガされません。

これらの2つのルールでは、変更は必要ありません。しかし、ルールがある場合は、

rule x 
when 
    Input(z == 9 || == 3) 
then ... end 

を使用する必要があります。それぞれ

Input(..., z != 3) 

Input(..., z != 9) 

、それは動作しますし、あなたも、これ以上何のループを必要としないではないでしょう。この場合、自分のルールに制約を追加します。

関連する問題