2010-09-28 71 views
9

我目前在教授自己的Drools Expert/Flow以及GWT。我想使用Drools Flow作爲事件/命令總線和業務規則引擎來實現應用程序不同部分之間的鬆散耦合。在Web應用程序中使用Drools Expert/Flow的最佳做法

到目前爲止,我已經得到了專家和流量從我的測試案例的工作,但我有一個很難搞清楚如何最好地實現Web容器內流動。

我應該把所有的腳手架成一個無狀態會話EJB,讓每個請求建立一切從頭開始,然後運行流/規則?這似乎是對我的浪費資源。我是否可以存儲單個知識會話,並在Web請求之間共享這些會話,併發訪問它,這種情況是否會擴展並且線程安全(我的猜測是否定)?彙集知識會議是一個好主意嗎?

我要求的基本上是否有上述的最佳做法?這些文檔和例子雖然很好,但在這些特殊點上還不清楚。

我看過一些關於Drools的網格,不知道這會解決我的問題,這似乎是正在開發中。如果我的問題不清楚,請說出來。

BR馬格努斯

回答

3

的知識庫是線程安全的,大重量(它並不便宜,以創建),所以你會很可能要保留在應用範圍。現在,大多數人傾向於使用無狀態架構,併爲每個Web請求創建一個StatelessKnowlegdeSession(線程不安全且便宜創建),例如在無狀態會話bean(或接縫/ CDI bean或spring bean )。但是,如果您擁有有狀態EJB的力量,那麼繼續使用一個StafefulKnowlegdeSession來處理同一個對話中的所有請求可能是有益的。

我不知道,如果StatefulKnowlegdeSession是線程安全的(不這麼認爲), 所以我提出一個問題:https://issues.jboss.org/browse/JBRULES-2842

+0

Unfortunaly使用Drools的流動隱含意味着我必須使用StatefulKnowledgeSession,否則流量沒有按」工作。我試過了,從我記得我得到一個運行時異常。 到目前爲止,我唯一能找到自己的提示是堅持所有關於請求之間會話的數據。 我想它歸結爲工具的使用模式。也許我在我的Drools應用程序中缺少一些基本的東西。我發現的實例似乎更傾向於桌面應用程序的使用(Swing)和持續進行的會話。 – Magnus 2010-12-22 07:56:14

相關問題