Drools java更新

Drools java更新,java,drools,Java,Drools,我是drool新手,请帮助我理解如果我在调用fire all rules后更新对象,它会像在drool文件中一样触发规则吗 像 而在JAVA代码中 Message msg = new Message(); msg.setType("Hello"); //sessionObject = rbase.newStatefulSession(); sessionObject.insert(msg); sessionobject.fireAllrules(); msg.setType("Hi"); //H

我是drool新手,请帮助我理解如果我在调用fire all rules后更新对象,它会像在drool文件中一样触发规则吗

而在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运行时对象完全不同的会话对象保存,所以它不会受到影响。如果不是背后的概念,请帮助我理解

谢谢
Chakri

规则不会对您的更改做出反应。Drools不会保留对象的不同“副本”,它只是不会评估规则。如果你想让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

希望有帮助,

规则不会对您的更改做出反应。Drools不会保留对象的不同“副本”,它只是不会评估规则。如果你想让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

希望有帮助,

嘿,谢谢你。我发现updatelisteners存在,当任何事实(对象)通过java代码更新时,它可以用来触发规则,但找不到任何例子。请分享一个例子,如果有的话谢谢Chakri谢谢,这非常有用。嘿,谢谢。我发现updatelisteners存在,当任何事实(对象)通过java代码更新时,它可以用来触发规则,但找不到任何例子。请分享一个例子,如果有什么,谢谢,谢谢,这非常有用。