0

私は drool を初めて使用します。fire all rules を呼び出した後にオブジェクトを更新すると、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 ランタイム オブジェクトとはまったく異なるセッション オブジェクトとして保持するので、影響を受けません。背後にある概念でない場合は、理解してください

ありがとうチャクリ

4

1 に答える 1

5

ルールは変更に反応しません。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

それが役に立てば幸い、

于 2013-04-24T13:54:35.540 に答える