Drools 4.0.7 で奇妙な動作に遭遇しましたが、Drools がどのように機能するかを理解していないことが原因である可能性があります。「property」というプロパティを持つクラス「A」があるとします。
事実として、次の A のリストがあります: A1、プロパティ = 123 A2、プロパティ = 345 A3、プロパティ = 123
次の2つのルールがあります。
rule "Rule 1 - Remove all A's that have property set to 123"
salience 1000
lock-on-active true
when
$listOfAs : ArrayList collect(A( property == "123" ))
then
for (Object a: $listOfAs ) {
retract (a)
}
end
rule "Rule 2 - Do stuff with remaining A's"
salience 900
lock-on-active true
when
$listOfAs : ArrayList collect(A())
then
...
end
私の理解では、「ルール 1」は 123 のプロパティを持つクラス A のファクトを削除します。「ルール 2」になると、「listOfAs」に残っている A が 1 つだけであってはなりません (つまり、プロパティが存在するもの)。 「345」に設定)。私が気付いたのは、撤回されていない「A」オブジェクトがまだ 1 つあると想定しているにもかかわらず、「ルール 2」がまったく実行されないことです。「撤回」をコメントアウトすると、「ルール 2」が正常に実行されます。
これらのルールの機能について何か不足していますか?
ありがとう。ジャスティン