我是新来的流口水,请帮助我了解,如果我更新对象后,我打电话火的所有规则,将其启动时机的规则,因为它在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
Run Code Online (Sandbox Code Playgroud)
而在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
Run Code Online (Sandbox Code Playgroud)
如果它没有触发,那么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
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你,
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |