ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

C.2.5 クラスローダの仕様の違いについて

IJServerクラスタとIJServer(J2EE)では、クラスローダの仕様について以下の差異があります。

クラスローダの分離機能の選択

IJServer(J2EE)ではクラスローダの分離方法として、「EAR間で分離」、「すべて分離」、「分離しない」を選択できました。
IJServerクラスタではクラスローダの分離方法は選択できません。
IJServerクラスタのクラスローダの構成については「3.19.1 クラスローダの構成」を参照してください。

すべてのIJServer(J2EE)で共通のクラスを指定する方法(J2EEプロパティ)

IJServer(J2EE)では、すべてのIJServer(J2EE)で共通のクラスを指定するためにJ2EEプロパティのクラスパスを設定しました。
IJServerクラスタを利用する場合は、共通ディレクトリに設定してください。共通ディレクトリの詳細は、「3.19.4 IJServerクラスタで使用するクラスの設定について」を参照してください。

IJServer(J2EE)内で共通のクラスを指定する方法

IJServer(J2EE)では、IJServer(J2EE)内で共通のクラスを指定するために以下の方法を提供していました。

IJServerクラスタでは上記すべての設定項目を実装していません。代替方法を下表に示します。

設定方法

IJServer(J2EE) (すべて分離の場合)

IJServerクラスタ

注意事項

ワークユニットのクラスパスに設定する方法

Interstageクラスローダ

クラスパスのサフィックス

ワークユニットのクラスパスで指定したライブラリはアプリケーションのロードの後にロードされましたが、代替方法ではアプリケーションのロードよりも前にロードされます。

IJServerディレクトリ配下のSharedディレクトリに設定する方法

Applicationクラスローダ

アプリケーションライブラリ

  • アプリケーションライブラリ固有クラスパスはIJServerクラスタ内のすべてのアプリケーションで有効になります。代替方法では配備したアプリケーションだけ有効となります。

  • 代替方法ではライブラリを変更する場合、設置先の同名モジュールを置き換えるか、再配備が必要です。

  • 代替方法ではclassの設定はできません。

アプリケーション固有ライブラリパスに設定する方法

IJServerのextディレクトリに設定する方法

システムクラスローダ

Interstage V9.0.xでも非推奨としていた方法であり、「アプリケーション固有ライブラリパスに設定する方法」を推奨していました。

IJServerクラスタを利用する場合の設定方法の詳細は、「3.19.4 IJServerクラスタで使用するクラスの設定について」を参照してください。

アプリケーションサーバで使用するクラスのアプリケーションごとの上書きの可否

IJServer(J2EE)ではアプリケーションサーバで使用するクラスをアプリケーションごとに上書き可能でした。
IJServerクラスタではアプリケーションサーバで使用するクラスのアプリケーションごとの上書きはWebクラスローダだけ可能です。上書きするためには「親クラスローダに委譲しない」設定を行います。

なお、IJServerクラスタで組み込んでいる下表のパッケージについては、アプリケーションが使用しても衝突がおきないようにパッケージ名を変更しています。

変更前のパッケージ

変更後のパッケージ

org.apache.commons

com.sun.org.apache.commons

クラスローダの検索順番の変更の可否

IJServer(J2EE)では下図で表すように、クラスローダの検索順番の変更が可能でした。

この機能の仕様は下表のとおりです。

操作内容

仕様

ejb-jarファイルからWARファイルへの参照

親が先、親が後のどちらも不可

EARファイル内の複数WARモジュールで同パッケージ、同一クラス名の使用

親が先、親が後のどちらも可

Webアプリと他モジュール(EJB、Connector)の連携

親が先、親が後のどちらも可


IJServerクラスタでは「Webクラスローダの委譲モデルの変更」を利用します。

この機能の仕様は下表のとおりです。

操作内容

仕様

ejb-jarファイルからWARファイルへの参照

「親クラスローダへの委譲を先にする」で可

EARファイル内の複数WARモジュールで同パッケージ、同一クラス名の使用

「親クラスローダへの委譲を後にする」で可 (注)

Webアプリと他モジュール(EJB、Connector)の連携

「親クラスローダへの委譲を先にする」で可

注) EARモジュール内の複数のWARモジュールで同一パッケージ、同一クラス名を利用することは一般的ではありません。同名を使用したい場合は、WARを別々に配備することで実現できます。

スのオートリロード

IJServer(J2EE)ではクラスのオートリロードをサポートしていますが、IJServerクラスタはクラスのオートリロードは未サポートです。
IJServerクラスタを停止せずにクラスを変更するにはアプリケーションを再配備してください。

スローダのトレース

IJServer(J2EE)はクラスローダのトレースをサポートしていますが、IJServerクラスタはクラスローダのトレースは未サポートです。
ロードされたクラスを確認するにはJava VMオプションに-verbose:classを指定してください。ロードされたクラスの情報はJava VMログに出力されます。