2011-10-13 6 views
0

私は独自のルールエンジンを使用していましたが、今はDr​​oolsを使用しようとしています。私はDroolsにはかなり新しいです。セッション内のオブジェクトのすべての属性にルールを適用する方法はありますか?

以前のルールエンジンでは、他のオブジェクトの属性であっても、既存のオブジェクトのすべてのインスタンスに対してルールが実行されました。

私は与えられた種類のオブジェクトOに適用される一連の規則を持っています。私は自分のセッションに追加し、オブジェクトとしてOを属性として持つオブジェクトを追加します。しかし、ルールはO 'に適用されないので、Oの属性Oには適用されません。

私は、ハロー単語の例でこれを説明します:

を私は基本的なよだれ例に次のクラスを追加しました:

public static class Email { 

     private Message message ; 


     public void setMessage(Message message) { 
      this.message = message; 
     } 

     public Message getMessage() { 
      return message; 
     } 
} 

メールOである」とメッセージがO.

私ですセッションは次のように動作します。

  ... 
      Message message = new Message(); 
      message.setMessage("Hello World"); 
      message.setStatus(Message.HELLO); 
      Email email = new Email(); 
      email.setMessage(message); 
      ksession.insert(email); 
      ksession.fireAllRules(); 
      logger.close(); 
      ... 

と私はサンプルの脱落ファイルを持っています:

rule "Hello World" 
    when 
     m : Message(status == Message.HELLO, myMessage : message) 
    then 
     System.out.println(myMessage); 
     m.setMessage("Goodbye cruel world"); 
     m.setStatus(Message.GOODBYE); 
     update(m); 
end 

ルールはメッセージにのみ適用されます。

セッションを起動した場合、ルールは起動されません。

rule "email" 
    when 
     e : Email(message != null) 
    then 
     insert(e.getMessage()); 
end 

それは正常に動作しますが、私の質問は次のとおりです:それはの属性だ場合でも、オブジェクトの各インスタンスに解雇ルールを持っている簡単な方法がある 持っているルールは、私は、ルールを追加する必要が解雇しました他のオブジェクト?

答えて

1

はいあなたのような何かを行うことができます。

rule "Hello World" 
    when 
     $email: Email(message.status == Message.HELLO, $myMessage: message.message) 

    then 
     System.out.println($myMessage); 
     m.setMessage("Goodbye cruel world"); 
     m.setStatus(Message.GOODBYE); 
     update(m); 
end 

またはあなただけの、あなただけ使用してルールを記述することができ、このアプローチを使用して、ルール

Rule "insert message" 
    when 
     Email ($message: message) 
    then 
     insert($message); 
end 

を使用して作業メモリにメッセージを挿入することができますメッセージタイプ。

乾杯

+0

thx a lot!私は最初のアプローチを試みるよ –

+0

@RickyBobby私は聞くことができますか? Javaコードに '$ message'を挿入するにはどうすればよいですか? – newbie

+0

または可能であれば、ルールからJavaに挿入されたオブジェクトを取得しますか? – newbie

関連する問題