Interstage Application Server J2EE ユーザーズガイド |
目次 索引 |
第1部 J2EE共通編 | > 第2章 J2EEアプリケーションの設計 |
Javaのクラスローダはクラスファイルを検索し、クラスをメモリにロードする機能を提供します。
J2EEアプリケーションを作成する際は、クラスがどのクラスローダでロードされるかを理解してJ2EEアプリケーションを構築してください。
Javaのクラスローダは親クラスローダと子クラスローダからなる階層構造をもっています。親クラスローダと子クラスローダの関係はオブジェクトのスーパークラスとサブクラスの関係に似ています。
子クラスローダでロードされたクラスから親クラスローダでロードされたクラスを参照することはできますが、親クラスローダでロードされたクラスから子クラスローダでロードされたクラスを参照することはできません。
JNI(Java Native Interface)を利用している場合はさらに注意が必要です。JNIを利用する場合はNativeモジュールをクラスローダがロードしますが、Javaのクラスローダでは同じNativeモジュールは同じクラスローダ上からのみ利用可能となります。
(1)と(2)で同じNativeモジュールを使用していますが、先にNativeモジュールを読み込んだ側からのみ利用可能となります。
クラスBが先に動作した場合はクラスAには“java.lang.UnsatisfiedLinkError”がスローされます。
上記は、Interstageの場合にも当てはまります。
一般的には、クラスローダは委譲モデルを使ってクラスをロードします。クラスローダは関連する親クラスローダを持ち、クラスをロードするために呼び出されると、クラスローダはそれ自体でクラスのロードを試みる前に、該当クラスのロードを親クラスローダに委譲します。
Interstageが利用するクラスとアプリケーションが利用するクラスの独立性を高めるために、Interstageのクラスローダはこの委譲モデルとは少し違う動作をします。Interstageのクラスローダの検索順番については以降で説明します。
目次 索引 |