Я сталкиваюсь со странным поведением в Drools 4.0.7, но, может быть, это просто потому, что я не понимаю, как работает Drools.Предположим, есть класс «A», у которого есть свойство с именем «property».
В качестве факта у меня есть следующий список A: A1, property = 123 A2, property = 345 A3, property = 123
У меня есть два правила следующим образом:
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. Когда оно перейдет к «Правилу 2»,не должен ли "listOfAs" иметь только один A, который остается (то есть тот, где свойство установлено в "345").Что я заметил, так это то, что «Правило 2» просто не выполняется вообще, хотя я предполагаю, что есть еще один объект «А», который не был отозван.Если я закомментирую «retract», он прекрасно выполнит «Rule 2.»
Я что-то упустил из-за работы этих правил?
Спасибо.Джастин