2011-02-24 73 views
1

我正在使用Drools規則服務器作爲服務。我們正在使用決策表Drools決策表規則不使用更新值

Pre Rules Movie Object: 
actor: "unknown" 
movie: "Ghostbusters" 
rating: 9 

我在Drools決策表中有2條簡單規則。第一條規則檢查一個值(movie=="Ghostbusters"),然後設置對象setActor("Bill Murray")的呼叫。

第二條規則檢查演員是什麼。我在這第二條規則中有2行。 if Actor == "Bill Murray"它調用setRating(10)的操作。如果actor == "unknown"setRating(8)

如預期的第一條規則火災,我可以的println getActor顯示它的「比爾·默裏」,但在第二個規則中,actor == "unknown"動作始終閃光。即使在該行我打印getActor它打印「比爾默裏」,但它使用「未知」的規則。

當對象從規則中返回時,它具有Actor = Bill Murray並且規則中的所有值均設置爲「正確」,但規則似乎始終使用在評估規則時我在規則外部創建的原始對象。

有什麼我必須添加到決策表或調用drools規則服務器來更新規則表之間的對象的調用嗎?

+0

你是如何構建決策表的?你可以在這裏發佈嗎? – 2012-07-24 22:59:30

回答

0

你應該使用updatemodify方法,在Drools中的文檔(4.8.4.1,4.8.4.2)描述:

rule "modify stilton" 
when 
    $stilton : Cheese(type == "stilton") 
then 
    modify($stilton){ 
     setPrice(20), 
     setAge("overripe") 
    } 
end 

這會告訴該對象已經改變,規則將重新應用引擎。

1

我知道你問了這個問題的時間已經過去了,但對於其他人也有同樣的問題: 如上所述,你應該修改對象而不是設置它。要做到這一點在決策表中您RuleTable添加一個動作列和第二行你應該增加:

modify($className){ setActor("Bill Murray")};

保留下的第一行的行動的空白。