0

シングルトンで Thread を継承するクラス Foo があります。再デプロイ後、これらのスレッドのうち 2 つが実行されているように見えるいくつかの問題が発生していました。Foo がスリープから復帰するたびに ClassLoader を取得するために、いくつかの print ステートメントを追加しました。プリントは、実際にはクラスの別のインスタンスが別の ClassLoader で作成されたことを示しています。

関連するかどうかはわかりませんが、Foo は常にセッション Bean を介して初めて Foo::instance を介して作成されます。Foo は、DB サニタイズを処理するサービスとして実行することを意図しています。

ありがとう

4

1 に答える 1

0

どうやら2つの再デプロイ方法があります。どちらも、リクエストを処理しなくなるまで、古いアプリケーションを実行し続けるようです。2 つの方法は、アプリケーションを削除する方法のみが異なります。私たちが使用している方法では、古いアプリケーションを完全に実行したままにし、別のクラス ローダーを使用して新しいアプリケーションをロードします。古いアプリケーションはアンデプロイされていませんでした。そうは言っても、明示的に終了されていないスレッドをどこかで実行している場合 (これが事実であることが判明しました)、同時に実行されている異なるクラスローダーを介して同じクラスの 2 つのインスタンスがロードされる可能性があります。Weblogic が死のグリップを持っていないスレッドを実行することは、悪い習慣であり、安全ではないと見なされます。今、私はその理由を知っています。

于 2011-01-07T14:17:19.543 に答える