_itors 2022-12-08 10:50 采纳率: 0%
浏览 25
已结题

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” 更新了这个节点的指针。

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

  • 写回答

1条回答 默认 最新

  • yy64ll826 2022-12-08 15:39
    关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月13日
  • 赞助了问题酬金15元 12月8日
  • 创建了问题 12月8日

悬赏问题

  • ¥15 本人本科机械,目前研一。没有深度学习基础,目前对研究生课题一片迷茫,请教各位!
  • ¥15 关于R语言单因素与多因素线性回归的平均值
  • ¥15 服务器清除BIOS之后引导不了
  • ¥15 CPLEX用OPL编写的混合整数线性优化问题。
  • ¥15 可以用EasyConnect连接实验室内网,但无法连接内网才能访问的服务器,为什么?
  • ¥15 前端预览docx文件,文件从后端传送过来。
  • ¥15 层次聚类和蛋白质相似度
  • ¥25 主成分分析中的第一第二主成分分别代表哪些参数
  • ¥15 oracle数据库查询语句问题
  • ¥15 有没有c++绘制算法的佬们吗救孩一下