2016-09-29 1 views
1

Tomcat(または他のWebアプリケーションサーバー)は、1つのJVMプロセスで動作しますが、別々のWARファイルを別々にロードする方法はありますか?彼らは同じクラスと他のリソースを持っているかもしれませんが、アプリケーションの一貫性と分離を保証しなければなりません。Tomcatはどのように異なるwarファイルをロードしますか?

+0

1つのスレッドで何を意味するのかよく分かりませんが、通常WARファイルは独自のクラスローダーに読み込まれます。このようにして、同じ名前の複数バージョンのクラスを持つことができます。サーブレットを対応するクラスローダからインスタンス化するだけです。スレッドは、クラスローダーをコンテキストクラスローダとして設定する必要があります(コードに依存しますが、厳密には必要ありません)。たとえば、OSGiにはバンドルと同様の概念があり、デフォルトではTCCLは設定されていません。 – eckes

+0

@eckes、あなたの説明に感謝します。だから、Tomcatはクラスをロードするために各warファイル用の新しいクラスローダーを作成しますか?どのように考えているのですか?Tomcatのコードを理解する価値があるのでしょうか、それともどこかで読むことができますか? – VRomaN

+0

はい、そうです、ClassLoader HowToを見てください:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html – eckes

答えて

4

Tomcatは、展開されたWARごとに(Web)アプリケーションクラスローダーを作成します。いくつかの共通のクラスローダーがあります。全体的なhierachyは最高クラスローダHOWTOに記述されています

ところで

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

:Tomcatはアプリケーションをアンデプロイすることができるようにするために、リソース管理の信じられないほどの量を行います。これは、ここで説明されています。しっかりとクラスローダーとクラスのアンロードに

http://wiki.apache.org/tomcat/MemoryLeakProtection

との絆。

関連する問題