付録B.2 ローカル呼び出し最適化時のクラスローダ構成
ローカル呼び出し最適化機能を利用する場合,デフォルトのクラスローダとはクラスローダ構成が異なります。ローカル呼び出し最適化機能は,別のアプリケーションのEnterprise Beanを高速で呼び出すことができる機能です。
ローカル呼び出し最適化機能を使用するには,J2EEサーバ用ユーザ定義ファイル(<Application Serverのインストールディレクトリ>\CC\server\usrconf\ejb\<サーバ名称>\usrconf.properties)に次の設定をします。
ejbserver.rmi.localinvocation.scope=all
ローカル呼び出し最適化時のクラスローダ構成を次に示します。
各クラスローダの内容を次に示します。
-
システムクラスローダ
Application Serverのコンポーネントが提供するクラスをロードします。
生成タイミング:J2EEサーバ起動時
破棄タイミング:J2EEサーバ停止時
-
コネクタクラスローダ
単体デプロイされたリソースアダプタに含まれるクラスをロードします。J2EEサーバ内に一つだけ存在します。
生成タイミング:J2EEサーバ起動時
破棄タイミング:J2EEサーバ停止時
-
JavaBeansクラスローダ
JavaBeansリソースのクラスをロードします。
生成タイミング:J2EEサーバ起動時
破棄タイミング:J2EEサーバ停止時
-
J2EEコンテナクラスローダ
すべてのアプリケーションクラスローダの親クラスローダとなり,すべてのアプリケーションクラスローダが持つクラスパスが設定されます。J2EEコンテナクラスローダは,J2EEサーバ内に一つだけ存在します。
生成タイミング:J2EEサーバ起動時
破棄タイミング:J2EEサーバ停止時
-
アプリケーションクラスローダ
アプリケーション内のEJB-JAR,ライブラリJAR,およびリソースアダプタに含まれるクラスをクラスパスに持ちます。アプリケーションごとに存在します。ローカル呼び出し最適化時には親クラスローダであるJ2EEコンテナクラスローダにも,アプリケーションクラスローダが持つクラスパスが設定されているため,このクラスローダでは何もロードされません。クラス名はcom.hitachi.software.ejb.server.ApplicationClassLoaderです。
-
生成タイミング:J2EEアプリケーション開始時
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE42143-Iが出力されます(「?」はログの面数)。
-
破棄タイミング:J2EEアプリケーション停止時
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE42144-Iが出力されます(「?」はログの面数)。
-
-
Webアプリケーションクラスローダ
J2EEアプリケーション内のWARファイルに含まれるクラスをロードします。WARファイルごとに存在します。クラス名はorg.apache.catalina.loader.WebappClassLoaderです。
-
生成タイミング:J2EEアプリケーション開始時(Webアプリケーション開始時)
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE39219-Iが出力されます(「?」はログの面数)。
-
破棄タイミング:J2EEアプリケーション停止時(Webアプリケーション停止時)
cjmessage?.log(J2EEサーバの稼働ログ)にKDJE39220-Iが出力されます(「?」はログの面数)。
-
-
JSPクラスローダ
JSPファイルおよびタグファイルをコンパイルしたときに生成されたクラスをロードします。JSPごとに存在します。
-
生成タイミング:JSPクラスロード時
-
破棄タイミング:J2EEアプリケーション停止時(Webアプリケーション停止時)
-
クラスローダの破棄についての注意事項は,「付録B.1 デフォルトのクラスローダ構成」を参照してください。
- ポイント
-
リソースアダプタのロードについて
J2EEリソースアダプタとしてデプロイしたリソースアダプタは,コネクタクラスローダでロードされます。J2EEアプリケーションに含めて使用するリソースアダプタは,アプリケーションクラスローダでロードされます。
- 注意事項
-
プロパティにejbserver.rmi.localinvocation.scope=allを設定して実行するときには,次の点に注意してください。
-
J2EEアプリケーションが持つEJB-JARやライブラリJARは同一のクラスローダでロードされるため,同名のクラスはJ2EEアプリケーション間で共有されます。内容の異なる同名クラスが存在する場合は,Javaの仕様上,先にロードされたクラスだけが有効となります。なお,WAR内のクラスはWAR単位に存在するクラスローダによってロードされますので共有の対象外となります。
-
J2EEアプリケーションのEJB-JARやライブラリJARを入れ替える場合は,J2EEアプリケーションを停止したあとにJ2EEサーバを再起動してください。再起動後に有効となります。
-