java - 流口水java更新

标签 java drools

我是 drool 的新手,请帮助我了解如果我在调用激发所有规则后更新对象,它会像在 drools 文件中那样激发规则吗?

喜欢

rule "Hello World"
no-loop true
when
    message:Message (type=='Hello')
then
    modify(message){
        setType("Hi")//Fires other rule below
    }
    message.setMsgtext("Msg: Hello World, Drools");
    System.out.println("Hello World, Drools!");
end

rule "Hi World"
when
    message:Message (type=='Hi')
then
    modify(message){
        setType("Hello")
    }
    System.out.println("Hi World, Drools!");
end

而在 JAVA 代码中,

Message msg = new Message();
msg.setType("Hello");
//sessionObject = rbase.newStatefulSession();
sessionObject.insert(msg);
sessionobject.fireAllrules();
msg.setType("Hi"); //Here can it fire the rule? for me its not doing it

如果它没有触发,drool 引擎是否将 msg 保留为与 Java 运行时对象完全不同的 session 对象,因此它不受影响。如果这不是背后的概念,请帮助我理解

谢谢 查克里

最佳答案

规则不会对您的更改使用react。 Drools 不会保留对象的不同“副本”,它只是不会评估规则。如果你想让流口水者知道你的修改,你必须使用 sessionObject.update()。然后不要忘记再次 fireAllRules() 。 您的代码应该类似于以下内容:

Message msg = new Message();
msg.setType("Hello");
//sessionObject = rbase.newStatefulSession();
FactHandle handle = sessionObject.insert(msg);
sessionobject.fireAllrules();
msg.setType("Hi");
sessionObject.update(handle, msg) // rules are re-evaluated here
session.fireAllRules(); // fire any pre-activated rule

希望对你有帮助

关于java - 流口水java更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169715/

相关文章:

java - Tomcat 严重 : Exception starting filter CorsFilter, ClassNotFoundException

javascript - 如何编写脚本来检测网站上的 Activity 按钮?

java - Drools 文件未找到异常

spatial - 用于空间和时间推理的规则引擎?

java - Drools 适用于我的场景吗?如果不是还有什么?

java - JBoss 流口水的推荐设置

java - 如何在调试/运行 Spring Boot 项目时在 IntelliJ "out"目录中生成 build-info.properties?

java - 在 Oracle 端或应用程序本身执行查询过滤

java - Android:TextView 中的圆半径始终由 TextView 宽度和高度固定

java - Drools 8.x Java 8 兼容性