我們在應用程序中使用Websphere Work Manager
(CommonJ)來產生線程。我們正在使用默認的WorkManager
,並通過JNDI
在我們的應用程序中訪問它。應用程序線程繼續運行
try {
Context ctx = new InitialContext();
wm = (WorkManager) ctx.lookup("java:comp/env/wm/App_WORKMANAGER");
wm.schedule(this);
//threadScheduler = new Thread(this);
//threadScheduler.start();
} catch (Exception e) {
// catch the exception
}
我們繼續運行偵聽不同隊列的線程來檢查任何消息並對其進行處理。我們確實收到了如下所示的消息,並知道可以從管理控制檯配置該消息以停止顯示警告/錯誤或增加掛起檢測時間。
[13年1月30日6:50:38:708 EST] 00000032 ThreadMonitorW¯¯WSVR0605W:線程 「WorkManager.DefaultWorkManager:2」(00000022)已活躍708969毫秒,並且可被掛起。總共有1個線程可以掛在服務器上。
現在,如果我們停止從管理控制檯的應用程序,這些線程不會停止,我們不斷收到洪消息。對於另一個部署,另一組線程合計爲洪線程數。 我在某處讀到,如果我們將線程聲明爲Daemon
,那麼它們會停止()。那麼,我們宣佈線程爲Daemon
如下,或者我們需要重寫release()
方法嗎?我們的release()
目前爲空。
public boolean isDaemon() {
return true;
}
public void release() {
//TODO
}
我們究竟應該如何阻止應用程序線程停止運行?這是一個使用Struts 1.x
的舊應用程序。
我看了兩種這裏解釋:
Thread keeps running even after application has been stopped in Websphere(因爲我沒有使用彈簧,剛剛宣佈
Deamon
是很好,如果我們停止JVM本身這會工作,只是從控制檯停止應用程序不會?幫助,對不對?)Does Websphere respect Daemon threads?(由Sarel博塔建議的方法是唯一的解決方案或我們從控制檯一些設置來完成這項工作。)
謝謝。
您將不得不爲應用程序創建一個啓動/關閉偵聽器,並停止線程 –
感謝Aviram,我將嘗試使用servlet上下文偵聽器。雖然它會有點繁瑣,因爲應用程序沒有共同的服務創建theads ..將不得不挖掘到每個線程.. :) – pranav