5.6.3 J2EEアプリケーションの入れ替えと保守
ここでは,J2EEアプリケーションの入れ替えと保守について説明します。
J2EEアプリケーションのバージョンアップやメンテナンスを実施する場合,J2EEアプリケーションを入れ替えることがあります。
また,24時間サービス提供が必要なJ2EEアプリケーションを入れ替える場合,CTMを使用したオンライン状態でのJ2EEアプリケーションの入れ替えの方法を使用すると,サービスを停止しないでJ2EEアプリケーションを入れ替えられます。
- 〈この項の構成〉
(1) J2EEアプリケーションの入れ替え
ここでは,サーバ管理コマンドを使用してJ2EEアプリケーションを入れ替える手順を説明します。J2EEアプリケーションは,停止して,削除してから新しいアプリケーションに入れ替えます。入れ替え後,J2EEアプリケーションを再開始します。
なお,ここでは,cosminexus.xmlを含むアプリケーションを入れ替える手順について説明します。J2EEアプリケーションに必要な情報はすべてcosminexus.xmlで定義されているものとします。
入れ替えは,次の手順で実行します。
-
入れ替えるJ2EEアプリケーションを停止します。
cjstopappコマンドを実行します。実行形式と実行例を次に示します。
- 実行形式
cjstopapp <J2EEサーバ名> -name <J2EEアプリケーション名>
- 実行例
-
cjstopapp MyServer -name App1
-
J2EEアプリケーションを削除します。
cjdeleteappコマンドを実行します。実行形式と実行例を次に示します。
- 実行形式
cjdeleteapp <J2EEサーバ名> -name <J2EEアプリケーション名>
- 実行例
-
cjdeleteapp MyServer -name App1
-
入れ替え後のJ2EEアプリケーションをインポートします。
サーバ管理コマンドを使用する場合,cjimportappコマンドを実行します。実行形式と実行例を次に示します。
- 実行形式
cjimportapp <J2EEサーバ名> -f <EARファイルのパス>
- 実行例
-
cjimportapp MyServer -f App1.ear
なお,WARアプリケーションの場合,cjimportwarコマンドを実行します。
-
J2EEアプリケーションを開始します。
サーバ管理コマンドを使用する場合,cjstartappコマンドを実行します。実行形式と実行例を次に示します。
- 実行形式
cjstartapp <J2EEサーバ名> -name <J2EEアプリケーション名>
- 実行例
-
cjstartapp MyServer -name App1
- 参考
-
必要な情報を定義したcosminexus.xmlを含むアプリケーションの場合,アプリケーションをインポートしたあとの属性ファイルの取得および変更は必要ありません。サーバ管理コマンドによる属性ファイルの取得および変更の手順については,マニュアル「アプリケーションサーバ アプリケーション設定操作ガイド」の「3.5 属性ファイルによるプロパティの設定」を参照してください。
(2) リデプロイによるJ2EEアプリケーションの入れ替え
ここでは,リデプロイによるJ2EEアプリケーションの入れ替えについて説明します。
リデプロイとは,アーカイブ形式のJ2EEアプリケーションを入れ替える場合に,少ない手順で高速に入れ替えられるデプロイ方法です。ロジックだけを変更したJ2EEアプリケーションを入れ替えたい場合などに利用できます。リデプロイは,サーバ管理コマンドを使用して実行できます。
リデプロイを実行できる条件を次に示します。
- リデプロイを実行できる条件
-
-
入れ替えられるのは,実行時情報を含まないJ2EEアプリケーションだけです。実行時情報を含むJ2EEアプリケーション(ZIPファイル)はリデプロイできません。
-
入れ替え前と入れ替え後のJ2EEアプリケーションの構成が同じである必要があります。J2EEアプリケーションに含まれるEJB-JAR,リソースアダプタおよびWARの数が異なったり,それらのファイル名称が異なったりする場合は,リデプロイはできません。また,J2EEアプリケーションの名称も同じである必要があります。
-
入れ替え前と入れ替え後のJ2EEアプリケーションに含まれるEJB-JAR内のホームインタフェース(ローカル,リモート),コンポーネントインタフェース(ローカル,リモート),ビジネスインタフェース(ローカル,リモート)のメソッド定義,およびアノテーションの値が同じである必要があります。
-
ランタイム属性だけを引き継ぐ設定をしている場合に,アプリケーション開発環境で設定済みのDDファイル(application.xml,ejb-jar.xml,ra.xmlおよびweb.xml)の定義内容が同じである必要があります。
-
また,J2EEアプリケーションを入れ替える時に,入れ替え前のJ2EEアプリケーションを別な名称に変更して退避しておくと,名称によるJ2EEアプリケーションの世代管理が実現できます。ここでは,J2EEアプリケーションの名称変更についてもあわせて説明します。
リデプロイでは,入れ替え前のJ2EEアプリケーションの情報を,入れ替え後のJ2EEアプリケーションに引き継げます。デフォルトの設定の場合,入れ替え後のJ2EEアプリケーションには,入れ替え前のJ2EEアプリケーションのすべての属性が引き継がれます。ランタイム属性※だけを引き継ぎたい場合は,オプションを指定してcjreplaceappコマンドを実行する必要があります。コマンドの詳細は,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjreplaceapp(アプリケーションの入れ替え)」を参照してください。
- 注※
-
属性ファイルには,DD(application.xml,ejb-jar.xml,ra.xml,web.xml)の定義と属性ファイル独自の定義が設定できます。属性ファイル独自の定義のことを,ランタイム属性といいます。
リデプロイを実行するとき,J2EEアプリケーションは開始,停止どちらの状態でもかまいません。開始状態のJ2EEアプリケーションを入れ替えた場合,J2EEアプリケーションは入れ替え後に自動的に開始されます。ただし,プールやキャッシュに格納されていたJ2EEアプリケーション関連のオブジェクトは破棄されます。停止状態のJ2EEアプリケーションを入れ替えた場合は,入れ替え後のJ2EEアプリケーションも停止した状態になります。
- ポイント
-
J2EEアプリケーションが開始されている状態でリデプロイを実行した場合,リデプロイ処理の中でJ2EEアプリケーションは停止され,入れ替え後に再開始されます。このとき,停止処理の実行時間がサーバ管理コマンド(cjreplaceapp)で設定したタイムアウト時間を超過した場合,J2EEアプリケーションの強制停止が実行されます。タイムアウト時間を指定しなかった場合は,デフォルトのタイムアウト時間である60秒を超過すると,強制停止が実行されます。強制停止実行後にさらにタイムアウト時間を超過した場合は,コマンドが異常終了します。
また,入れ替え後にJ2EEアプリケーションを再開始するとき,開始処理の実行時間がサーバ管理コマンド用のusrconf.propertiesのejbserver.rmi.request.timeoutキーに指定したタイムアウト時間を超過した場合も,コマンドが異常終了します。
入れ替え作業の実行形式と実行例を次に示します。
- 実行形式
cjreplaceapp <J2EEサーバ名> -name <J2EEアプリケーション名> -f <入れ替えるアプリケーションのファイルパス>
- 実行例
cjreplaceapp MyServer -name App1 -f App1.ear
- 注意事項
-
-
cosminexus.xmlを含むアプリケーションをリデプロイする場合,cosminexus.xmlに定義したアプリケーションサーバ独自の情報は入れ替え後のcosminexus.xmlに定義した情報に上書きされます。そのほかのJ2EEアプリケーションを構成する要素(EJB-JARファイル,リソースアダプタなど)やDDなどの定義情報は,入れ替え前の情報を引き継ぎます。
-
WARアプリケーションをリデプロイで入れ替える場合,cosminexus.xmlファイルの再読み込みはできません。WARアプリケーションのアプリケーション属性を変更する場合は,サーバ管理コマンド(cjgetapppropコマンドおよびcjsetapppropコマンド)を使用してください。
-
(3) リロードによるJ2EEアプリケーションの入れ替え
ここでは,リロードによるJ2EEアプリケーションの入れ替え方法について説明します。
なお,cosminexus.xmlを含むアプリケーションをリロードした場合,cosminexus.xmlに定義されたアプリケーションサーバ独自の情報はリロードされません。cosminexus.xmlを含むアプリケーションの形式が展開ディレクトリ形式の場合の入れ替えについては,「5.6.3(1) J2EEアプリケーションの入れ替え」の手順を参照してください。
リロードとは,少ない手順で展開ディレクトリ形式のJ2EEアプリケーションの入れ替えを実行できる機能です。リロードによるJ2EEアプリケーションの入れ替えでは,既存のJ2EEアプリケーションの停止,削除,入れ替え後のJ2EEアプリケーションのアーカイブ,インポート,再開などの作業が不要です。クラスファイルを更新してリロードを実行するだけでJ2EEアプリケーションを更新できるため,メンテナンスが頻繁に発生するシステムの運用などで特に有効な機能です。
なお,リロードによるJ2EEアプリケーションの入れ替えを実行するには,事前に設定が必要です。設定方法の詳細については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「18.8.12 J2EEアプリケーションの更新検知とリロードの設定」を参照してください。
リロードによるJ2EEアプリケーションの入れ替えは,サーバ管理コマンド(cjreloadappコマンド)を使用して実行できます。cjreloadappコマンドの詳細についてはマニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjreloadapp(アプリケーションのリロード)」を参照してください。
リロードは,次の手順で実行します。
-
メンテナンスの内容に従ってJavaソースファイルを編集,または作成して,クラスファイルにコンパイルします。
-
J2EEアプリケーションのリロードを実行します。
cjreloadappコマンドを実行します。実行形式と実行例を次に示します。
- 実行形式
cjreloadapp <J2EEサーバ名> -name <J2EEアプリケーション名>
- 実行例
-
cjreloadapp MyServer -name App1
- 注意事項
-
リロードに失敗したアプリケーションを削除するには,リロードの成功後,アプリケーションを停止,削除するか,J2EEサーバを再起動したあとにアプリケーションを削除してください。
(4) 入れ替えるJ2EEアプリケーション内のJSPの事前コンパイル
J2EEアプリケーションのメンテナンスでJSPを編集した場合,通常,入れ替え後のJ2EEアプリケーションに最初のリクエストがあったときに,JSPのコンパイルが実行されます。 JSP事前コンパイル機能を使用すると,デプロイ前のJ2EEアプリケーションに対してJSPのコンパイルを実行しておけるため,最初のリクエストに対するレスポンスの時間を短縮することができます。
JSP事前コンパイル機能を実行するには,サーバ管理コマンド,または cjjspcコマンドを使用します。ここでは,JSP事前コンパイル機能の実行タイミングと実行方法について説明します。
システム運用時にJSP事前コンパイル機能を実行するタイミングを次に示します。
-
J2EEアプリケーション開始時(サーバ管理コマンド)
-
リロードによるJ2EEアプリケーションの入れ替え時(cjjspcコマンド)
-
リデプロイによるJ2EEアプリケーションの入れ替え時(cjjspcコマンド)
それぞれのタイミングでの,JSP事前コンパイル機能の実行方法について説明します。
(a) J2EEアプリケーションを開始するときのJSPの事前コンパイル
J2EEアプリケーションを開始するときにJSP事前コンパイル機能を実行します。この場合,cjstartappコマンドを,-jspcオプションを指定して実行します。
実行形式と実行例を次に示します。
- 実行形式
cjstartapp <サーバ名称> -name <J2EEアプリケーション名> -jspc
- 実行例
cjstartapp MyServer -name account -jspc
cjstartappコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjstartapp(J2EEアプリケーションの開始)」を参照してください。
(b) リロードによってJ2EEアプリケーションを入れ替えるときのJSPの事前コンパイル
リロードによってJ2EEアプリケーションを入れ替える場合,cjreloadappコマンドを実行する前にJSP事前コンパイル機能を実行します。この場合,cjjspcコマンドを実行します。
実行形式と実行例を次に示します。
- 実行形式
cjjspc -root <Webアプリケーションのルートディレクトリ>
- 実行例(Windowsの場合)
cjjspc -root d:\app\webapp1
- 実行例(UNIXの場合)
cjjspc -root /tmp/app/webapp1
cjjspcコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjjspc(JSPの事前コンパイル)」を参照してください。
(c) リデプロイによってJ2EEアプリケーションを入れ替えるときのJSPの事前コンパイル
リデプロイによってJ2EEアプリケーションを入れ替える場合,cjreplaceappコマンドを実行する前にJSP事前コンパイル機能を実行します。この場合,cjjspcコマンドを実行します。
実行形式と実行例を次に示します。
- 実行形式
cjjspc -root <Webアプリケーションのルートディレクトリ>
- 実行例(Windowsの場合)
cjjspc -root d:\app\webapp1
- 実行例(UNIXの場合)
cjjspc -root /tmp/app/webapp1
cjjspcコマンドの詳細については,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjjspc(JSPの事前コンパイル)」を参照してください。
- 注意事項
-
-
リデプロイによって入れ替えるJ2EEアプリケーションに事前コンパイル機能を使用する場合,入れ替えるJ2EEアプリケーションにJSPコンパイル結果が含まれていないとJSP事前コンパイル機能は実行されません。入れ替え後もJSP事前コンパイル機能を使用する場合は,Webアプリケーション単位のJSP事前コンパイルを実行して,入れ替えるJ2EEアプリケーションにJSPコンパイル結果を含めるようにしてください。
-
タグファイル,静的インクルードされたファイル,またはTLDファイルを更新した場合,更新したファイルを参照するすべてのJSPファイルをコンパイルしてください。
-
JSP事前コンパイル機能を使用した展開ディレクトリ形式のアプリケーションに,JSPファイル,またはタグファイルを追加した場合,JSP事前コンパイルを再度実施して,JSPファイル,またはタグファイルを参照するすべてのJSPファイルをコンパイルしてください。
-
展開ディレクトリ形式のアプリケーションのJSPワークディレクトリに含まれるクラスファイルを,開発環境からコピーして更新する場合は,開発環境でJSP事前コンパイルを実施したすべてのクラスファイルをコピーしてください。
-
cjjspcコマンドを使用してJSPの事前コンパイルを実施した場合,JSPファイルまたはタグファイルのトランスレーション時にエラーが発生すると,エラーメッセージがコンソールに出力されます。また,cjstartappコマンドを使用してJSPの事前コンパイルを実施した場合,JSPファイルまたはタグファイルのトランスレーション時にエラーが発生すると,エラーメッセージがサーブレットログに出力されます。
-
(5) J2EEアプリケーションの名称変更
J2EEアプリケーションを入れ替える時,既存のJ2EEアプリケーションの名称を変更して退避しておくと,J2EEアプリケーションの世代管理ができます。また,入れ替え前のJ2EEアプリケーションに戻したい場合などにもスムーズに対処できます。
J2EEアプリケーションの名称変更は,サーバ管理コマンドで実行します。すでに変更後の名称と同じ名称のJ2EEアプリケーションがある場合,その名称には変更できません。大文字,小文字の違いによる区別はできません。
なお,名称を変更すると,ルックアップ名称の変更も必要になります。J2EEアプリケーションの構成要素に,リモート呼び出しをするホームインタフェースまたはコンポーネントインタフェースを使用したEnterprise Beanが含まれている場合,RMI-IIOPスタブおよびインタフェースを取得し直してください。
RMI-IIOPスタブおよびインタフェースの取得は,サーバ管理コマンド(cjgetstubsjar)を使用して実行します。J2EEアプリケーションを一度も実行していない状態では取得できません。また,次の場合,RMI-IIOPスタブおよびインタフェースの取得はエラーになります。
-
J2EEアプリケーションにWARしか含まれない場合
-
Enterprise Beanで使用されているホームインタフェースおよびコンポーネントインタフェースがすべてローカル呼び出しの場合
-
Enterprise BeanがMessage-driven Beanだけの場合
名称変更は,次の手順で実行します。
-
名称を変更するJ2EEアプリケーションを停止します。
サーバ管理コマンド(cjstopapp)を実行します。
-
J2EEアプリケーションの名称を変更します。
サーバ管理コマンド(cjrenameapp)を実行します。
実行形式と実行例を次に示します。
- 実行形式
cjrenameapp <J2EEサーバ名> -name <変更前のJ2EEアプリケーションの名称> -newname <変更後のJ2EEアプリケーションの名称>
- 実行例
-
cjrenameapp MyServer -name App1 -newname App1bak
-
J2EEアプリケーションを開始します。
サーバ管理コマンド(cjstartapp)を実行します。
-
J2EEアプリケーションに含まれるEnterprise Bean内のホームインタフェースまたはコンポーネントインタフェースがリモート呼び出しを実行するように定義されている場合,RMI-IIOPスタブおよびインタフェースを取得します。
サーバ管理コマンド(cjgetstubsjar)を実行します。
実行形式と実行例を次に示します。
- 実行形式
cjgetstubsjar <J2EEサーバ名> -name <変更後のJ2EEアプリケーションの名称> -d <RMI-IIOPスタブおよびインタフェースを格納するディレクトリのパス>
- 実行例
-
cjgetstubsjar MyServer -name App1bak -d temp