2014-07-17 45 views
0

假設我添加某些對象配置Drools的執行對象

{O1,O2,O3}

和規則

{R1,R2,R3}

在我的知識庫中

當我火了所有規則的執行順序是這樣的:

R1 <on> O1 
R1 <on> O2 
R1 <on> O3 

R2 <on> O1 
R2 <on> O2 
R2 <on> O3 

R3 <on> O1 (add to passed object cache) 
R3 <on> O2 (add to passed object cache) 
R3 <on> O3 (add to passed object cache) 

這意味着我不能把傳遞的對象在緩存中,直到最後的循環

如何執行順序改變:

R1 <on> O1 
R2 <on> O1 
R3 <on> O1 (add to passed object cache) 

R1 <on> O2 
R2 <on> O2 
R3 <on> O2 (add to passed object cache) 

R1 <on> O3 
R2 <on> O3 
R3 <on> O3 (add to passed object cache) 
+1

您是否嘗試過逐個插入對象並在每次插入後調用fireAllRules()? –

+0

有沒有在你的類的對象牛(我假設都是同一類的)決定了指令O1 laune

+0

請解釋爲什麼要求訂單事宜,即觀察者如何檢測出第一順序發生,和不良後果由該出現。需要注意的是對象的緩存中的到達順序是一樣的,只有到達時間之間幾毫秒diffrence。 – laune

回答

1

Drools Expert User Guide, section 4.3.4.2

作爲一般的規則是,不要指望以任何特定順序解僱的規則,並且制定規則而不必擔心「流量」。

即使您看到的執行順序也不能保證。這個例子似乎是關於命令式的風格控制,意思是「首先做到這一點,然後做到這一點,然後把對象放在某個地方。」規則引擎是這項工作的錯誤工具,像Java這樣的編程語言更適合於精確控制循環等。