我是 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/