Cosminexus 機能解説
リロード機能は,展開ディレクトリ形式のJ2EEアプリケーションを使用している場合に使用できます。リロード機能を使用することで,J2EEサーバを再起動することなく,デプロイ済みのサーブレット,JSPやEJB-JARを動的に入れ替えられるようになります。
また,リロード機能を使用する場合には,通常のJ2EEアプリケーションの入れ替えで必要となる,入れ替え前のJ2EEアプリケーションの停止と削除,入れ替えるJ2EEアプリケーションのインポートとデプロイなどの手順が不要になります。このため,通常のJ2EEアプリケーションの入れ替えに比べて,少ない手順で入れ替えができるようになります。J2EEアプリケーションの入れ替えについては,「19.6.1 J2EEアプリケーション入れ替えの概要」を参照してください。
J2EEアプリケーションのリロードには,更新検知によるリロードと,コマンドによるリロードの2種類の方法があります。
更新検知によるリロードは,J2EEアプリケーション開発時のテストを支援する機能として利用できます。更新検知によるリロードを次の図に示します。
図7-6 更新検知によるリロード
展開ディレクトリ形式のJ2EEアプリケーションを構成するEJBアプリケーション(EJB-JAR)やWebアプリケーション(WAR)が更新された場合に,J2EEサーバがJ2EEアプリケーションの更新を検知し,更新後のEJB-JARやWARを自動的にリロードします。
J2EEサーバは,J2EEアプリケーションの構成ファイルを定期的に監視し,構成ファイルの更新を検知すると,J2EEアプリケーションのリロードを実行します。J2EEアプリケーションの更新からリロードまでの処理の流れを次の図に示します。
図7-7 更新検知によるリロードの処理の流れ
図中の1.〜10.について説明します。
分類 | 実行されるメソッド |
---|---|
Stateless Session Beanの場合 | ejbRemove PreDestroy |
Stateful Session Beanの場合 | ejbRemove PreDestroy |
Entity Beanの場合 | unsetEntityContext |
Message-driven Beanの場合 | ejbRemove |
分類 | 実行されるメソッド |
---|---|
Stateless Session Beanの場合 | setSessionContext ejbCreate PostConstruct |
Entity Beanの場合 | setEntityContext |
Message-driven Beanの場合 | setMessageDrivenContext ejbCreate |
コマンドによるリロードは,J2EEアプリケーション開発時のテストを支援する機能,またはシステムの運用時にJ2EEアプリケーションの入れ替えを支援する機能として利用できます。コマンドによるリロードを次の図に示します。
図7-8 コマンドによるリロード
展開ディレクトリ形式のJ2EEアプリケーションを構成するEJBアプリケーション(EJB-JAR)やWebアプリケーション(WAR)を更新した場合に,ユーザがcjreloadappコマンドを実行します。J2EEサーバは,cjreloadappコマンドを契機にJ2EEアプリケーションの更新を検知し,更新後のEJB-JARやWARを自動的にリロードします。
J2EEアプリケーションの更新からリロードまでの処理の流れを次の図に示します。
図7-9 コマンドによるリロードの処理の流れ
図中の1.〜4.について説明します。5.以降の手順については,更新検知によるリロードの場合と同じです。5.以降の手順については,「(a) 更新検知によるリロード」を参照してください。
リロードの対象として指定できるアプリケーションの種類を次の表に示します。
表7-3 リロードの対象として指定できるアプリケーションの種類
アプリケーションの種類 | 適用の有無 | 制限事項 | |
---|---|---|---|
EJBアプリケーション(EJB-JAR) | Stateless Session Bean | △ | リロード中の新規リクエストはエラーになります。なお,CTMを利用している場合は,リロード中の新規リクエストは実行待ちになります。 |
Stateful Session Bean | △ | リロード中の新規リクエストはエラーになります。また,リロードするとアプリケーションの状態が破棄されるため,アプリケーション開始前の状態になります。 | |
Entity Bean | △ | リロード中の新規リクエストはエラーになります。 | |
Message-driven Bean | △ | ||
Webアプリケーション(WAR) | サーブレット | ○ | − |
JSP | ○ | − | |
ライブラリJAR | − | ○ | − |
リロードの適用範囲は,次の範囲で指定できます。
注 app,web,jspは,usrconf.propertiesのejbserver.deploy.context.reload_scopeキーの指定値です。なお,noneを指定した場合は,リロード機能は無効になります。
なお,リロード機能の有効/無効は,usrconf.propertiesのejbserver.rmi.localinvocation.scopeキーで指定するローカル呼び出し最適化機能の適用範囲と,リロード機能の適用範囲の組み合わせによって決まります。ローカル呼び出し最適化機能の適用範囲とリロード機能の適用範囲の対応を次の表に示します。
表7-4 ローカル呼び出し最適化機能の適用範囲とリロード機能の適用範囲の対応
項目 | ejbserver.rmi.localinvocation.scopeキーの値 | |||
---|---|---|---|---|
all | app | none | ||
ローカル呼び出し最適化の範囲 | 同一J2EEサーバ内となります。 | 同一アプリケーション内となります。 | 範囲はありません。 | |
ejbserver.deploy.context.reload_scopeキーの値 | app | ×※ | ○ | ○ |
web | ○ | ○ | ○ | |
jsp | ○ | ○ | ○ | |
none | × | × | × |
(凡例)○:リロード機能を使用できる ×:リロード機能を使用できない
注※ 設定に誤りがあります。ejbserver.rmi.localinvocation.scope=allの場合にejbserver.deploy.context.reload_scope=appを指定すると,J2EEサーバを起動するときにメッセージが出力されて起動に失敗します。
リロード時のクラスローダの構成は,ローカル呼び出し最適化の範囲によって異なります。ローカル呼び出し最適化の範囲とクラスローダの構成の対応を次の表に示します。なお,クラスローダの構成については,「付録H クラスローダの構成」を参照してください。
表7-5 ローカル呼び出し最適化の範囲とクラスローダの構成の対応
項目 | ejbserver.rmi.localinvocation.scopeキー※の値 | ||
---|---|---|---|
all | app | none | |
ローカル呼び出し最適化の範囲 | 同一J2EEサーバ内となります。 | 同一アプリケーション内となります。 | 範囲はありません。 |
クラスローダ構成 | ローカル呼び出し最適化時のクラスローダ構成になります。 | デフォルトのクラスローダ構成になります。 | デフォルトのクラスローダ構成になります。 |
注※ usrconf.propertiesに指定するキーです。
リロード機能では,ApplicationClassLoader以下,またはWebappClassLoader以下のクラスローダを入れ替えます。EJB-JARをリロードする場合,デフォルトのクラスローダ構成で,次のファイルをロードします。
EJB-JARをリロードするためにApplicationClassLoaderを入れ替える場合は,下位にあるWebappClassLoader,およびJasperLoaderも入れ替える必要があります。したがって,EJB-JAR,ライブラリJAR,参照ライブラリをリロードする場合は,WARを含めたリロードになります。
リロード機能の使用中にエラーが発生した場合の動作を次の表に示します。
表7-6 リロード機能でのエラー発生時の動作
エラーの内容 | 結果 |
---|---|
リロード中(アプリケーション内で処理しているリクエストがない状態)にリクエストがサーバに来た場合 | EJB-JARの場合はクライアントにエラーが返ります。WARの場合,新規リクエストはリロードが完了するまで実行待ちとなります。 |
リロード中に例外が発生した場合(クラスファイルのロードの失敗を含む) | 更新検知は停止しないで,アプリケーションを停止します。更新を検知した場合,停止したJ2EEアプリケーションは再び開始されます。 |
リロード以外の処理(更新チェック中,構成ファイル更新用インターバル中,リロード遅延実行中)で例外が発生した場合 | 更新検知は停止しないで,J2EEアプリケーションは開始状態のまま監視を続けます。 |
J2EEアプリケーションのメソッドがハングアップなどで終了しない場合 | J2EEアプリケーション実行時間の監視でメソッドをキャンセルしないとリロードできません。また,cjreloadappコマンドを使用しないとリロードできません。 J2EEアプリケーション実行時間の監視については,「7.5.7(2) リロードとJ2EEアプリケーション実行時間の監視との関係」を参照してください。 |
リロードに関する注意事項および制限事項を次に示します。
表7-7 Webアプリケーションのリロード処理で実行されるリスナのメソッド
インタフェース名 | メソッド名 |
---|---|
javax.servlet.ServletContextListener | contextDestroyed() |
contextInitialized() | |
javax.servlet.ServletContextAttributeListener | attributeRemoved() |
attributeAdded() | |
javax.servlet.http.HttpSessionActivationListener※ | sessionWillPassivate() |
sessionDidActivate() |
注※ javax.servlet.http.HttpSessionオブジェクトが存在しないときは実行しません。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.