drools 规则引擎内存网络求解

有关drools内存Fact更新的问题
以下是规则文件

rule "modify dt2 rule"
    salience 100
    enabled true
    ruleflow-group "group_a"
    lock-on-active true
    dialect "mvel"
    when
        dt1 : Dt1(a == 1)
        dt2 : Dt2( )
    then
        modify( dt2 ) {
            setT("YES")
        }
end


rule "b_1"
    salience 96
    enabled true
    ruleflow-group "group_b"
    lock-on-active true
    dialect "mvel"
    when
        dt1 : Dt1( )
        dt2 : Dt2( )
        eval(dt2.getT()=="YES")
    then
        System.out.println("");
end


rule "b_2"
    salience 95
    enabled true
    ruleflow-group "group_b"
    lock-on-active true
    dialect "mvel"
    when
        dt2 : Dt2(  )
        eval(dt2.getT()=="YES")
    then
        System.out.println("");
end
以下是对象

Dt1:


public class Dt1 implements java.io.Serializable{
    private Integer a;
    private Integer b;
    // seter getter 
}

Dt2:

public class Dt2 implements java.io.Serializable{
    private String t;
    // seter getter 
}

drools版本 7.26.0.Final
当我输入 dt1: {"a":1} 的时候,b_2执行了,但是b_1没执行,我的理解是,当insert Fact的时候构建出来的网络,b_1 和 b_2 用的是同一个OBN,当更新的时候 都会更新的,eval也是取到最新的,奇怪的是,一个取到了,一个没取到

如果说是 lock-on-active 阻止了“modify dt2 rule”规则update事件重新渲染本条规则的网络节点信息,那
b_2 其实也是应该阻止的,但是事实上 b_2 触发了

如果把b_1换一种写法:


rule "b_2"
    salience 95
    enabled true
    ruleflow-group "group_b"
    lock-on-active true
    dialect "mvel"
    when
        dt2 : Dt2( t:t )
        eval(t=="YES")
    then
        System.out.println("");
end

b_2 就会触发了。这种写法像是在OBN节点下新建了一个 alpha节点 t,而 “modify dt2 rule” 更新了这个节点的指针。

也跟了好久的源代码,还是不太清这个是咋回事,希望老师拨冗指导,不吝赐教,感谢

drools规则引擎耗费内存问题解决
如有帮助,望采纳
https://blog.csdn.net/dreamwbt/article/details/121861568