3.2. デプロイメントへの明示的なモジュール依存関係の追加
明示的なモジュール依存関係をアプリケーションに追加すると、これらのモジュールのクラスをデプロイメント時にアプリケーションのクラスパスに追加することができます。
JBoss EAP では、依存関係がデプロイメントに自動的に追加されます。詳細は、暗黙的なモジュール依存関係」を参照してください。
要件
- モジュールの依存関係を追加するソフトウェアプロジェクト。
- 依存関係として追加するモジュールの名前を知っている必要があります。JBoss EAP に含まれる静的モジュールのリストは、「含まれるモジュール」を参照してください。モジュールが他のデプロイメントである場合は、JBoss EAP『設定ガイド』の「動的モジュールの命名規則」を参照してモジュール名を判断してください。
依存関係を設定するには、以下の 2 つの方法があります。
-
デプロイメントの
MANIFEST.MF
ファイルにエントリーを追加します。 -
jboss-deployment-structure.xml
デプロイメント記述子にエントリーを追加します。
MANIFEST.MF への依存関係設定の追加
MANIFEST.MF
ファイルの必要な依存関係エントリーを作成するよう Maven プロジェクトを設定できます。
-
MANIFEST.MF
ファイルがプロジェクトにない場合は、この名前のファイルを作成します。Web アプリケーション (WAR) では、このファイルをMETA-INF/
ディレクトリーに追加します。EJB アーカイブ (JAR) では、このファイルをMETA-INF/
ディレクトリーに追加します。 依存関係モジュール名をコンマで区切り、依存関係エントリーを
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 への依存関係設定の追加
アプリケーションに
jboss-deployment-structure.xml
という名前のファイルがない場合は、このファイルを新規作成し、プロジェクトに追加します。このファイルは<jboss-deployment-structure>
がルート要素の XML ファイルです。<jboss-deployment-structure> </jboss-deployment-structure>
Web アプリケーション (WAR) では、このファイルを
WEB-INF/
ディレクトリーに追加します。EJB アーカイブ (JAR) では、このファイルをMETA-INF/
ディレクトリーに追加します。-
<deployment>
要素をドキュメントルート内に作成し、その中に<dependencies>
要素を作成します。 <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 インデックスの作成:
インデックスを作成します。
java -jar modules/system/layers/base/org/jboss/jandex/main/jandex-jandex-2.0.0.Final-redhat-1.jar $JAR_FILE
一時作業領域を作成します。
mkdir /tmp/META-INF
インデックスファイルを作業ディレクトリーに移動します。
mv $JAR_FILE.ifx /tmp/META-INF/jandex.idx
オプション 1: インデックスを新しい JAR ファイルに含めます。
jar cf index.jar -C /tmp META-INF/jandex.idx
JAR をモジュールディレクトリーに置き、
module.xml
を編集してリソースルートへ追加します。オプション 2: インデックスを既存の JAR に追加します。
java -jar /modules/org/jboss/jandex/main/jandex-1.0.3.Final-redhat-1.jar -m $JAR_FILE
アノテーションインデックスを使用するようモジュールインポートに指示し、アノテーションのスキャンでアノテーションを見つけられるようにします。
オプション 1:
MANIFEST.MF
を使用してモジュールの依存関係を追加する場合は、annotations
をモジュール名の後に追加します。例を以下に示します。Dependencies: test.module, other.module
上記を以下に変更します。
Dependencies: test.module annotations, other.module
オプション 2:
jboss-deployment-structure.xml
を使用してモジュールの依存関係を追加する場合は、モジュールの依存関係にannotations="true"
を追加します。注記静的モジュール内のクラスで定義されたアノテーション付き Java EE コンポーネントをアプリケーションで使用する場合は、アノテーションインデックスが必要です。JBoss EAP 7.2 では、静的モジュールのアノテーションインデックスは自動的に生成されるため、作成する必要がありません。ただし、
MANIFEST.MF
またはjboss-deployment-structure.xml
ファイルのいずれかに依存関係を追加して、アノテーションを使用するようモジュールインポートに指示する必要があります。