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