3.2. デプロイメントへの明示的なモジュール依存関係の追加

明示的なモジュール依存関係をアプリケーションに追加すると、これらのモジュールのクラスをデプロイメント時にアプリケーションのクラスパスに追加することができます。

注記

JBoss EAP では、依存関係がデプロイメントに自動的に追加されます。詳細は、暗黙的なモジュール依存関係」を参照してください。

要件

  1. モジュールの依存関係を追加するソフトウェアプロジェクト。
  2. 依存関係として追加するモジュールの名前を知っている必要があります。JBoss EAP に含まれる静的モジュールのリストは、「含まれるモジュール」を参照してください。モジュールが他のデプロイメントである場合は、JBoss EAP『設定ガイド』の「動的モジュールの命名規則」を参照してモジュール名を判断してください。

依存関係を設定するには、以下の 2 つの方法があります。

  • デプロイメントの MANIFEST.MF ファイルにエントリーを追加します。
  • jboss-deployment-structure.xml デプロイメント記述子にエントリーを追加します。

MANIFEST.MF への依存関係設定の追加

MANIFEST.MF ファイルの必要な依存関係エントリーを作成するよう Maven プロジェクトを設定できます。

  1. MANIFEST.MF ファイルがプロジェクトにない場合は、この名前のファイルを作成します。Web アプリケーション (WAR) では、このファイルを META-INF/ ディレクトリーに追加します。EJB アーカイブ (JAR) では、このファイルを META-INF/ ディレクトリーに追加します。
  2. 依存関係モジュール名をコンマで区切り、依存関係エントリーを MANIFEST.MF ファイルへ追加します。

    Dependencies: org.javassist, org.apache.velocity, org.antlr
    • 依存関係をオプションにするには、依存関係エントリーのモジュール名に optional を付けます。

      Dependencies: org.javassist optional, org.apache.velocity
    • 依存関係エントリーのモジュール名に export を付けると、依存関係をエクスポートすることができます。

      Dependencies: org.javassist, org.apache.velocity export
    • annotations フラグは、EJB インターセプターを宣言するときなど、アノテーションのスキャン中に処理する必要があるアノテーションがモジュールの依存関係に含まれる場合に必要になります。この設定を行わないと、モジュールに宣言された EJB インターセプターをデプロイメントで使用できません。アノテーションのスキャンが関係するその他の状況でも、この設定が必要になる場合があります。

      Dependencies: org.javassist, test.module annotations
    • デフォルトでは、依存関係の META-INF 内のアイテムにはアクセスできません。services 依存関係により META-INF/services のアイテムにアクセスできるようになり、モジュール内の services をロードできるようになります。

      Dependencies: org.javassist, org.hibernate services
    • beans.xml ファイルをスキャンし、生成される Bean をアプリケーションが利用できるようにするために、meta-inf 依存関係を使用できます。

      Dependencies: org.javassist, test.module meta-inf

jboss-deployment-structure.xml への依存関係設定の追加

  1. アプリケーションに jboss-deployment-structure.xml という名前のファイルがない場合は、このファイルを新規作成し、プロジェクトに追加します。このファイルは <jboss-deployment-structure> がルート要素の XML ファイルです。

    <jboss-deployment-structure>
    
    </jboss-deployment-structure>

    Web アプリケーション (WAR) では、このファイルを WEB-INF/ ディレクトリーに追加します。EJB アーカイブ (JAR) では、このファイルを META-INF/ ディレクトリーに追加します。

  2. <deployment> 要素をドキュメントルート内に作成し、その中に <dependencies> 要素を作成します。
  3. <dependencies> ノード内に各モジュールの依存関係に対するモジュール要素を追加します。name 属性をモジュールの名前に設定します。

    <module name="org.javassist" />
    • 値が true のモジュールエントリーに optional 属性を追加することにより依存関係をオプションにすることができます。この属性のデフォルト値は false です。

      <module name="org.javassist" optional="true" />
    • 値が true のモジュールエントリーに export 属性を追加することにより依存関係をエクスポートできます。この属性のデフォルト値は false です。

      <module name="org.javassist" export="true" />
    • アノテーションのスキャン中に処理する必要があるアノテーションがモジュール依存関係に含まれる場合は、annotations フラグが使用されます。

      <module name="test.module" annotations="true" />
    • services 依存関係は、この依存関係にある services を使用するかどうか、およびどのように使用するかを指定します。デフォルト値は none です。この属性に import の値を指定することは、依存関係モジュールの META-INF/services パスを含むインポートフィルターリストの最後にフィルターを追加することと同じです。この属性に export の値を設定することは、エクスポートフィルターリストに対して同じアクションを実行することと同じです。

      <module name="org.hibernate" services="import" />
    • META-INF 依存関係は、この依存関係の META-INF エントリーを使用するかどうか、およびどのように使用するかを指定します。デフォルト値は none です。この属性に import の値を指定することは、依存関係モジュールの META-INF/** パスを含むインポートフィルターリストの最後にフィルターを追加することと同じです。この属性に export の値を設定することは、エクスポートフィルターリストに対して同じアクションを実行することと同じです。

      <module name="test.module" meta-inf="import" />

例: 2 つの依存関係を持つ jboss-deployment-structure.xml ファイル

<jboss-deployment-structure>
   <deployment>
      <dependencies>
         <module name="org.javassist" />
         <module name="org.apache.velocity" export="true" />
      </dependencies>
   </deployment>
</jboss-deployment-structure>

JBoss EAP では、デプロイ時に、指定されたモジュールからアプリケーションのクラスパスにクラスが追加されます。

Jandex インデックスの作成

annotations フラグは Jandex インデックスが含まれるモジュールを必要とします。JBoss EAP 7.2 では、これは自動的に生成されます。しかし、自動スキャンは CPU を消費し、デプロイメント時間が長くなるため、パフォーマンスの理由上インデックスを手作業で追加することが推奨されます。

インデックスを手作業で追加するには、モジュールに追加する新しい「インデックス JAR」を作成します。Jandex JAR を使用してインデックスを構築し、新しい JAR ファイルに挿入します。現在の実装では、モジュール内部でインデックスが JAR ファイルに追加されると、スキャンは全く実行されません。

Jandex インデックスの作成:

  1. インデックスを作成します。

    java -jar modules/system/layers/base/org/jboss/jandex/main/jandex-jandex-2.0.0.Final-redhat-1.jar $JAR_FILE
  2. 一時作業領域を作成します。

    mkdir /tmp/META-INF
  3. インデックスファイルを作業ディレクトリーに移動します。

    mv $JAR_FILE.ifx /tmp/META-INF/jandex.idx
    1. オプション 1: インデックスを新しい JAR ファイルに含めます。

      jar cf index.jar -C /tmp META-INF/jandex.idx

      JAR をモジュールディレクトリーに置き、 module.xml を編集してリソースルートへ追加します。

    2. オプション 2: インデックスを既存の JAR に追加します。

      java -jar /modules/org/jboss/jandex/main/jandex-1.0.3.Final-redhat-1.jar -m $JAR_FILE
  4. アノテーションインデックスを使用するようモジュールインポートに指示し、アノテーションのスキャンでアノテーションを見つけられるようにします。

    1. オプション 1: MANIFEST.MF を使用してモジュールの依存関係を追加する場合は、annotations をモジュール名の後に追加します。例を以下に示します。

      Dependencies: test.module, other.module

      上記を以下に変更します。

      Dependencies: test.module annotations, other.module
    2. オプション 2: jboss-deployment-structure.xml を使用してモジュールの依存関係を追加する場合は、モジュールの依存関係に annotations="true" を追加します。

      注記

      静的モジュール内のクラスで定義されたアノテーション付き Java EE コンポーネントをアプリケーションで使用する場合は、アノテーションインデックスが必要です。JBoss EAP 7.2 では、静的モジュールのアノテーションインデックスは自動的に生成されるため、作成する必要がありません。ただし、MANIFEST.MF または jboss-deployment-structure.xml ファイルのいずれかに依存関係を追加して、アノテーションを使用するようモジュールインポートに指示する必要があります。