Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
|
目次
索引
|
3.3.4 クラスのオートリロード機能
クラスのオートリロード機能とは、IJServerを停止せずに配備済みのアプリケーションのクラスを入れ替えることができる機能です。
クラスのオートリロードは以下の変更があった場合に行われます。
- アプリケーション内に用意したjarファイルを置き換えた場合
- アプリケーションを実行する際にロードされたclassファイルを置き換えた場合
- WEB-INF/lib配下または、ear内のShared/lib配下に新規jarファイルを追加した場合
クラスのオートリロードを行う場合の設定は、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブで、[オートリロード機能の使用]を“する”に設定します。
クラスのオートリロード機能を使用した場合、修正したアプリケーションのクラスやJarファイルを置き換えるだけで自動的にロードされるため、アプリケーションを配備し直す必要がなく、またIJServerの停止と起動の必要もないため、効率よく開発できます。
アプリケーションの開発を行う場合は、クラスのオートリロード機能を行うことを推奨します。
■設計方法
配備モジュールのクラスファイルを頻繁に変更して動作確認する開発作業中は、クラスのオートリロード機能を使用することで開発効率を向上させることが可能です。ただし、クラスのオートリロード機能はコンテナがクラスファイルの変更を絶えず監視するため、処理性能が劣化します。このため、アプリケーションの開発時のみ使用してください。
また、以下のクラスについては入れ替えることができません。以下のクラスを入れ替える場合にはHotDeploy機能を使用してください。HotDeploy機能については“J2EEのHotDeploy機能”を参照してください。
【クラスのオートリロード機能で入れ替えることができないクラス】
EJBのインタフェース(Remoteインタフェース/Homeインタフェース/Localインタフェース/LocalHomeインタフェース)
■運用方法
クラスのオートリロード機能ではクラスを定期的に監視するため、Interstage管理コンソールから監視時間間隔を定義する必要があります。Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブで設定を行ってください。詳細はInterstage管理コンソールのヘルプを参照してください。
実際に入れ替えを行いたいクラスファイルは、配備ディレクトリに直接コピーしてください。
クラスのオートリロード機能の対象は以下のディレクトリに含まれるクラスです。コピー先(配備ディレクトリ)の詳細については、“IJServerのファイル構成”を参照してください。
- 【WARファイルを配備した場合】
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[Webモジュール名]\WEB-INF\lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[Webモジュール名]\WEB-INF\classes配下の拡張子が“.class”のファイル
- 【ejb-jarファイルを配備した場合】
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EJBモジュール名]配下の拡張子が“.class”のファイル
- 【rarファイルを配備した場合】
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[RARのファイル名]配下の拡張子が“.jar”のファイル
- 【EARファイルを配備した場合】
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名]\[WARのファイル名]\WEB-INF\lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名]\[WARのファイル名]\WEB-INF\classes配下の拡張子が“.class”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名]\[ejb-jarのファイル名]配下の拡張子が“.class”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名]\[RARのファイル名]配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名]\Shared\lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps\[EARモジュール名] \Shared\classes配下の拡張子が“.class”のファイル
- 【WARファイルを配備した場合】
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[Webモジュール名]/WEB-INF/lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[Webモジュール名]/WEB-INF/classes配下の拡張子が“.class”のファイル
- 【ejb-jarファイルを配備した場合】
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EJBモジュール名]配下の拡張子が“.class”のファイル
- 【rarファイルを配備した場合】
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[RARのファイル名]配下の拡張子が“.jar”のファイル
- 【EARファイルを配備した場合】
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名]/[WARのファイル名]/WEB-INF/lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名]/[WARのファイル名]/WEB-INF/classes配下の拡張子が“.class”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名]/[ejb-jarのファイル名]配下の拡張子が“.class”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名]/[RARのファイル名]配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名]/Shared/lib配下の拡張子が“.jar”のファイル
- [J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps/[EARモジュール名] /Shared/classes配下の拡張子が“.class”のファイル
クラスファイルを入れ替えた場合、そのクラスを参照できるモジュールのクラスがすべてオートリロードされます。クラスファイルを参照できるモジュールは、クラスローダの設定により異なります。以下にオートリロードされるモジュールのクラスを示します。
【オートリロードされるクラス】
クラスローダの設定 |
入れ替えるクラス |
個別に配備されたWARのクラス |
EARに含まれるWARのクラス |
個別に配備されたejb-jarのクラス |
EARに含まれるejb-jarのクラス |
EARに含まれるSharedディレクトリ配下のクラス |
個別に配備されたRARのクラス |
EARに含まれるRARのクラス |
EAR間で分離 |
入れ替えたWARのクラスのみ |
入れ替えたWARのクラスのみ |
個別に配備されたejb-jarまたはRAR、WARのクラスすべて |
EARに含まれるモジュールのクラスすべて |
EARに含まれるモジュールのクラスすべて |
個別に配備されたejb-jarまたはRAR、WARのクラスすべて |
EARに含まれるモジュールのクラスすべて |
すべて分離 |
入れ替えたWARのクラスのみ |
入れ替えたWARのクラスのみ |
入れ替えたejb-jarのクラスのみ |
EARに含まれるモジュールのクラスすべて |
EARに含まれるモジュールのクラスすべて |
なし
(配備を行うことができないため、オートリロードの対象になりません。) |
EARに含まれるモジュールのクラスすべて |
分離しない |
なし(クラスのオートリロード機能は使用できません。) |
■Sharedディレクトリ
Sharedディレクトリには以下の2種類があり、クラスのオートリロードの動作が異なります。
- IJServerディレクトリ配下のSharedディレクトリ
IJServer内で共通に使用するクラスを設定するディレクトリです。
本ディレクトリ内のクラスまたはjarファイルはオートリロードの対象外のため、置き換えた場合にはIJServerを再起動するまで反映されません。
- EARに含まれるSharedディレクトリ
EAR内のアプリケーション間で共通に使用するクラスを設定するディレクトリです。
本ディレクトリ内のクラスまたはjarファイルはオートリロードの対象です。
■クラスのオートリロードの注意事項
- アプリケーションの配備先資源を直接変更する際、変更できる権限が一般ユーザに付与されていない場合は、必要に応じて管理者が権限を変更してください。
- EJBのインタフェース(LocalHome/Local/Home/Remoteインタフェース)、およびresource adapterのインタフェースは変更できません。インタフェースを変更した場合、以下のエラーが発生する場合があるため、HotDeploy機能で再度配備してください。
- NoClassDefFoundException
- NoClassDefFoundError
- NoSuchMethodError
- CMP2.0のEntity Beanでは、[CMP2.x-XXXX]のメッセージなどが出力される場合があります。
- モジュールが非活性状態の場合は、オートリロードされません。
- アプリケーションが非活性状態となっても、該当アプリケーションに含まれる、あるいはアプリケーションが参照しているクラスファイルやjarファイルがクラスローダでロードされ、リロードの監視対象となる場合があります。
以下のようなクラスファイル、jarファイルが該当します。
- アプリケーションの起動(活性化)処理の延長でロード済みのクラスファイル
- RAR内のjarファイル
- ejb-jar、RARのマニフェストファイルのClass-Pathに指定されたjarファイル
そのため、更新された場合にはリロードの監視でチェックされ、同じクラスローダ上で動作しているアプリケーションのリロードが行われます。
このとき、非活性のアプリケーションは活性化されません。
活性化したい場合は、HotDeploy機能を使用した再配備・再活性または、ワークユニットの再起動を行ってください。
- クラスのオートリロード機能はコンテナがクラスファイルの変更を絶えず監視するため、処理性能が劣化します。このため、アプリケーション開発時のみ使用してください。
- クラスのオートリロード機能は、クラスの入れ替えだけを行います。このため、Interstage管理コンソールのシステム、リソースおよびIJServerで変更した定義、deployment descriptor(Webアプリケーションのweb.xmlを除く)などの定義を変更した結果は有効となりません。
- Webアプリケーションのdeployment descriptor(web.xml)は監視対象ではありませんが、クラスやjarファイルの更新があった場合に再読み込みされます。
deployment descriptor(web.xml)の更新を反映させるためには、まずdeployment descriptor(web.xml)の更新を行った後に他のロード済みのクラスファイルまたはjarファイルの更新を行い、オートリロードを動作させてください。
deployment descriptor(web.xml)のみ更新の場合は、モジュールの再活性またはワークユニットの再起動を行ってください。
また、deployment descriptor(web.xml)の更新によりサーブレット定義がなくなった場合でも、Interstage管理コンソールのWebアプリケーションのモニタには、それまでの情報が累積で表示されます。情報をリセットする場合は、モジュールの再活性またはワークユニットの再起動を行ってください。
- アプリケーションの配備先に保管されたinterstage.xmlは、IJServerが動作するために使用するファイルのため、削除は行わないでください。また、interstage.xmlをテキストエディタなどで編集する場合は<web>タグ、および<ejb>タグ以外は編集しないように注意してください。
ファイルの削除または、<web>タグおよび<ejb>タグ以外を編集した場合、IJServerが正常に動作しません。この場合は、該当するIJServerを削除する必要があります。
なお、アプリケーションの配備先については“IJServerのファイル構成”を参照してください。
interstage.xmlの編集については“interstage.xmlファイル”を参照してください。
- クラスのオートリロードを使用する場合、クラスファイルおよびjarファイルの入れ替えのタイミングによっては、以下のようにアプリケーションの非活性化/活性化が動作します。
|
クラスファイルを追加した場合 |
jarファイルを追加した場合 |
ロード済みのクラスファイルを置き換えた場合 |
ロードされていないクラスファイルを置き換えた場合 |
jarファイルを置き換えた場合 |
アプリケーションの非活性化、活性化 |
動作しない |
動作する |
動作する |
動作しない |
動作する |
アプリケーションの非活性化/活性化が動作した場合、ServletのセションとSTATEFUL Session Beanのインスタンスは破棄されますので、再作成する必要があります。
- JNIを使用するクラスを含むアプリケーションに対してクラスのオートリロードを行った場合、nativeモジュールのロードに失敗し、java.lang.UnsatisfiedLinkErrorがスローされる可能性があります。この場合はIJServerを再起動する必要があります。JNIを使用するアプリケーションに対してクラスのオートリロードを行う場合は、“クラスローダ使用時の注意事項”の“J2EEアプリケーションでJNIを使用する場合の注意事項”を参照して対処を行ってください。
- IJServer上でWebサービスクライアントを運用する場合、該当アプリケーションにオートリロード機能は使用しないでください。
- IJServerが起動している場合、jarファイルはプロセスで使用中となり、上書きおよび削除できない場合があります。
その場合は、IJServerをいったん停止しjarファイルの反映後に再起動、または、HotDeploy機能による配備解除/再配備を行ってください。
- ファイルをコピーする場合、ファイルのアクセス権はコピー前と同様に設定してください。アクセス権に不当な設定をした場合、アプリケーションの実行に失敗または配備失敗、配備解除失敗などが発生する可能性があります。
Copyright 2008 FUJITSU LIMITED