第5章 JBoss EAP のクラスローディングの概要
JBoss EAP は、デプロイされたアプリケーションのクラスパスを制御するためにモジュール形式のクラスローディングシステムを使用します。このシステムは、階層クラスローダーの従来のシステムよりも、柔軟性があり、より詳細に制御できます。開発者は、アプリケーションで利用可能なクラスに対して粒度の細かい制御を行い、アプリケーションサーバーで提供されるクラスを無視して独自のクラスを使用するようデプロイメントを設定できます。
モジュール形式のクラスローダーにより、すべての Java クラスはモジュールと呼ばれる論理グループに分けられます。各モジュールは他のモジュールへの依存関係を定義して、そのモジュールのクラスを自身のクラスパスに含めることができます。デプロイされた各 Java Archive (JAR) および Web Archive (WAR) ファイルは、モジュールとして扱われます。そのため、開発者はモジュール設定を追加することでアプリケーションのクラスパスの内容を制御できます。
5.1. JBoss EAP のモジュールの種類 リンクのコピーリンクがクリップボードにコピーされました!
モジュールは、クラスローディングおよび依存関係管理に使用されるクラスの論理グループです。JBoss EAP は次の 2 種類のモジュールを識別します。
- 静的モジュール
- 動的モジュール
この 2 種類のモジュールの主な違いは、パッケージ化方法です。
JBoss EAP は、事前定義されたモジュールのセットも提供します。
5.1.1. JBoss EAP の静的モジュール リンクのコピーリンクがクリップボードにコピーされました!
静的モジュールは、アプリケーションサーバーの EAP_HOME/modules/ ディレクトリーで定義されます。各モジュールは EAP_HOME/modules/com/mysql/ のようにサブディレクトリーとして存在します。各モジュールには、module.xml 設定ファイルとすべての必要な Java Archive (JAR) ファイルが格納されるスロットサブディレクトリー (デフォルトでは main) が含まれます。アプリケーションサーバーにより提供される API は、Jakarta EE API と他の API を含む静的モジュールとして提供されます。
例: MySQL JDBC ドライバー module.xml ファイル
MySQL ドライバーの JAR 名 (mysql-connector-j-8.0.33.jar) は、あくまで例として示したものです。テスト済みの MySQL バージョンの詳細は、Tested databases を参照してください。
モジュール名 com.mysql は、スロット名 main を除くモジュールのディレクトリー構造と一致する必要があります。
カスタム静的モジュールの作成は、同じサードパーティーライブラリーを使用する同じサーバー上に多くのアプリケーションがデプロイされる場合に役立ちます。これらのライブラリーを各アプリケーションとバンドルする代わりに、管理者はこれらのライブラリーが含まれるモジュールを作成およびインストールできます。アプリケーションは、カスタム静的モジュールで明示的な依存関係を宣言できます。
JBoss EAP ディストリビューションで提供されるモジュールは、EAP_HOME/modules ディレクトリー内の system ディレクトリーにあります。このため、サードパーティーによって提供されるモジュールから分離されます。また、JBoss EAP 上で使用する、Red Hat により提供されるすべての製品によって、system ディレクトリー内にモジュールがインストールされます。
モジュールごとに 1 つのディレクトリーを使用して、カスタムモジュールが EAP_HOME/modules ディレクトリーにインストールされるようにする必要があります。こうすると、同梱されたバージョンではなく、system ディレクトリーに存在するカスタムバージョンのモジュールがロードされるようになります。これにより、ユーザー提供のモジュールがシステムモジュールよりも優先されます。
JBOSS_MODULEPATH 環境変数を使用して JBoss EAP がモジュールを検索する場所を変更する場合は、指定された場所の 1 つで system サブディレクトリー構造を探します。system 構造は、JBOSS_MODULEPATH で指定された場所のどこかに存在する必要があります。
module.xml ファイルの resource-root path 要素では、絶対パスも使用できます。これにより、リソースライブラリーを EAP_HOME/modules ディレクトリーに移動しなくても、リソースライブラリーにアクセスできます。
例: module.xml ファイルの絶対パス
5.1.2. JBoss EAP の動的モジュール リンクのコピーリンクがクリップボードにコピーされました!
動的モジュールは、Java Archive (JAR) または Web Archive (WAR) デプロイメントごとに、または Enterprise Archive (EAR) 内のサブデプロイメントごとに、アプリケーションサーバーによって作成およびロードされます。動的モジュールの名前は、デプロイされたアーカイブの名前に由来します。デプロイメントはモジュールとしてロードされるため、依存関係を設定し、他のデプロイメントで依存関係として使用することが可能です。
モジュールは必要な場合にのみロードされます。通常は、明示的または暗黙的な依存関係を持つアプリケーションがデプロイされるときにロードされます。
5.1.3. JBoss EAP の定義済みモジュール リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションサーバーでデフォルトのモジュールローダーを使用する場合、定義済みモジュールのセットを使用できます。このモジュールはすべての JBoss Modules API が含まれる org.jboss.modules で、JBoss Modules によって提供され、常に利用可能です。標準の Java Platform Module System (JPMS) モジュールも、標準の名前で使用できます。
Java 9 以上で使用できるプラットフォームモジュールのリストは、該当する JDK のドキュメントを参照してください。