2011-11-27 15 views
26

JBoss-as-7.0.xスタンドアロン展開でサードパーティのJARをロードするベストプラクティスは何ですか?JBoss AS7スタンドアロンデプロイメントでサードパーティのJARをロードするためのベストプラクティス?

私が試してみました:

  1. は、それ自身のmodule.xmlのdesriptorを持つ独立したモジュールとして、各JARを配備します。
  2. WARのWEB-INF/libディレクトリにJARをデプロイします。
  3. と、複数のWARにまたがって共有されているJARのfoo.ear/libディレクトリ。

上記アプローチ1の明白な利点は、apprach 2およびアプローチ3よりも展開時のメモリフットプリントの削減です。しかし、JARが明示的に必要とする各依存関係を維持するのはかなり難しいようですmodule.xmlに定義されています。これは、多数のサードパーティのライブラリではあまりメンテナンスできません。

+0

私はJBoss7に移行しようとしており、クラスパスエントリエラーが発生し続けています。 "Class-Pathリファレンスの有効なjarを指していない" - そのようなエラーが発生したかどうかは解消されているようです。これはおそらくJBoss7クラスのロードと関係がありますが、かなりの人が私と同じ問題を抱えていますが解決策はありません。 –

+0

あなたの問題は、module.xmlファイル(JARをモジュールとしてロードする場合)またはjboss-deploment-structure.xmlファイルのいずれかにあります。静的ライブラリJARを参照する最良の方法は、modulesディレクトリのサブディレクトリに配置することです。 「org.foo.bar.FooBar;」を参照しようとしている場合は、あなたのディレクトリ構造が "JBOSS_HOME/modules/org/foo/bar/main/FooBarJar.jar"になりたい場合は、 "JBOSS_HOME/modules/org/foo/bar/main"を含める必要があります。 /modle.xml "ファイルを使用して、jarへのマッピングとそれが持つ可能性のある依存関係を定義します。 – travega

+1

...(続き)あなたのモジュール。xmlファイルは次のようになります: " <! - - ここにリソースを挿入します - > <依存性> <! - ここに依存関係を挿入します - > 」。 WARのWEB-INFディレクトリにあるjboss-deploment-structure.xmlファイルにモジュール参照を追加することができます。 "" ... – travega

答えて

16

デプロイメント専用の小さな依存関係の場合は、.warの中にWEB-INF/libを入れておいてください。 Mavenを使用している場合は、<コンパイル/ >スコープ内の何ものでもほとんど自動で透過的でなければなりません。いくつかのアプリケーション間で共有することがあります大きな、複雑な依存関係や依存関係については

、使用オプション(4):は

展開(「OpenJPAの」または「Log4Jの」のような)各論理ライブラリモジュールとして、その含みますapiおよびimpl jars、および他のAS7モジュールではまだ提供されていない依存関係JARあなたのモジュールにJARを追加するのではなく、すでにモジュールが依存関係を追加している場合。いくつかの異なるライブラリがいくつかの共通の依存関係を共有している場合は、それらをモジュールに分割し、それらをモジュールの依存関係としてmodule.xmlに追加します。

jboss-deployment-structure.xmlを使用すると、モジュールが自動検出されずに自動ロードされていない場合には、モジュールに依存することを宣言するものがあります。.war/.ear/

私はこれがうまくいく、中〜低難解なアプローチであることがわかりました。デプロイメントの中にあるすべてのものをWEB-INF/libに投げ込むよりも面倒です。これはJava EE標準のことです。再デプロイを高速化し、クラス/バージョンの競合を減らして、多くのデプロイ/テスト時間を節約します。

Mavenとmaven-dependency-pluginを使用して、少しの作業をしたい場合は、推移的な依存関係を持つモジュールを作成できます。 module I wrote for EclipseLink integration in AS 7にその1つの例があります。私は可能な限りAS7モジュールの作成を自動化します。

+0

クラスタ(ドメイン)環境では、モジュールを.warまたは他のコンテナにパッケージ化し、それをドメインコントローラのすべてのスレーブに展開できますか?あるいは、モジュールを手動で各slavedirectory/modules/...にコピーしますか? – Gregor

+0

@Gregor私はクラスタモードを使用していないので、わかりません。おそらく手動でコピーする必要があると思われますが、JBoss ASとJava EE(感謝題)で何かをしてから2年が経ちました。申し訳ありませんが私は助けることはできません。新しい質問を投稿し、この質問に戻ってコンテキストにリンクしてみてください。 –

+0

@Gregorドメインモードの回避策を見つけましたか?ドメインが再起動時にモジュールを読み込まない – Aadam

関連する問題