Выполнение правила не выполняется при изменении объекта
В приведенных ниже правилах я ожидаю, что Rule2 - это огонь, потому что я изменяю имя клиента на mahesh. Но когда я выполняю, Rule2 не запускается, а Rule3 запускается. Я что-то здесь упускаю?
rule "Rule1"
lock-on-active true
salience 95
when
$c:Customer($customerName:customerName)
then
System.out.println($customerName+" =======2========");
modify($c){
setCustomerName("mahesh");
}
System.out.println($customerName);
end
rule "Rule2"
lock-on-active true
salience 85
when
$c1:Customer($customerName:customerName=="mahesh");
then
System.out.println($customerName+" Rules Name is 1 - " + drools.getRule().getName());
$c1.setCustomerName("mahesh456");
update($c1);
end
rule "Rule3"
lock-on-active true
when
$c:Customer($customerName:customerName)
then
System.out.println($customerName+ "***** ");
end
1 ответ
Какие lock-on-active
делает, чтобы предотвратить активацию правила, если группа повестки дня, в которой определено правило, уже активна. В вашем случае, потому что вы уже выполняли правила (fireAllRules
) MAIN
Группа повестки дня (к которой принадлежат оба ваших правила) уже активна. Это означает, что активация второго правила будет отменена Drools.
Вы можете найти здесь более подробное объяснение.
Надеюсь, поможет,