1
Tomcat(または他のWebアプリケーションサーバー)は、1つのJVMプロセスで動作しますが、別々のWARファイルを別々にロードする方法はありますか?彼らは同じクラスと他のリソースを持っているかもしれませんが、アプリケーションの一貫性と分離を保証しなければなりません。Tomcatはどのように異なるwarファイルをロードしますか?
Tomcat(または他のWebアプリケーションサーバー)は、1つのJVMプロセスで動作しますが、別々のWARファイルを別々にロードする方法はありますか?彼らは同じクラスと他のリソースを持っているかもしれませんが、アプリケーションの一貫性と分離を保証しなければなりません。Tomcatはどのように異なるwarファイルをロードしますか?
Tomcatは、展開されたWARごとに(Web)アプリケーションクラスローダーを作成します。いくつかの共通のクラスローダーがあります。全体的なhierachyは最高クラスローダHOWTOに記述されています
ところでhttp://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
:Tomcatはアプリケーションをアンデプロイすることができるようにするために、リソース管理の信じられないほどの量を行います。これは、ここで説明されています。しっかりとクラスローダーとクラスのアンロードに
http://wiki.apache.org/tomcat/MemoryLeakProtection
との絆。
1つのスレッドで何を意味するのかよく分かりませんが、通常WARファイルは独自のクラスローダーに読み込まれます。このようにして、同じ名前の複数バージョンのクラスを持つことができます。サーブレットを対応するクラスローダからインスタンス化するだけです。スレッドは、クラスローダーをコンテキストクラスローダとして設定する必要があります(コードに依存しますが、厳密には必要ありません)。たとえば、OSGiにはバンドルと同様の概念があり、デフォルトではTCCLは設定されていません。 – eckes
@eckes、あなたの説明に感謝します。だから、Tomcatはクラスをロードするために各warファイル用の新しいクラスローダーを作成しますか?どのように考えているのですか?Tomcatのコードを理解する価値があるのでしょうか、それともどこかで読むことができますか? – VRomaN
はい、そうです、ClassLoader HowToを見てください:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html – eckes