5.5.1 J2EEアプリケーションの停止とは
(1) J2EEアプリケーション停止の種類
J2EEアプリケーション停止の種類には,次の二つがあります。
- 通常停止
- 日常運用の中で,J2EEアプリケーションを停止するときの停止方法です。J2EEアプリケーション内のWebアプリケーションやEnterprise Beanを順番に停止して,サービスを安全に停止させます。なお,J2EEアプリケーション内でリクエストが実行されている場合,リクエストが終了するまでJ2EEアプリケーションは停止しません。ただし,通常停止を実行するときには,タイムアウトを設定できます。タイムアウトを設定しておくと,J2EEアプリケーションが停止していない場合でも,一定時間が経過したらクライアントに制御が戻ります。
- 通常停止では,まず,サービスを閉塞してリクエストの受け付けを中止してから,J2EEアプリケーションを停止します。サービス閉塞とは,新しいリクエストを受け付けない状態で,すでに受け付けたリクエストを実行することです。
- 例えば,次のような場合に計画的にJ2EEアプリケーションを停止するときには,まず,サービス閉塞を実行してから,J2EEアプリケーションを停止します。
- 一日のうち特定の時間内にだけサービスを提供する場合
- システムをメンテナンスする場合
- 強制停止
- J2EEアプリケーションで処理中のリクエストが完了するのを待たないで,リクエストを強制的に停止する方法です。強制停止によって,使用されていたリソースは解放されます。
- J2EEアプリケーションでトラブルが発生した場合など,クライアントに制御が戻らないときには,強制停止によってサービスが迅速に停止できるようになります。
- ポイント
- 次の場合にはJ2EEアプリケーションの強制停止を実行できません。
- ステートメントキャンセルが実行できない場合
データベースを操作している場合に実行中のSQLの処理が戻らなくなったとき,ステートメントキャンセルが実行されます。ステートメントキャンセルは,実行中のSQLの処理を取り消す処理のことです。
ただし,リソースアダプタの設定,システム構成,使用しているトランザクションの種類などによっては,ステートメントキャンセルができない場合があります。ステートメントキャンセルができない場合,SQLを実行中のトランザクションのタイムアウト,およびSQLの処理が戻らないJ2EEアプリケーションの強制停止は実行できません。
ステートメントキャンセルについては,マニュアル「Cosminexus アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.15.8 トランザクションタイムアウトとステートメントキャンセル」を参照してください。
- メソッドキャンセルが実行できない場合
強制停止を実行すると,実行中のスレッドは,メソッドキャンセルによって予期しない場所で中断されます。このため,メソッドキャンセルの対象スレッドとほかのスレッドで更新または削除を実行する共有データがあるJ2EEアプリケーションの場合,メソッドキャンセルを使用できません。
メソッドキャンセルが実行できないJ2EEアプリケーションの構成については,「5.3.4 メソッドキャンセルとは」を参照してください。
- CTMを使用する環境で,J2EEアプリケーションのアンデプロイ時のスケジュールキューを非活性にするための設定に,タイムアウト時間として0(ゼロ)を設定した場合
CTMのスケジュールキューを非活性にするための処理のタイムアウト時間として0を設定した場合,リクエストが終了するまでCTMによる閉塞が完了しません。このため,J2EEアプリケーションを停止できなくなります。
詳細は,マニュアル「Cosminexus アプリケーションサーバ 機能解説 拡張編」の「3.7.4 スケジュールキューの閉塞制御」を参照してください。
(2) 停止のしかた
(3) J2EEアプリケーション停止処理の流れ
ここでは,J2EEアプリケーション停止処理の流れについて説明します。通常停止と強制停止の処理の流れを次の図に示します。
図5-9 J2EEアプリケーション停止処理の流れ
![[図データ]](figure/zu050900.gif)
通常停止処理では,閉塞処理と停止処理が実施されます。
閉塞処理,停止処理,および強制停止処理について,次項以降で説明します。