2012-03-16 114 views
0

我試圖確定「批准」或最佳實踐方法,同時在Java EE環境中進行以下操作:客戶端在網頁上並單擊按鈕。這啓動了一個用於監視進程的線程,即數據庫活動,網絡等。此進程將繼續運行,直到用戶單擊一個指示進程結束的按鈕。其他客戶和/或同一個客戶然後點擊一個按鈕來收聽從該過程發送的狀態,該狀態將繼續收聽,直到用戶單擊一個按鈕停止收聽。Java EE和後臺線程

我已經通過使用WebSocket與一個servlet進行通信,該servlet獲得了一個注入了擴展WebSocketApplication的單例EJB。但是,這個EJB產生了進程線程來執行監控。雖然它是有效的,並且應該繼續工作,因爲它是一個單例,但它不是「批准」的方式。

我曾經討論過使用JMS來產生線程的一些建議,但除非我誤解了某些東西,否則這並不能解決任何問題,因爲消息驅動Bean不應該產生線程。那麼,這樣做的核準/最佳實踐方法是什麼?在Java EE環境中如何啓動和停止後臺進程?同樣,需求是,只有一個進程可以產生,它必須與所有在servlet中註冊的WebSockets進行通信,當告訴時它必須能夠死亡(儘管這並不意味着服務器關閉了套接字,因爲它可以開始備份並且仍然與所有先前註冊的客戶端通信)。

謝謝。

回答

1

這個EJB正在孕育過程中的線程

EJB是not permitted to start threads。請參考標準:

企業bean不能嘗試管理線程。企業bean不得嘗試 來啓動,停止,掛起或恢復線程,或者更改線程的優先級或名稱。 enter- 獲獎bean不得嘗試管理線程組。

這些函數是爲EJB容器保留的。允許企業bean管理線程 會降低容器正確管理運行時環境的能力。

這是設計;該規範規定了以下

企業JavaBeans體系結構將可以很容易地編寫應用程序:申請 開發人員不必理解低級事務和狀態管理細節, 多線程,連接池,或其他複雜的低級API。

您是否考慮過使用有狀態會話bean?點擊按鈕會導致bean進入「開始」狀態。點擊第二個按鈕會導致bean進入「停止」狀態。

0

答案是異步EJB 3.1 bean。謝謝回覆。

1

要在企業環境中創建線程,您應該使用ManagedThreadFactory或ManagedExecutorService。

請參閱here

0

從Java EE的7可以使用ManagedExecutorService給你的EJB訪問管理線程池。