5.2. JBoss EAP のモジュール依存関係
モジュール依存関係とは、1 つのモジュールを機能させるために 1 つ以上の他のモジュールのクラスが必要であることを宣言することです。JBoss EAP がモジュールをロードするときに、モジュール形式のクラスローダーがモジュールの依存関係を解析し、各依存関係のクラスをクラスパスに追加します。指定の依存関係が見つからない場合、モジュールはロードできません。
Java Archive (JAR) や Web Archive (WAR) などのデプロイされたアプリケーションは、動的モジュールとしてロードされ、依存関係を利用して JBoss EAP によって提供される API にアクセスします。
依存関係には、明示的 と 暗黙的 の 2 種類があります。
- 明示的な依存関係
-
明示的な依存関係は開発者が設定ファイルで宣言します。静的モジュールでは、依存関係を
module.xmlファイルに宣言できます。動的モジュールでは、デプロイメントのMANIFEST.MFまたはjboss-deployment-structure.xmlデプロイメント記述子に依存関係を宣言できます。 - 暗黙的な依存関係
- 暗黙的な依存関係は、デプロイメントで特定の条件またはメタデータが検出された場合、自動的に追加されます。JBoss EAP に同梱される Jakarta EE API は、デプロイメントで暗黙的な依存関係が検出されたときに追加されるモジュールの例になります。
jboss-deployment-structure.xml デプロイメント記述子ファイルを使用して、特定の暗黙的な依存関係を除外するようデプロイメントを設定することも可能です。これは、JBoss EAP が暗黙的な依存関係として追加しようとする特定バージョンのライブラリーをアプリケーションがバンドルする場合に役に立つことがあります。
オプションの依存関係
明示的な依存関係は、オプションとして指定できます。オプションの依存関係をロードできなくても、モジュールのロードは失敗しません。ただし、依存関係は後で使用できるようになっても、モジュールのクラスパスには追加されません。依存関係はモジュールがロードされるときに利用可能である必要があります。
エクスポートした依存関係
モジュールのクラスパスには独自のクラスとその直接の依存関係のクラスのみが含まれます。モジュールは 1 つの依存関係の依存関係クラスにはアクセスできませんが、暗黙的な依存関係のエクスポートを指定できます。ただし、モジュールは、明示的な依存関係をエクスポートするように指定できます。エクスポートした依存関係は、エクスポートするモジュールに依存するモジュールに提供されます。
たとえば、モジュール A はモジュール B に依存し、モジュール B はモジュール C に依存するとします。モジュール A はモジュール B のクラスにアクセスでき、モジュール B はモジュール C のクラスにアクセスできます。モジュール A は、以下の場合を除き、モジュール C のクラスにはアクセスできません。
- モジュール A がモジュール C への明示的な依存関係を宣言する場合。
- または、モジュール B がモジュール B の依存関係をモジュール C でエクスポートする場合。
グローバルモジュール
グローバルモジュールは、JBoss EAP が各アプリケーションへの依存関係として提供するモジュールです。このモジュールをグローバルモジュールの JBoss EAP のリストへ追加すると、モジュールをグローバルモジュールにすることができます。モジュールへの変更は必要ありません。
詳細は、JBoss EAP のグローバルモジュール を参照してください。