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
}
さまざまなキューをリッスンするスレッドを実行し続けて、メッセージをチェックして処理します。以下のようにハングメッセージが表示されますが、これを管理コンソールから設定して、警告/エラーの表示を停止したり、ハング検出時間を長くしたりできることがわかりました。
[1/30/13 6:50:38:708 EST] 00000032 ThreadMonitor W WSVR0605W:スレッド "WorkManager.DefaultWorkManager:2"(00000022)が708969ミリ秒の間アクティブであり、ハングしている可能性があります。サーバーには、ハングしている可能性のあるスレッドが合計1つあります。
これで、管理コンソールからアプリケーションを停止しても、これらのスレッドは停止せず、ハングメッセージを受け取り続けます。別のデプロイメントの場合、別のスレッドのセットが合計してハングスレッド数になります。私はどこかで、スレッドを宣言するDaemon
と停止することを読みました()。では、スレッドを以下のように宣言するのは問題ありませんか、それともメソッドDaemon
をオーバーライドする必要がありますか?release()
今のところ私たちrelease()
は空です。
public boolean isDaemon() {
return true;
}
public void release() {
//TODO
}
アプリケーションが停止した後、アプリケーションスレッドの実行をどの程度正確に停止できますか?を使用した古いアプリケーションですStruts 1.x
。
私はここで2つの説明を読みました:
Websphereでアプリケーションを停止した後もスレッドは実行され続けます(Springを使用していないので、宣言するだけ
Deamon
で問題ありませんか?これは、JVM自体を停止した場合でも機能します。コンソールからアプリを停止するだけでは、役に立ちませんか?)Websphereはデーモンスレッドを尊重しますか?(Sarel Bothaによって提案されたアプローチが唯一の解決策であるか、またはコンソールからいくつかの設定を行って作業を完了します。)
ありがとう。