2010-07-16 76 views
3

我在Drools 4.0.7中遇到了一些奇怪的行爲,但也許這只是因爲我不明白Drools是如何工作的。假設有一個類「A」,它有一個名爲「property」的屬性。Drools撤回導致規則不起火

作爲事實,我有以下A的列表: A1,屬性= 123 A2,屬性= 345 A3,屬性= 123

我有兩個規則如下:

rule "Rule 1 - Remove all A's that have property set to 123" 
    salience 1000 
    lock-on-active true 
when 
    $listOfAs : ArrayList collect(A(property == "123")) 
then 
    for (Object a: $listOfAs) { 
     retract (a) 
    } 
end 

rule "Rule 2 - Do stuff with remaining A's" 
    salience 900 
    lock-on-active true 
when 
    $listOfAs : ArrayList collect(A()) 
then 
... 
end 

我的理解是「規則1」將刪除A級屬性爲123的事實。當它到達「規則2」時,「listOfAs」不應該只有一個A(即屬性被設置爲「345」)。我注意到的是,即使我假設仍然有一個「A」對象沒有被收回,「規則2」根本不會執行。如果我註釋掉「收回」,它會執行「規則2」罰款。

我錯過了關於這些規則的工作嗎?

謝謝。 Justin

+0

你讓它工作?我正在觀察Drools 5.4中的類似行爲。 – 2013-02-28 01:23:26

回答

1

我懷疑這裏的問題是使用'lock-on-active'。鑑於第一條規則已被激活,它會阻止其他規則也被激活。

根據該文檔鎖定上活性是:

「一個布爾值‘真’抑制的所有規則的附加激活與該標誌相同的規則流或議程組內設定」。