2011-12-15 13 views
3

WebSphereクラスタにアプリケーションをデプロイしています。WebSphereの下でアプリケーションのバックグラウンド・スレッドを停止する方法

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

問題は、アプリケーションは、WebSphere内(のwsadminまたは管理コンソールを経由して)停止された後、唯一のサーブレットがunregistratedされていることであるが、 これら:アプリケーションは、彼自身は、例えば、いくつかの条件をチェックしているスレッドを終了することはありません実行されていますスレッドは強制終了せず、実行中です。私はアプリケーションを停止しているときにどのようにこの踏み板を殺すための方法はありますか?私たちは、あなたが手動のJavaEEアプリケーションからのスレッドを作成することはありませんのWebSphere 7

おかげ

答えて

4

あなたのコメントを別の回答に基づいて、私は示唆を持っています。 (注、私はあなたが本当にこのようにするべきではないが、もしあなたが...そうしなければならないと、オレグに同意する)。

私はこのコードから提示された通常のJavaアプリケーションでは、これらのバックグラウンドスレッドが何らかの形で停止する信号を受信すると推定します。あなたのサーブレットがすべて登録解除されたときに、停止信号を送信するためにServletContextListenerを使用することをお勧めします。

スレッドを停止するように指示する方法がまだない場合は、おそらくの別のバグがあり、これはまったく役に立たないことに注意してください。

+0

本当にありがとう、これは、アプリケーションを修正する方法を最速のように見えます。 – HPCS

+0

こんにちは!しかし、アプリケーションがすでにデプロイされ、実行されていることを想像してください。サーバーを停止する必要はありませんが、ハングするスレッドを終了する必要があります。出来ますか? –

+0

@ACosta、あなたはすでに、その後限り、私はノー、あなただけのどこかに「入る」とそれらを停止することはできません承知していると、停止するようにそれらのスレッドを伝えるために、いくつかのメカニズムを持っていない限り。 –

6

を使用しています。スレッド管理は、JavaEEコンテナによって提供されるべきものです。

WebSphereには、スレッド化のニーズを支援するためのWorkManagerメカニズムがあります。実装の詳細についてはthis tutorialをご覧ください。

+0

はいこんにちは、私はこの問題は、それがアプリケーションコンテナ内で実行されることを期待していなかったし、それが通常のJavaアプリケーションとして書かれていることであることを理解。 – HPCS

関連する問題