2012-10-19 24 views
1

我有一個消息驅動bean,只要消息到達隊列中就在集羣節點上實例化。Java EE:跟蹤集羣上MessageDrivenBeans的進度

我希望能夠監視和取消羣集範圍內的消息驅動bean中運行的進程,這有點問題。

這怎麼能實現?我可以以某種方式獲得當前每個羣集節點處理的MDB列表,並在必要時終止它們的進程?我可以使用某種單例來保存所有羣集節點上的所有MDB的引用(我不這麼認爲:()

是否有一些註冊表服務可以使用,或者是否可以編寫類似的東西?

可能不得已是推動通過一個數據庫,這是我不喜歡的監控和取消的過程,因爲它需要輪詢在多邊開發銀行的數據庫來檢測的取消,否則是設置一個簡單的標誌。

服務器環境的BEA WebLogic 10.02,我使用EJB 3.0!

回答

1

我沒有睦h MDB的經驗,但解決方案可能是每個MDB鏈接到一個集羣單例bean以註冊一個id。然後,它可以使用它註冊的ID檢查相同的bean,以檢測取消。本質上是基於數據庫的解決方案,但沒有對數據庫進行輪詢。

我不認爲MDB的運行時間應該很長,應該委託給更易於管理的線程。

http://my.safaribooksonline.com/book/web-development/websphere/0738426091/message-driven-beans/ch06lev1sec7

在EJB2關於多邊開發銀行的上述會談(找不到EJB3參考網上)。相關部門:

不要使用真正的長期運行的事務 - 雖然我們指出,異步請求/應答可能在請求太長了MDB客戶端等待運行是適當的,我們不是說MDB本身應該用於長時間運行的事務,這可能會更好地留在批處理週期中,或者其他一些將工作分解爲更小的可執行組件的活動,MDB可以作爲協調整個活動的起點運行交易「。

希望這會有所幫助。

+0

我真的想委託規範但是:ejb規範明確不支持創建自己的線程。容器的行爲是未定義的。我真的想堅持規範。至於單身服務:是的,這是可行的,但你對任何你使用的容器都有緊密的耦合(在我的例子中是weblogic)。 – Falcon

+0

http://stackoverflow.com/questions/10276028/i-need-a-thread-in-web-javaee-container-to-complete-asynccontext-objs-in-same-jv可能有助於產卵線程方面符合規範。如果您使用Java EE 6,它當然會更容易。也就是說,您可以使用Singleton bean作爲服務,以便遵守規範。 –