私はDroolsのバージョン6.5.0.Finalを使用していますgetObjectメソッドとgetOldObject方法で同じ値を持っており、私のような単純なルールがあります。だから私もRuleRuntimeEventListenerクラスを実装し、それを取得DroolsのRuleRuntimeEventListenerのobjectUpdated方法は
rule "Test Rule"
when
$obj : MyObject(testValue == null || testValue != "NEW")
then
$obj.testValue = "NEW";
update($obj);
end
をこのルールが実行されると呼び出されます。問題はObjectUpdatedEventインスタンスのgetObject()とgetOldObject()呼び出しで渡されたものと同じ正確なオブジェクト(更新後のオブジェクト)を返します。このため、getOldObject()呼び出しは、testValueプロパティーの値が "NEW"のオブジェクトを戻します。私はgetOldObjectが私がルールによって変更された後の "NEW"ではないtestValueの値を返すことを期待しています。
これは私にはバグのようであり、誰かがこれに似た問題を抱えているのか、それとも回避策があるのだろうかと疑問に思っていましたか?オブジェクトのプロパティがルールによって変更され、古い値と新しい値が何であったかを通知されたい
Java BeanのPropertyChangeListenerの使用がサポートされていますが、addPropertyChangeListenerメソッドとremovePropertyChangeListenerメソッドを使用してファクトオブジェクトを作成する必要があります。また、PropertyChangeSupportを使用して、 firePropertyChangeメソッドによるプロパティ変更イベント。私は本当にそれをする必要はありません。
おかげ
ルールの開始前後に反応するイベントリスナーが提供するすべての可能性を調査しましたか?参加しているオブジェクトの古い状態を保存する可能性があります。これは、必要のないすべてのアプリケーションを厳しく罰するので、デフォルトでは起こりそうにないものです。 - 監査の変更は、追加のRHSコードで実装することもできます。 – laune
コメントありがとうございます。私はすべてを調査したと思うし、そのイベントリスナーが更新前と更新後にオブジェクトを渡すために、何が失われる可能性があるのか分からない。私は前の値を渡していない場合、getOldObject()メソッドを持つ点が何であるか分かりません。 – Mike