1

Websphere Work Managerアプリケーションでスレッドを生成するために(CommonJ)を使用しています。デフォルトを利用WorkManagerJNDI、アプリケーションでそれにアクセスします。

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つの説明を読みました:

  1. Websphereでアプリケーションを停止した後もスレッドは実行され続けます(Springを使用していないので、宣言するだけDeamonで問題ありませんか?これは、JVM自体を停止した場合でも機能します。コンソールからアプリを停止するだけでは、役に立ちませんか?)

  2. Websphereはデーモンスレッドを尊重しますか?(Sarel Bothaによって提案されたアプローチが唯一の解決策であるか、またはコンソールからいくつかの設定を行って作業を完了します。)

ありがとう。

4

1 に答える 1

0

はい、ユースケースではisDaemonメソッドが返されるはずであり、オブジェクトのメソッドで実行されるコードを停止するようにメソッドtrueを実装する必要があります。これを行うと、ハングしているスレッドの警告が消え、アプリケーションが停止したときにWebSphereが実行中のすべてのオブジェクトを呼び出します。releaserunWorkreleaseWork

于 2013-02-08T20:45:11.980 に答える