2011-11-21 196 views
0

我正在使用Websphere Application Server創建一個典型的Web應用程序,其中UI是JSP,有一個Controller和一個會話EJB和一個數據庫。我實現了一個通知系統,作爲一個單獨的線程在後臺運行。爲此,我使用了WorkManager。後臺線程

我的問題是,我想啓動WorkManager,而不必爲每個由不同用戶啓動的每個並行會話創建會話或EJB實例。它不應該基於會話。 現在,WorkManager線程在EJB實例化時啓動,所以如果有3個連接,則有3個WorkManager實例。

單會話bean會是一個好主意嗎?或者有什麼地方可以放置一個將被調用的'main()'方法,或者類似的東西?

任何想法,將不勝感激。

回答

1

我認爲有以下幾個選項:

  • 使用servlet上下文偵聽提交工作(當WAR模塊啓動,這將被調用/停止)。
  • 使用啓動Bean(WebSphere特定API),在應用程序啓動/停止時調用一次。
  • 使用引用計數方法記錄EJB實例的數量。您在創建第一個實例時提交工作(並在最後一個實例被銷燬時停止工作)。請注意,這會延遲工作的開始,直到第一次請求EJB。
  • 在WebSphere 8(支持Java EE 6)中,您可能使用單例會話bean。