2009-06-26 17 views
1

私たちは約20種類のJava EE Webアプリケーションを保守しています。これらのアプリケーションの大部分は、アーキテクチャーにかなりCRUDのようなものがあり、その中にはかなりのプロセッサー集中型の計算アプリケーションがあります。Java EE Jarファイル共有

これらのアプリケーションのデプロイメントでは、私たちはCVSリポジトリを監視するためにセットアップされたHudsonを使用しています。チェックインすると、プロジェクトはコンパイルされ、Tomcat 6.0サーバーにデプロイされるように設定されています(Solaris 10、sparcデュアルコア1.6 GHzプロセッサ、2 GB RAM ...想像...)、プロジェクトの単位テストがあれば実行され、単位テストが合格した場合にのみプロジェクトが展開されます。これは素晴らしいです。

私は、作成したプロジェクトの多くが同じHibernate、POI(Excel出力)、SQL Server JDBCドライバ、JSF、ICEFaces、ビジネスロジック.jarファイルなど)。私たちの習慣は、私たちが使っていたすべてのデフォルトの.jarファイルがネットワークドライブ上のフォルダに保存されていることです。新しいプロジェクトが開始されると、この.jarファイルのセットが新しいプロジェクトにコピーされ、そこから移動します。 。そして私はそう感じる汚いこれが起こるたびに、それは夜に私を維持し始めている。私は同僚からTomcatサーバー上に.jarリポジトリをセットアップすることは "非常に難しい"と言われています。これは2年目に買わない...私はそれを純粋な怠け者とみなし、ベストプラクティスを習得したいという希望はありません。私は間違っているかもしれませんが、私はその問題について自分の気持ちを述べています。これは、サーバーにも展開される.warファイルのサイズを膨らませるようです。

私の理解から、Tomcat自体には、それにデプロイされているすべてのアプリケーションにアクセスできる.jarファイルのセットがあるため、すべてのプロジェクトでこれらの重複する.jarファイルをすべて統合して移動できると思いますそれらをtomcatサーバーに追加します。たとえば、ICEFacesの.jarファイルを新しいバージョンに更新する必要がある場合は、サーバー上の.jarファイルを更新するだけです。

私のもう一つの部分は、サーバーに.jarファイルのコピーを1つだけ入れることで、開発環境にサーバーのlibディレクトリのコピーを保存する必要があるかもしれないと言います。日食の依存関係)。

私の腸の本能は、それらの重複した.jarファイルをサーバーに移動したいと言っています...これは機能しますか?

答えて

2

MavenとIvyはJARの依存関係を管理するために生まれたと思います。多分あなたはそれらが役に立つと思うかもしれません。

すべてのプロジェクトでJARを複製することについて議論する限り、それはサーバー/ libに入れているのと同じですが、私はそれが一点だと考えています:Tomcatにデプロイされたすべての単一のアプリケーション同時に?特定のJARの新しいバージョンが必要な場合やN + 1番目のアプリが必要な場合があります。

すべてのアプリを同期させても構いませんが、是非共通のライブラリベースを使用するようにしてください。

個人的には、ディスク容量が安いと思います。私の好みは、各アプリケーションのJARを複製し、それらをWARファイルに入れることです。私はパーティショニングが好きです。私は、OSGiがより主流になると、それをもっと見たいと思っています。

1

これはほとんどの場合動作しますが、あなたがtomcatに移動したjarファイルが、Webアプリケーションjarの1つのクラスのインスタンスを作成しようとしているClassNotFoundExceptionがスローされる。私はこれまでこれをやっていましたが、これらの問題のために停止しました。

1

私は本当にライブラリをcommon/libに入れるのは良い考えだとは思いません。サーブレットコンテナへのアプリケーションとしてのwarファイルの使用の背後にあるアイデアは、Webアプリケーション間のアイソレーションを実際に考え出すことです。 (WEB-INF/lib内に独自のライブラリを持つ)いくつかの第三者WARをデプロイするなどのエラーに直面する可能性があり、そのライブラリの他のバージョンを一般的なライブラリからロードしたために予期しない動作をします(ロードクラスの通常の動作は最初に共通のクラスローダーを見て、あなたのwebapp用のクラスを見つけられない場合は)。アプリケーションを他のサーブレット・コンテナまたはアプリケーション・サーバーに移動するのがどれほど苦労しているかは言及しないでください。 前述のように、mavenを使用してjarの依存関係を処理することができます。ライブラリの同種の使用が好きな場合は、すべてのアプリケーションでPOMの親(maven jargon)を定義します。

1

私の経験では、Webアプリケーション間でライブラリを共有することは、Webコンテナ自体に移動することによって非常に注意する必要があります。

あなたの戦争が自己完結型になるようにWEB-INF/libに住ませるようにしてください(あなたはいつも嬉しく思っています)。

mavenやAnt Ivyを使用して、共通のリポジトリからライブラリのjarファイルを取得することを検討してください。これは非常に便利で、シナリオでは問題ではありません。


編集:注目すべき例外はメトロライブラリです - GlassfishのからWebサービス層 - Webコンテナではなく、Webアプリケーションにする必要があります。

関連する問題