ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

3.3.4 クラスのオートリロード機能

クラスのオートリロード機能とは、IJServerを停止せずに配備済みのアプリケーションのクラスを入れ替えることができる機能です。
クラスのオートリロードは以下の変更があった場合に行われます。

クラスのオートリロードを行う場合の設定は、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブで、[オートリロード機能の使用]を“する”に設定します。

クラスのオートリロード機能を使用した場合、修正したアプリケーションのクラスやJarファイルを置き換えるだけで自動的にロードされるため、アプリケーションを配備し直す必要がなく、またIJServerの停止と起動の必要もないため、効率よく開発できます。
アプリケーションの開発を行う場合は、クラスのオートリロード機能を行うことを推奨します。


設計方法

配備モジュールのクラスファイルを頻繁に変更して動作確認する開発作業中は、クラスのオートリロード機能を使用することで開発効率を向上させることが可能です。ただし、クラスのオートリロード機能はコンテナがクラスファイルの変更を絶えず監視するため、処理性能が劣化します。このため、アプリケーションの開発時のみ使用してください。

また、以下のクラスについては入れ替えることができません。以下のクラスを入れ替える場合にはHotDeploy機能を使用してください。HotDeploy機能については“3.3.3 J2EEのHotDeploy機能”を参照してください。

運用方法

クラスのオートリロード機能ではクラスを定期的に監視するため、Interstage管理コンソールから監視時間間隔を定義する必要があります。Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブで設定を行ってください。詳細はInterstage管理コンソールのヘルプを参照してください。

実際に入れ替えを行いたいクラスファイルは、配備ディレクトリに直接コピーしてください。
クラスのオートリロード機能の対象は以下のディレクトリに含まれるクラスです。コピー先(配備ディレクトリ)の詳細については、“2.2.3 IJServerのファイル構成”を参照してください。


[J2EE共通ディレクトリ]\ijserver\[IJServer名]\apps配下の以下のファイル

[J2EE共通ディレクトリ]/ijserver/[IJServer名]/apps配下の以下のファイル

クラスファイルを入れ替えた場合、そのクラスを参照できるモジュールのクラスがすべてオートリロードされます。クラスファイルを参照できるモジュールは、クラスローダの設定により異なります。以下にオートリロードされるモジュールのクラスを示します。

オートリロードされるクラス

入れ替えるクラス

クラスローダの設定

EAR間で分離

すべて分離

分離しない

個別に配備されたWARのクラス

入れ替えたWARのクラスのみ

なし(クラスのオートリロード機能は使用できません。)

EARに含まれるWARのクラス

入れ替えたWARのクラスのみ

個別に配備されたejb-jarのクラス

個別に配備されたejb-jarまたはRAR、WARのクラスすべて

入れ替えたejb-jarのクラスのみ

EARに含まれるejb-jarのクラス

EARに含まれるモジュールのクラスすべて

EARに含まれるSharedディレクトリ配下のクラス

EARに含まれるモジュールのクラスすべて

個別に配備されたRARのクラス

個別に配備されたejb-jarまたはRAR、WARのクラスすべて

なし(配備を行うことができないため、オートリロードの対象になりません。)

EARに含まれるRARのクラス

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を削除する必要があります。
    なお、アプリケーションの配備先については“2.2.3 IJServerのファイル構成”を参照してください。
    interstage.xmlの編集については“4.11.2 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機能による配備解除/再配備を行ってください。


  • ファイルをコピーする場合、ファイルのアクセス権はコピー前と同様に設定してください。アクセス権に不当な設定をした場合、アプリケーションの実行に失敗または配備失敗、配備解除失敗などが発生する可能性があります。