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

3.3.3 J2EEのHotDeploy機能

J2EEのHotDeploy機能を使用すると、IJServerを停止せずにモジュールの配備または再配備、配備解除が実行でき、運用中のIJServerに対してWebアプリケーションとEJBアプリケーションを追加または更新、削除できます。
配備中、または配備解除中ではないモジュールに対してリクエスト処理を行うことができるため、アプリケーションの開発が効率的に実施でき、IJServerの連続運用も可能です。

HotDeploy機能を使用しない場合のアプリケーション入れ替え方法


J2EEのHotDeploy機能を使用すると、以下のように配備のみでアプリケーションを入れ替えることが可能です。

HotDeploy機能を使用した場合のアプリケーション入れ替え方法


HotDeploy機能について、以下の順で説明します。

設計方法

開発効率の向上、および運用中の保守性の向上を目的とした機能として“HotDeploy機能”と“クラスのオートリロード機能”を提供しています。HotDeploy機能だけを使用しても十分な効果がありますが、クラスのオートリロード機能を使用することで、さらに開発効率が向上する場合があります。クラスのオートリロード機能については、“3.3.4 クラスのオートリロード機能”を参照してください。


運用方法

HotDeploy機能を使用する場合は、Interstage管理コンソールの[ワークユニット] > [新規作成]タブを選択し、[詳細設定]表示後の[共通定義]より設定してください。また、ワークユニット作成後は、Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [環境設定]タブを選択し[共通定義]から変更できます。

HotDeploy機能を使用する場合は、後述の新規モジュールの配備または既存配備モジュールの再配備を効率的に行うため、HotDeploy機能を使用しない場合とIJServerの起動状態が異なる場合があります。


以下に、配備モジュールとIJServerの起動状態の関係について説明します。

配備モジュールが存在しない場合のIJServerの起動状態

HotDeploy機能を使用する/しないに関係なく、配備モジュールが存在しない場合はIJServerの起動に失敗します。

配備モジュールが存在する場合のIJServerの起動状態

IJServerタイプが“WebアプリケーションとEJBアプリケーションを別JavaVMで運用”の場合は、以下のとおりです。
それ以外のIJServerタイプは、下図に示すHotDeploy機能を使用しない場合と同様です。

WebアプリケーションおよびEJBアプリケーションを配備した場合

HotDeploy機能の使用する/しないに関係なく、すべてのJava VM(ServletコンテナおよびEJBコンテナ)を起動します。

Webアプリケーションのみを配備した場合

アプリケーションが配備されているJava VMを起動します。なお、HotDeploy機能を使用する場合だけ、EJBコンテナにEJBアプリケーションが配備されている/いないに関係なくJava VM(EJBコンテナ)を起動します。

EJBアプリケーションのみを配備した場合

アプリケーションが配備されているJava VMを起動します。HotDeploy機能を使用する場合だけ、ServletコンテナにWebアプリケーションが配備されている/いないに関係なくJava VM(Servletコンテナ)を起動します。

配備モジュールが存在するが活性化に失敗する場合の起動状態

EJBアプリケーションの場合は、以下のとおりです。なお、Webアプリケーションの場合は、HotDeployを使用する/しないに関係なく、活性化が成功するアプリケーションだけを起動します。

HotDeploy機能を使用する場合

活性化が成功するEJBアプリケーションだけを起動します。

HotDeploy機能を使用しない場合

すべてのEJBアプリケーションは起動しません。

HotDeploy機能を使用する場合と使用しない場合について、以下の表に示します。

EAR間で分離する/すべて分離する
配備モジュールが存在しない場合は、IJServerの起動は行いません。
配備モジュールが存在する場合は、以下の表に従いIJServerの起動を行います。

  

HotDeploy機能を使用しない場合

HotDeploy機能を使用する場合

配備されているモジュールの状態/配備されているモジュールの種別

一部またはすべてのモジュールが活性不可能

すべてのモジュールが活性可能

一部またはすべてのモジュールが活性不可能

すべてのモジュールが活性可能

war

起動します

起動します

ejb-jar

起動しません

起動します

ear

warのみ

起動します

ejb-jarのみ

起動しません

起動します

warおよびejb-jar

含まれるejb-jarがすべて活性可能なモジュールの場合は起動します

起動します

注意

HotDeploy機能を使用しない場合、EJBアプリケーションの活性化に失敗するとIJServerは起動しません。

新規配備/再配備/配備解除/再活性

新規配備/再配備/配備解除/再活性は、Interstage管理コンソールを使用して実行してください。新規配備/再配備はijsdeploymentコマンドでも実施できます。配備解除はijsundeloymentコマンドでも実施できます。

新規配備(新規モジュールの配備)

配備を実行すると、運用環境へのモジュールの配備と、配備モジュールの活性化を実行します。
Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [配備]で、配備対象のモジュールを「参照」ボタンから選択してください。
ijsdeploymentコマンドを使用する場合、以下を実行してください。

ijsdeployment -n IJServerのワークユニット名 -f 配備対象のモジュール

再配備(既存配備モジュールの再配備)

配備を実行すると、配備モジュールの非活性化(1)、モジュールの配備、配備モジュールの活性化を実行します。
Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [配備]で、再配備するモジュールを「参照」ボタンから選択してください。
ijsdeploymentコマンドを使用する場合、以下を実行してください。

ijsdeployment -n IJServerのワークユニット名 -f 配備対象のモジュール -r

配備解除

配備解除を実行すると、配備モジュールの非活性化(1)、モジュールの配備解除を実行します。
Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [アプリケーション状態/配備解除]タブから[チェックボックス]で選択されている配備モジュールを配備解除します。
ijsundeploymentコマンドを使用する場合、以下を実行してください。

ijsundeployment -n IJServerのワークユニット名 -t 配備モジュール

再活性(注2)

Interstage管理コンソールの[ワークユニット] > “ワークユニット名” > [アプリケーション状態/配備解除]タブから配備モジュールを選択して再活性ボタンを押すと、配備モジュールの非活性化、配備モジュールの活性化を実行して、定義ファイルの再読み込みとすでに読み込まれたクラスファイルの破棄を行います。
なお、再活性を行う場合、以下の設定が反映されます。

  • Webアプリケーションの場合

    • モジュールの環境設定画面の設定

    • モジュールの名前変換画面の設定

  • EJBアプリケーションの場合

    • モジュールの環境設定画面の設定

    • モジュールの名前変換画面の設定

    • アプリケーションのアプリケーション環境定義画面の設定

1)

配備モジュールの非活性化では、以下を実行します。

  1. 新しいリクエストの受付けを停止

  2. 非活性化処理が開始される前に受け付けたリクエストの処理が終了するまで待機

  3. モジュールの非活性化

配備モジュールの非活性化では、新しいリクエストの受付けを停止して、処理中のリクエストの処理が終了するまで待機します。()1分間待機してもリクエストの処理が終了しない場合、配備モジュールが“非活性化処理中”のままエラーが発生します。この場合、リクエストの処理を終了するまで(状態が“非活性”となるまで)待ってから再度配備を実行するか、または、IJServerを再起動してください。
“非活性”状態となったモジュールについては、再活性することにより活性化することができます。異常状態となったモジュールについては、異常が発生した原因を取り除きIJServerを再起動することにより運用可能な状態となります。
配備モジュールの状態については“配備モジュールの状態”を、また再活性の方法については“再活性”を参照してください。

) Session Beanの非活性化を行う場合、クライアントまたは別モジュールからの以下のリクエストは、Session Beanにとってそれぞれ別のリクエストになります。

  • Session Beanのcreate

  • ビジネスメソッド呼び出し

  • Session Beanのremove

そのためビジネスメソッド処理中に非活性化された場合、ビジネスメソッドが復帰すると非活性化が行われてアクセスはできなくなります。ビジネスメソッド呼出し後にSession Beanのremoveを行っている場合、ビジネスメソッドは正常に復帰してもremoveでエラーになります。

2)

再活性は、以下の場合に使用してください。

  • 異常状態のモジュールに対して異常原因を取り除いた後に配備モジュールを活性化する場合

  • IJServerを停止せずに特定のモジュールのチューニングパラメタやその他の動作モードを変更する場合

  • IJServerを停止せずに特定のモジュールのキャッシュをクリアしたい場合
    例えばインスタンス管理モードがReadOnlyのEntity Beanインスタンスのキャッシュをクリアする場合(非活性化されるとアプリケーションが一度初期化されるため、アプリケーションやコンテナが保持している情報はクリアされます。)


参照

新規配備/再配備/配備解除/再活性の実行に失敗した場合については、“トラブルシューティング集”の“HotDeploy機能使用時の異常”を参照してください。

配備モジュールの状態

各モジュールの状態はInterstage管理コンソールから確認できます。Interstage管理コンソールには以下のように表示されます。

状態

説明

対処

活性

配備モジュールがリクエストを受付けることができます。

非活性

配備モジュールがリクエストを受付けることができません。

コンテナログを参照し、非活性状態となっている原因を取り除き、再活性処理を行ってください。

活性(一部)

配備モジュールがリクエストを受付けることができますが、IJServerの一部のプロセスでモジュールが非活性状態となっています。

コンテナログを参照し、非活性状態となっている原因を取り除き、再活性処理を行ってください。

活性(不整合)

配備モジュールがリクエストを受付けることができますが、各プロセスで活性化されているモジュールの整合性が合っていません。
(配備中にIJServerの一部プロセスを再起動したため、あるプロセスが再配備前のモジュールをロードしています。)
活性(一部)と活性(不整合)が混在している状態もこの状態となります。

活性化処理中

配備モジュールの活性化およびリクエスト受付開始の処理中です。

非活性化処理中

配備モジュールのリクエスト受付停止および非活性化処理中です。

状態が変わらないときは、メモリ不足が発生して処理が中断された場合があります。IJServerを停止し、再度起動を実行してください。

異常

配備、配備解除、再活性中にIJServerの一部プロセスが再起動されたため、以下の異常が発生しています。

  • 活性化処理中のプロセスと非活性化処理中のプロセスが混在しています。

配備モジュールの活性化/非活性化/オートリロード処理中に予期せぬ異常が発生しています。

コンテナログを参照し、異常状態となっている原因を取り除いてください。
IJServerを停止し、再度起動を実行してください。


新規配備/再配備/配備解除/再活性時に非活性化/活性化されるモジュール

新規配備/再配備/配備解除/再活性を実行した場合、配備されたモジュールが非活性化、および活性化されますが、この場合配備するモジュールのクラスを参照するすべてのモジュールも非活性化および、活性化されます。
配備モジュールの参照関係はクラスローダの分離方法(EAR間で分離、すべて分離、分離しない)により異なります。

クラスローダの分離方法ごとの非活性化および、活性化する配備モジュールは、以下のように異なります。クラスローダの分離については、“2.3.2 クラスローダの分離”を参照してください。

クラスローダの設定

非活性化/活性化される配備モジュール

EAR

WAR

ejb-jar

RAR

EAR間で分離

対象のEARのみ

対象のWARのみ

配備されているすべてのejb-jarまたはWAR、RAR

配備されているすべてのejb-jarまたはWAR、RAR

すべて分離

対象のEARのみ

対象のWARのみ

対象のejb-jarのみ

対象のRARのみ

分離しない

-※

-※

-※

-※

※)HotDeploy機能は使用できません。


以下にクラスローダの分離方法による非活性化、および活性化について説明します。
図中の非活性化の単位で示す範囲で非活性化し、活性化の単位で示す範囲で活性化します。なお、モジュールの活性化に失敗した場合、失敗したモジュールを除いて他のモジュールについては活性化を継続します。

EAR間で分離の場合

EAR間で分離の場合、ejb-jarやRARのクラスは別のejb-jarまたはRAR、WARから参照することができるためejb-jarやRARを配備すると、配備されているすべてのejb-jarおよびRAR、WARが非活性化および活性化されます。なお、EARやWARを配備すると配備モジュールは個々に非活性化および活性化されます。

すべて分離の場合

すべて分離の場合、モジュールは個別に非活性化と活性化されます。

Sharedディレクトリ

Sharedディレクトリには以下の2種類があり、再活性の動作が異なります。

IJServerディレクトリ配下のSharedディレクトリ

IJServer内で共通に使用するクラスを設定するディレクトリです。本ディレクトリ内のクラスまたはjarファイルは再活性の対象外のため、置き換えた場合にはIJServerを再起動するまで反映されません。

EARに含まれるSharedディレクトリ

EAR内のアプリケーション間で共通に使用するクラスを設定するディレクトリです。本ディレクトリ内のクラスまたはjarファイルは再活性の対象です。

注意

J2EEのHotDeploy機能の注意事項

  • Interstage管理コンソールのシステム、リソースおよびIJServerで指定した定義の変更は反映の対象となりません。

  • 再活性した場合、ServletのセションとSTATEFUL Session Beanのインスタンスは破棄されますので、再作成してください。
    ただし、セションリカバリ機能使用時のServletのセションについては、自動的にバックアップ・リカバリされ、継続可能です。

  • JNIを使用するクラスを含むアプリケーションを再活性または、再配備した場合、nativeモジュールのロードに失敗し、java.lang.UnsatisfiedLinkErrorがスローされる可能性があります。この場合はIJServerを再起動する必要があります。JNIを使用するアプリケーションに対してHotDeployを行う場合は、“クラスローダ使用時の注意事項”の“J2EEアプリケーションでJNIを使用する場合の注意事項”を参照して対処を行ってください。

  • IJServer上でWebサービスクライアントを運用する場合、該当アプリケーションにHotDeploy機能は使用しないでください。

  • EJBアプリケーションのクライアント配布物を、他のIJServerなどのJava VMが直接参照している場合、上書き配備に失敗することがあります。
    クライアント配布物はコピーしてから参照するように変更してください。