- - PR -
jarファイルの共通化について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-12-19 10:19
Webアプリケーションのjarファイル(外部ライブラリ)の配置場所について質問がございます。
通常jarファイルは、各アプリケーションのWEB-INF/lib配下に配置されると思いますが、同一インスタンス内にアプリケーションが複数ある場合、同じjarファイルが各アプリケーションのWEB-INF/lib配下に配置されることになりディスク容量を無駄に食っているのでは?と思いました。容量削減のためどこか共通のディレクトリにjarファイルを配置して、全てのアプリケーションから同じjarファイルを参照させるような形にしたいのですが、可能なのでしょうか? アプリケーションを跨った共通jarファイルの参照だけでなく、インスタンスを跨った共通jarファイルの参照が可能かどうかもご存知でしたら教えて下さい。 よろしくお願い致します。 | ||||
|
投稿日時: 2008-12-19 11:04
指定方法はサーバアプリによって違うでしょうが。
サーバアプリの利用しているjar格納位置は、全部のアプリから見えますね。 こちらのプロジェクトでは、TOMCAT/conf/catalina.propertiesに追記して、共有jarのディレクトリを増やして置いてあります。 | ||||
|
投稿日時: 2008-12-19 11:12
ウェブアプリ云々は置いておいて、Java全般の話でいえば、特に問題ありません。 ただし、ウェブアプリはWEB-INF/libの下に配置するというのがルールですので、 自由にカスタマイズは、APサーバによってできなくはないですが、 むずかしいと思った方がよいです。 共通と言う意味ではAPサーバの共通ライブラリという概念があります。 例えばTomcatだと%CATALINA_HOME%/common/libに配置するとか、 色々と共通ライブラリの配置方法はあるかと思います。 自分の場合はAPP1とAPP2を独立して配布ができること、 APP1とAPP2で依存するライブラリが同じでも、 依存バージョンが異なるケースにも対処可能であること、 を考慮して、無理やり共通化はやりませんね。 管理の手間暇、デプロイの手間暇をかけてでも、 容量をどうしても節約しなければいけないのであれば、 正直なところストレージの拡張をオススメしますが、 どうにもならないのであれば、シンボリックリンクという手段もあります。 | ||||
|
投稿日時: 2008-12-22 15:21
ご返答ありがとうございます。
>自分の場合はAPP1とAPP2を独立して配布ができること、 >APP1とAPP2で依存するライブラリが同じでも、 >依存バージョンが異なるケースにも対処可能であること、 >を考慮して、無理やり共通化はやりませんね。 おっしゃる通り共通化しない方がよいかもしれませんね。 libの入れ替えで本来修正対象外のアプリケーションにも影響を与えてしまうかもしれませんしね。 ストレージを拡張させる方向で検討してみます! | ||||
|
投稿日時: 2008-12-22 17:32
そういう解決のアプローチはいいですね。 今時ストレージはどんどん安く大きくなっているので、 ハードの増強にかかるコストなんて、 作業の手間などでロスする時間の節約によって、 すぐにペイできるかと思います。 | ||||
|
投稿日時: 2008-12-24 16:22
jarファイルの共通化で私が気になるのは、ディスク消費量よりもメモリ消費量です。
jarを共通化することにより、クラスのロードも共通化されるのでクラス定義が配置されるpermanent領域の消費も節約できます。 | ||||
|
投稿日時: 2008-12-24 17:47
Permanent領域の使用量が膨れて問題になることってそんなに多いでしょうか?
それよりもjarファイルを共有化することで Permanent 領域がリークしてしまうことが問題になりそうです。 アプリケーション更新時はかならずアプリケーションサーバを再起動!という運用ならいいのかもしれませんが・・。 | ||||
|
投稿日時: 2008-12-24 22:17
横から失礼します。 それは普通は起こらないと思います。 共有ライブラリは共有の親クラスローダでロードされますので。 あと、メモリだけじゃなく、アプリの起動時間にも影響すると思います。 今では何MBもある巨大なフレームワークを使うのが当たり前ですし。 |