Я сталкиваюсь с каким-то странным поведением в Drools 4.0.7, но, возможно, это просто причина, почему я не понимаю, как работает Drools. Предположим, есть класс «А», который имеет свойство «свойство».Дроссельная ретракция вызывает правило не срабатывать
Как факты, у меня есть список элементов а следующее: A1, свойство = 123 A2, свойство = 345 A3, свойство = 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» штраф.
Я пропустил что-то об этих правилах?
Спасибо. Justin
У вас получилось работать? Я также наблюдаю подобное поведение в Drools 5.4. –