2
(我對使用Drools有點新,所以請原諒,如果這是一個簡單的問題)。使用Drools執行反應規則
我想使用Drools來反應性執行規則,這意味着我們可以將「事實」插入爲「事件」實例。不過,我希望這樣執行的方式可以在收到事件後立即觸發規則。但是,如果規則可能取決於多個事件,我如何配置工作記憶以記住以前的事件。考慮一個很簡單的例子:
說我有以下規則:
- when (E1) do A1
- when (E2) do A2
- when (E1,E2) do A3
然後,如果時間的推移如下,我想下面的規則將被解僱,例如:
- t=1 , E1 happens => A1 fired
- t=2 , E2 happens => A2 fired + A3 fired
我遇到的問題是,如果每次插入後都撥打ksession.fireAllRules()
,工作記憶將會忘記以前的所有事件。什麼是最好的方式來實現我想要的?
感謝pgras,我已經修復了我的代碼。儘管我現在想了解,規則引擎如何知道不重新激發它已經匹配的規則?由於事實依然存在於WM中。如果這種情況在任何文檔中都有解釋,將有助於閱讀... – Larry
是的,這在文檔中有解釋。規則由一組事實激活,當插入一組符合規則條件的事實時,創建並激活激活(在fireAllRules()上)。之後,如果您修改了其中一個事實並通知引擎(ksession.modify/update),則會重新創建激活,並且可以重新啓動規則。如果你沒有改變你的事實,這個規則將被激活並且僅僅爲了這些事實而被解僱一次。 – salaboy