在以下规则中,我希望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
答案 0 :(得分:0)
lock-on-active
的作用是防止在定义规则的议程组已处于活动状态的情况下激活规则。
在您的情况下,因为您已经在执行规则(fireAllRules
),所以MAIN
议程组(这两个规则都属于该组)已经处于活动状态。这意味着第二条规则激活将被Drools取消。
您可以找到here更深入的解释。
希望有帮助,