3

自分のコンテキストで ear ファイルを構成する方法がわかりません。

これが私の実際の構造です:

ear
--lib
--war1
--war2
--warA
--warB

ear/lib には、戦争の間のすべての一般的な瓶があります。すべて正常に動作しますが、耳が重いです。

実際、war1 と war2 はいくつかの jar を共有しています。WarAとwarBも。

warA/B はすべてを使用するわけではなく、war1/2 も使用しないため、これらの jar を ear/lib には入れません。

現在、war1/2 にはすべての jar が付属しているため、一部の jar は二重になっています。

私はこのようなものが欲しいです:

ear
--lib (common jars)
--war1
--war2
--something who comes with common jars for war1/2
--warA
--warB
--something who comes with common jars for warA/B

このように、war1 と war2 が軽くなります。warAとwarBも同じです。

それができるかどうか、またどのような種類のアーカイブを使用できるか知っていますか? jar、war、sar ? 私はJboss 5.1を使用しています

ありがとう

4

2 に答える 2

2

したがって、問題は次のとおりです。2 つの戦争セットに耳を傾けています。各セットは同じライブラリの異なるバージョンを使用します (したがって、最初のセットで使用されるバージョンは 2 番目のセットから分離する必要があり、その逆も必要です)。耳の異なる場所に同じライブラリを数回配置する必要がありません。これらのライブラリの一部として、すべてのモジュールで共有される他のライブラリが含まれている場合があります。

考えられる解決策: セットごとに新しい戦争を追加できます。これらのセットには、同じセット内の残りの戦争によって共有されるライブラリのみが含まれます。次に、クラスローディングの問題なしに動作させるには、各 wars WEB-INF ディレクトリと、耳の META-INF/jboss-classloading.xml に便利に設定された jboss-classloading.xml を配置して、各セットを分離する必要があります。戦争を続けます。

したがって、構造は次のようになります。

yourapp.ear
    |
    |--lib
    |    |- place here the libraries shared by all the wars in the ear
    |
    |--META-INF
    |     |
    |     |-jboss-classloading.xml
    |
    |--war1SetA.war
    |     |
    |     |-WEB-INF
    |           |- jboss-classloading.xml    
    |           |
    |           |- classes
    |      
    |     
    |--war2SetA.war
    |     |
    |     |-WEB-INF
    |           |- jboss-classloading.xml    
    |           |
    |           |- classes
    |      
    |      
    |--libsSetA.war
    |     |
    |     |-WEB-INF
    |           |- jboss-classloading.xml    
    |           |
    |           |- lib
    |                |-Place here the libraries used by wars of setA
    |       
    |--war1SetB.war
    |     |
    |     |-WEB-INF
    |           |- jboss-classloading.xml    
    |           |
    |           |- classes
    |     
    |--war2SetB.war
    |     |
    |     |-WEB-INF
    |           |- jboss-classloading.xml    
    |           |
    |           |- classes
    |     
    |--libsSetB.war
          |
          |-WEB-INF
                |- jboss-classloading.xml    
                |
                |- lib
                     |-Place here the libraries used by wars of setB

libsSet* という名前の war は、同じセットの war で使用されるライブラリを保持するためだけに使用されます。

セット A の wars の jboss-classloading.xml は次のようになります。

<classloading xmlns="urn:jboss:classloading:1.0"
    domain="SetA"
    export-all="NON_EMPTY"
    import-all="true"
    parent-domain="yourapp.ear"
    parent-first="false">
</classloading>

セット B の戦争の場合は、次のようになります。

<classloading xmlns="urn:jboss:classloading:1.0"
    domain="SetB"
    export-all="NON_EMPTY"
    import-all="true"
    parent-domain="yourapp.ear"
    parent-first="false">
</classloading>

重要: ドメイン属性は、同じセット内のすべての戦争で同じでなければなりません。

最後に、ear ファイルの META-INF/jboss-classloading.xml は次のようになります。

<classloading xmlns="urn:jboss:classloading:1.0"
   domain="yourapp.ear"
   export-all="NON_EMPTY"
   import-all="true"
   parent-first="false">
</classloading>

これに似た別の可能な解決策は、各セットの共有ライブラリをセットの戦争の 1 つに配置することです。この方法では、ライブラリのためだけに戦争を行う必要はありません。

于 2012-12-03T16:31:03.220 に答える
0

私が正しく理解していれば、ライブラリのバージョンと分離の問題はないので、ライブラリがすべての war アーカイブで使用されているかどうかに関係なく、それらすべてを ear の lib ディレクトリ内に配置できます (ライブラリを jboss インスタンスの lib ディレクトリに配置し、ear/wars から削除することを検討してください)。このようにして、ear ファイルのサイズを可能な限り小さくします。

使用されるメモリについて心配する必要はありません。JBoss クラスローダはライブラリを 1 回ロードするだけなので、それらを必要とするすべての war で共有されます (別のケースとして、war ごとに同じライブラリの異なるバージョンが必要な場合があります)。 .

一方、いずれかのライブラリが war ファイルの 1 つによって使用されているだけの場合は、ライブラリをこの war の lib ディレクトリ内に配置することも最適です。

最初のアプローチは正しいので、変更する必要はないと思います。

于 2012-11-29T23:29:00.990 に答える