修改对象时规则执行失败

时间:2018-07-04 15:39:25

标签: jboss drools kie drools-kie-server

在以下规则中,我希望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 个答案:

答案 0 :(得分:0)

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

您可以找到here更深入的解释。

希望有帮助,