2011-12-15 101 views
3

我們正在WebSphere羣集中部署應用程序。應用程序正在運行自己從來不會終止線程正在檢查例如在一些條件:如何在WebSphere下停止應用程序的後臺線程

while(true){ 
    logger.severe("Unterminated thread"); 
    Thread.sleep(10000); 
} 

問題是,後應用程序是停止(通過的wsadmin或管理控制檯)在WebSphere中,只有Servlet是unregistrated但 這些線程不會被終止並仍在運行。當我停止應用程序時,有什麼方法可以殺死這個問題?我們使用的是WebSphere 7

感謝

回答

4

根據您對其他答案的意見,我有一個建議。 (請注意,我同意奧列格的觀點,你確實不應該這樣做,但是如果你必須......)。

我認爲在這段代碼的常規Java應用程序中,這些後臺線程以某種方式收到停止的信號。我建議使用ServletContextListener發送停止信號,當您的servlet已全部註銷時。

請注意,如果您還沒有某種方法可以告訴線程停止,那可能是另一個錯誤,並且這根本無濟於事。

+0

真的很感謝,這看起來像最快的方式如何修復應用程序。 – HPCS 2011-12-15 16:13:27

6

你不應該手動創建JavaEE應用線程。線程管理應該由JavaEE容器提供。

WebSphere有一個WorkManager機制來協助您處理線程需求。請參閱this tutorial獲取實施細節。

+0

你好,我明白的問題是,它不會期望它將在應用程序容器中運行,它已被寫爲一個正常的Java應用程序。 – HPCS 2011-12-15 14:35:53

相關問題