WebOTX Manual V10.2 (第4版) 目次を表示 |
この章では、WebOTX AS が利用するクラスローダについて解説します。 クラスローダについての知識は、アプリケーションが共通に利用するクラスファイルやJarライブラリの配置場所を決定する際に役立ちます。
クラスローダは階層構造になっており、この階層構造に従ってクラスをロードします。
Java VM 等からクラスのロードの要求があった場合、クラスローダはまず親のクラスローダにクラスのロード処理を委譲します。
親のクラスローダでクラスがロードできなかった場合、そのクラスローダ自身でクラスをロードしようとします。
それでもクラスが見つからない場合、NoClassDefFoundError
またはClassNotFoundException
がスローされます。
WebOTX ASのクラスローダについて理解しておくことは、開発者や運用者がアプリケーション共通で使うJARアーカイブやアプリケーション・モジュールのためのリソース・ファイルを、どの位置に配置すべきかを決める際に重要な助けとなります。
WebOTX AS で利用しているクラスローダの階層を以下の図に示します。
ブートストラップクラスローダからApplibsクラスローダまでは、同一Java VM内で共通に利用するクラスローダです。 破線で囲まれたクラスローダは、アプリケーションをロードするクラスローダです。 WAR、EJB、EAR、ライフサイクルモジュールはクラスローダによって分離されているため、お互い干渉することなく動作することができます。 RARは他のアプリケーションから利用されるという性質上、コネクタクラスローダはドメイン内で共通に利用されます。 Applibsクラスローダはドメイン内で共通ですが、アプリケーションからは配備時に指定したライブラリのみ参照可能です。
一般に、下位のクラスローダでロードしたクラスは上位のクラスローダでロードしたクラスを参照できますが、その逆はできません。
つまり、上位のクラスローダでロードしたクラスは、下位のクラスローダでロードしたクラスを参照できず、NoClassDefFoundError
またはClassNotFoundException
の原因となります。
アプリケーションを構築する上で、この原則に従うようにライブラリを配置する必要があります。