J2EE機能とJava EE機能では、クラスローダの仕様について以下の差異があります。
すべてのIJServerで共通のクラスを指定する方法
J2EE機能では、すべてのIJServerワークユニットで共通のクラスを指定するためにJ2EEプロパティのクラスパスを設定しました。
Java EE機能の場合は、共通ディレクトリに設定してください。共通ディレクトリの詳細は「Java EE運用ガイド」の「IJServerクラスタで使用するクラスの設定について」を参照してください。
IJServer内で共通のクラスを指定する方法
J2EE機能では、IJServerワークユニット内で共通のクラスを指定するために以下の方法を提供していました。
ワークユニットのクラスパスに設定する方法
IJServerディレクトリ配下のSharedディレクトリに設定する方法
アプリケーション固有ライブラリパスに設定する方法
IJServerのextディレクトリに設定する方法
Java EE機能では、上記すべての設定項目を実装していません。代替方法を下表に示します。
設定方法 | J2EE機能 | Java EE機能 | 注意事項 |
---|---|---|---|
ワークユニットのクラスパスに設定する方法 | Interstageクラスローダ | クラスパスのサフィックス | ワークユニットのクラスパスで指定したライブラリはアプリケーションのロードの後にロードされましたが、代替方法ではアプリケーションのロードよりも前にロードされます。 |
IJServerディレクトリ配下のSharedディレクトリに設定する方法 | Applicationクラスローダ | アプリケーションライブラリ |
|
アプリケーション固有ライブラリパスに設定する方法 | |||
IJServerのextディレクトリに設定する方法 | システムクラスローダ | - | Interstage V9.0でも非推奨としていた方法であり、「アプリケーション固有ライブラリパスに設定する方法」を推奨していました。 |
Java EE機能を利用する場合の設定方法の詳細は、「Java EE運用ガイド」の「IJServerクラスタで使用するクラスの設定について」を参照してください。
アプリケーションサーバで使用するクラスのアプリケーションごとの上書きの可否
J2EE機能では、アプリケーションサーバで使用するクラスをアプリケーションごとに上書き可能でした。
Java EE機能では、アプリケーションサーバで使用するクラスのアプリケーションごとの上書きはWebクラスローダだけ可能です。
上書きするためには「親クラスローダに委譲しない」設定を行います。なお、IJServerクラスタで組み込んでいる下表のパッケージについては、アプリケーションが使用しても衝突がおきないようにパッケージ名を変更しています。
変更前のパッケージ | 変更後のパッケージ |
---|---|
org.apache.commons | com.sun.org.apache.commons |
クラスローダの検索順番の変更の可否
J2EE機能では、下図で表すようにクラスローダの検索順番の変更が可能でした。
この機能の仕様は下表のとおりです。
操作内容 | 仕様 |
---|---|
ejb-jarファイルからWARファイルへの参照 | 親が先、親が後のどちらも不可 |
EARファイル内の複数WARモジュールで同パッケージ、同一クラス名の使用 | 親が先、親が後のどちらも可 |
Webアプリと他モジュール(EJB、Connector)の連携 | 親が先、親が後のどちらも可 |
Java EE機能では、「Webクラスローダの委譲モデルの変更」を利用します。
この機能の仕様は下表のとおりです。
操作内容 | 仕様 |
---|---|
ejb-jarファイルからWARファイルへの参照 | 「親クラスローダへの委譲を先にする」で可 |
EARファイル内の複数WARモジュールで同パッケージ、同一クラス名の使用 | 「親クラスローダへの委譲を後にする」で可 (注) |
Webアプリと他モジュール(EJB、Connector)の連携 | 「親クラスローダへの委譲を先にする」で可 |
注) EARモジュール内の複数のWARモジュールで同一パッケージ、同一クラス名を利用することは一般的ではありません。同名を使用したい場合は、WARを別々に配備することで実現できます。