に2つのアプリケーションをデプロイしていますがTomcat server (v7)
、どちらのアプリケーションも同じ共有ライブラリを使用しています。これらのアプリのJVMでのpermgenメモリフットプリントを削減したかったので、共通の共有ライブラリを個々の戦争から取り除き、に配置することにしましたtomcat library folder
。
ただし、この実験ClassLoader
は、ライブラリをに移動したにもかかわらず、アプリケーションコンテキストごとに逆効果になりtomcat lib
、共有ライブラリは両方のアプリのコンテキストに読み込まれ、さらに悪いことに、この共有ライブラリを使用しない他のアプリのコンテキストに読み込まれます。
Webサーバーのコンテキスト全体でライブラリを1回だけロードする方法はありますか?
私はスレッドの安全性とセキュリティのリスクを理解しています。私の場合、これらのリスクは軽減されています。
Tomcat libディレクトリ内のjarからのクラスは、デプロイされたすべてのアプリケーション間で共有される独自のクラスローダーを取得します。
お気づきのように、個々のアプリケーションには独自のクラスローダーもあります。
この時点で、Tomcatが各アプリケーションのクラスを見つける場所を理解することが重要です。Apache TomcatクラスローダーHOW-TOを言い換えると、アプリケーションクラスは次の順序で配置されます。
上記の項目1、2、および5は、独自のリポジトリを持つ個別のクラスローダーです。アイテム3と4は単一のクラスローダーですが、Webアプリごとに個別のローダーがあります。
したがって、ライブラリjarをTomcat libディレクトリにコピーし、それをWebアプリから削除しなかった場合でも、Webアプリでjarをロードして使用することになります。デプロイメントを再確認して、ライブラリjarが実際に各アプリのWEB-INF / libディレクトリに存在しないことを確認します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加