我使用Drools的版本6.5.0.Final相同的價值,我有一個像一個簡單的規則:Drools的RuleRuntimeEventListener的objectUpdated方法具有的getObject和getOldObject方法
rule "Test Rule"
when
$obj : MyObject(testValue == null || testValue != "NEW")
then
$obj.testValue = "NEW";
update($obj);
end
所以我還實施了RuleRuntimeEventListener類和它得到在執行此規則時調用。問題是傳入的ObjectUpdatedEvent實例的getObject()和getOldObject()調用返回相同的確切對象 - 這是更新後的對象。所以對於這個getOldObject()調用返回一個值爲「NEW」的testValue屬性的對象。我期望getOldObject返回給我的是不是「NEW」的testValue的值,它是在規則更改後的值。
這看起來像是一個bug,並想知道如果有人有任何類似的問題,或者如果有任何解決方法?當一個對象的任何屬性被一個規則改變時,我希望得到通知以及新舊值是什麼。
我看到支持使用java bean的PropertyChangeListener,但看起來像我必須使用addPropertyChangeListener和removePropertyChangeListener方法創建事實對象,並且在所有事實的setter方法中,我必須使用PropertyChangeSupport並觸發一個通過firePropertyChange方法更改屬性。我真的不想這樣做。
感謝
您是否研究過事件偵聽器對規則解決之前和之後發生的反應所提供的所有可能性?可能會保留參與對象的舊狀態,這是默認情況下不會發生的情況,因爲它會嚴格懲罰所有不需要的應用程序。 - 審計更改也可以在其他RHS代碼中實施。 – laune
感謝您的評論。我想我已經調查了一切,並且我沒有看到我可能會錯過什麼,以便該事件偵聽器在更新之前和之後傳遞對象。如果getOldObject()方法沒有傳遞給我之前的值,我不明白它有什麼意義。 – Mike