Warファイルに含めるのではなく、Webサーバーのlibディレクトリに依存関係を配置する理由はありますか?
-
08-07-2019 - |
質問
アプリケーションに依存関係Jarがある場合、warファイルのlibディレクトリに配置するか、グローバルアプリケーションサーバー(Tomcatなど)のlibディレクトリに配置する方が良いですか?あるアプローチを別のアプローチより使用することで得られるものは何ですか?
ディスクスペースは思い浮かびますが、私たちはディスクスペースが安い時代に生きています。メモリ使用量に違いはありますか?もっと経験のある人が両方のオプションの長所と短所をリストできますか?
解決
一般的に言えば、コンテナの構成に依存する必要がないように、WARを自己完結させる方がはるかに優れています。また、展開がはるかに簡単になります。可能な場合は、ライブラリをWARに配置してみてください。
しかし、コンテナにライブラリをインストールすることが理にかなっている場合に遭遇しました。たとえば、
-
すべてのWebアプリケーションで使用される内部ライブラリがいくつかあり、それらは巨大です。それらをコンテナにインストールして、すべてのwebappが同じバージョンを使用し、メモリとディスクスペースも節約するようにします。
-
WEB-INF / libにインストールされたライブラリは、コンテナで使用できません。 context.xmlでこれらを参照する必要がある場合(「リソース」で定義されているJDBCドライバーなど)、server / libに配置する必要があります。
-
すべてのwebappからlog4jログを同じファイルに送信する場合は、log4j jarをserver / libに配置する必要があります。それ以外の場合、各webappは独自のロガーを使用します。
他のヒント
コンテナのリソース管理機能を使用する場合-例: SQLデータベースに接続し、JNDIルックアップと接続プールを提供します。コンテナソフトウェア自体は、リソースを管理するためにライブラリとドライバーにアクセスする必要があります。
それ以外の場合は、サーバーの/ libディレクトリにそれらをインストールしたくなく、それらがそこにあり、動作すると想定します。異なるWebアプリケーションには微妙に異なるバージョン要件があるかもしれません。
カタリナによって実装されたクラスローダー階層の詳細な説明については、TomcatのクラスローダーHOW-TO 。これにより、コンテナ、すべてのWebアプリケーション、単一のWebアプリケーションのみでjarを使用できるようにするタイミングと、それらを配置する場所を理解できます。