さまざまなアプリケーション用のクラスローダーは異なる場合がありますか?
-
29-09-2019 - |
質問
アプリケーションを実行している間、私はその時点で混乱しています。私のアプリケーションは、EJBとサーブレットで構成されています。これらのアプリケーションタイプのクラスローダーが同じか異なるかどうかを知る必要があります。 WebLogicをアプリケーションコンテナとして使用しています。私を助けてください。
解決
私のアプリケーションには、シングルトンとクラスローダーに依存しているクラスが1つあります。問題は、クラスローダーが変更されたときにクラスのインスタンスが変更され、生涯を通じてクラスの同じインスタンスを使用する必要があることです。
はい、すべてのWebAppクラスローダーが委任するシステムクラスローダーがあります。
クラスをそのクラスローダーに入れるには、関連するクラスパスにあることを確認する必要があります。たとえば、Tomcatでは、JARファイルを$ Catalina_home/lib(...正しく覚えている場合は... ...)に入れます。
そうは言っても、複数のWebApps間でアプリケーションのシングルトンを共有することは良いデザインだとは確信していません。
他のヒント
通常、各アプリケーションはクラスローダーの独自のインスタンスにロードされていることがわかります。クラスローダーは、Webコンテナが提供するクラスになりますが、アプリケーションが実行されている各インスタンスがあります。これにより、アプリケーションを互いに分離し、静的/クラス変数、またはシングルトンなどを使用しているかどうかに関係なく、多くのインスタンスをロードすることができます。
WebLogicは、レイヤードクラスローダーを使用します。アプリケーションはどのようにパッケージ化されていますか?それは耳であるか戦争 +瓶ですか?
このリンク 役に立ちます。