3.7. クラスローディングとサブデプロイメント
3.7.1. エンタープライズアーカイブのモジュールおよびクラスローディング
エンタープライズアーカイブ (EAR) は、JAR または WAR デプロイメントのように、単一モジュールとしてロードされません。これらは、複数の一意のモジュールとしてロードされます。
以下のルールによって、EAR に存在するモジュールが決定されます。
-
EAR アーカイブのルートにある
lib/ディレクトリーの内容はモジュールです。これは、親モジュールと呼ばれます。 - 各 WAR および Jakarta Enterprise Beans JAR サブデプロイメントはモジュールです。これらのモジュールの動作は、他のモジュールおよび親モジュールの暗黙的な依存関係と同じです。
- サブデプロイメントでは、親モジュールとすべての他の非 WAR サブデプロイメントに暗黙的な依存関係が存在します。
JBoss EAP ではサブデプロイメントクラスローダーの分離がデフォルトで無効になっているため、WAR サブデプロイメント以外の暗黙的な依存関係が発生します。親モジュールの依存関係は、サブデプロイメントクラスローダーの分離に関係なく永続します。
サブデプロイメントでは、WAR サブデプロイメントに暗黙的な依存関係が存在しません。他のモジュールと同様に、サブデプロイメントは、別のサブデプロイメントの明示的な依存関係で設定できます。
サブデプロイメントクラスローダーの分離は、厳密な互換性が必要な場合に有効にできます。これは、単一の EAR デプロイメントまたはすべての EAR デプロイメントに対して有効にできます。Jakarta EE の仕様では、依存関係が各サブデプロイメントの MANIFEST.MF ファイルの Class-Path エントリーとして明示的に宣言されている場合を除き、移植可能なアプリケーションがお互いにアクセスできるサブデプロイメントに依存しないことが推奨されます。
3.7.2. サブデプロイメントクラスローダーの分離
エンタープライズアーカイブ (EAR) の各サブデプロイメントは独自のクラスローダーを持つ動的モジュールです。デフォルトでは、サブデプロイメントは他のサブデプロイメントのリソースにアクセスできます。
サブデプロイメントが他のサブデプロイメントのリソースにアクセスすることが許可されていない場合は、厳格なサブデプロイメントの分離を有効にできます。
3.7.3. EAR 内のサブデプロイメントクラスローダーの分離を有効にする
このタスクでは、EAR の特別なデプロイメント記述子を使用して EAR デプロイメントのサブデプロイメントクラスローダーの分離を有効にする方法を示します。アプリケーションサーバーを変更する必要はなく、他のデプロイメントは影響を受けません。
サブデプロイメントクラスローダーの分離が無効であっても、WAR を依存関係として追加することはできません。
デプロイメント記述子ファイルを追加します。
jboss-deployment-structure.xmlデプロイメント記述子ファイルが EAR のMETA-INFディレクトリーに存在しない場合は追加し、次の内容を追加します。<jboss-deployment-structure> </jboss-deployment-structure>
<ear-subdeployments-isolated>要素を追加します。<ear-subdeployments-isolated>要素がjboss-deployment-structure.xmlファイルに存在しない場合は追加し、内容がtrueになるようにします。<ear-subdeployments-isolated>true</ear-subdeployments-isolated>
この EAR デプロイメントに対してサブデプロイメントクラスローダーの分離が有効になります。つまり、EAR のサブデプロイメントは WAR ではないサブデプロイメントごとに自動的な依存関係を持ちません。
3.7.4. エンタープライズアーカイブのサブデプロイメント間で共有するセッションの設定
JBoss EAP では、EAR に含まれる WAR モジュールサブデプロイメント間でセッションを共有するようエンタープライズアーカイブ (EAR) を設定する機能が提供されます。この機能はデフォルトで無効になり、EAR の META-INF/jboss-all.xml ファイルで明示的に有効にする必要があります。
この機能は標準的サーブレット機能ではないため、この機能が有効な場合はアプリケーションを移植できないことがあります。
EAR 内の WAR 間で共有するセッションを有効にするには、EAR の META-INF/jboss-all.xml で shared-session-config 要素を宣言する必要があります。
例: META-INF/jboss-all.xml
<jboss xmlns="urn:jboss:1.0"> ... <shared-session-config xmlns="urn:jboss:shared-session-config:2.0"> </shared-session-config> ... </jboss>
shared-session-config 要素は、EAR 内のすべての WAR に対して共有セッションマネージャーを設定するために使用されます。shared-session-config 要素が存在する場合は、EAR 内のすべての WAR で同じセッションマネージャーが共有されます。ここで行われる変更は、EAR 内に含まれるすべての WAR に影響します。
3.7.4.1. 共有セッション設定オプションのリファレンス
例: META-INF/jboss-all.xml
<jboss xmlns="urn:jboss:1.0">
<shared-session-config xmlns="urn:jboss:shared-session-config:2.0">
<distributable/>
<max-active-sessions>10</max-active-sessions>
<session-config>
<session-timeout>0</session-timeout>
<cookie-config>
<name>JSESSIONID</name>
<domain>domainName</domain>
<path>/cookiePath</path>
<comment>cookie comment</comment>
<http-only>true</http-only>
<secure>true</secure>
<max-age>-1</max-age>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
<replication-config>
<cache-name>web</cache-name>
<replication-granularity>SESSION</replication-granularity>
</replication-config>
</shared-session-config>
</jboss>
| 要素 | 説明 |
|---|---|
| shared-session-config |
共有セッション設定のルート要素。この要素が |
| distributable | 分散可能なセッションマネージャーを使用する必要があることを指定します。スキーマのバージョン 2.0 以降では、分散不可のセッションマネージャーがデフォルトで使用されます。バージョン 1.0 では、分散可能なセッションマネージャーが、引き続きデフォルトのセッションマネージャーになります。 |
| max-active-sessions | 許可される最大セッション数。 |
| session-config | EAR に含まれるすべてのデプロイ済み WAR に対するセッション設定パラメーターを含みます。 |
| session-timeout | EAR に含まれるデプロイ済み WAR で作成されたすべてのセッションに対するデフォルトのセッションタイムアウト間隔を定義します。指定されたタイムアウトは、分単位の整数で表記する必要があります。タイムアウトが 0 またはそれよりも小さい値である場合は、コンテナーにより、セッションのデフォルトの動作がタイムアウトしなくなります。この要素が指定されない場合は、コンテナーでデフォルトのタイムアウト期間を設定する必要があります。 |
| cookie-config | EAR に含まれるデプロイ済み WAR により作成されたセッション追跡クッキーを含みます。 |
| name |
EAR に含まれるデプロイ済み WAR により作成されたセッション追跡クッキーに割り当てられる名前。デフォルト値は |
| domain | EAR に含まれるデプロイ済み WAR により作成されたセッション追跡クッキーに割り当てられるドメイン名。 |
| path | EAR に含まれるデプロイ済み WAR により作成されたセッション追跡クッキーに割り当てられるパス。 |
| comment | EAR に含まれるデプロイ済み WAR により作成されたセッション追跡クッキーに割り当てられるコメント。 |
| http-only |
EAR に含まれるデプロイ済みの WAR によって作成されたセッション追跡クッキーを |
| secure | 対応するセッションを開始したリクエストが HTTPS ではなくプレーン HTTP を使用している場合であっても、EAR に含まれるデプロイ済みの WAR によって作成されたセッション追跡クッキーをセキュアとマークするかどうかを指定します。 |
| max-age |
EAR に含まれるデプロイ済みの WAR によって作成されたセッション追跡クッキーに割り当てられる有効期間 (秒単位)。デフォルト値は |
| tracking-mode | EAR に含まれるデプロイ済み WAR により作成されたセッションの追跡モードを定義します。 |
| replication-config | HTTP セッションクラスターリング設定を含みます。 |
| cache-name |
このオプションはクラスターリング専用です。セッションデータを格納する Infinispan コンテナーとキャッシュの名前を指定します。デフォルト値が明示的に設定されていない場合は、アプリケーションサーバーによってデフォルト値が決定されます。キャッシュコンテナー内で特定のキャッシュを使用するには、 |
| replication-granularity |
このオプションはクラスターリング専用です。セッションレプリケーションの粒度を決定します。可能な値は
|