0

在以下规则中,我希望 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 
4

1 回答 1

0

如果lock-on-active定义规则的议程组已经处于活动状态,则阻止规则被激活。在您的情况下,因为您已经在执行规则 ( fireAllRules),所以MAIN议程组(您的两个规则都属于该组)已经处于活动状态。这意味着第二个规则激活将被 Drools 取消。

你可以在这里找到更深入的解释。

希望能帮助到你,

于 2018-07-05T04:38:01.217 回答