2.3.3 バッチアプリケーションの強制停止
実行中のバッチアプリケーションを必要に応じて停止させることができます。これを,バッチアプリケーションの強制停止といいます。ここでは,バッチアプリケーションの強制停止について説明します。
(1) バッチアプリケーションの強制停止方法
バッチアプリケーションを強制停止するにはcjkilljobコマンドを使用します。cjkilljobコマンドを実行するには,次の三つの方法があります。
-
cjkilljobコマンドを直接実行する方法
JP1/AJSを使用しない場合はこの方法で開始します。
-
cjkilljobコマンドをJP1/AJSのリカバリージョブとして定義しておき,ジョブやジョブネットの強制停止の延長で実行する方法
BJEXまたはJP1/Advanced Shellの使用の有無に関係なく,JP1/AJSを使用する場合はこの方法で開始します。
2.の方法で,JP1/AJSのリカバリージョブとしてバッチアプリケーションを強制停止するときのJP1/AJSのジョブの定義については,「2.13 JP1/AJSとの連携」を参照してください。
-
BJEXまたはJP1/Advanced Shellの強制停止の延長で,バッチアプリケーションを強制停止する方法
BJEXまたはJP1/Advanced Shellを使用してバッチアプリケーションを実行している場合,BJEXまたはJP1/Advanced Shellを強制終了することで,これらの製品を経由して実行されたバッチアプリケーションも自動的に停止されます。この方法では,JP1/AJSのリカバリージョブを定義する必要はありません。
なお,バッチアプリケーションの強制停止に失敗した場合,バッチサーバの強制停止が実行されます。このため,複数のアプリケーションを続けて実行する場合は,バッチサーバの再起動が必要になります。バッチアプリケーションの強制停止失敗に備えて,あらかじめバッチサーバを自動再起動するよう設定しておくことをお勧めします。バッチサーバの自動再起動は,Management Serverの運用監視を使用して実現できます。詳細は,マニュアル「アプリケーションサーバ 機能解説 運用/監視/連携編」の「2.4 障害発生時の自動再起動」を参照してください。
(2) バッチアプリケーションの強制停止処理
実行中のバッチアプリケーションを強制停止するには,cjkilljobコマンドを使用します。cjkilljobコマンドを使用すると,バッチアプリケーションを実行しているスレッドに対してメソッドキャンセルを実行してバッチアプリケーションを強制停止します。
メソッドキャンセルとは,実行中のメソッドをキャンセルする機能です。ただし,メソッドを実行している領域によって,キャンセルできるメソッドとできないメソッドがあります。メソッドをキャンセルできる領域のことを非保護区,メソッドをキャンセルできない領域を保護区といいます。実行中のメソッドが非保護区の場合に,メソッドキャンセルが実行されます。バッチアプリケーションの強制停止で実行されるメソッドキャンセルは,J2EEアプリケーション実行時間の監視機能で実行されるメソッドキャンセルと同じです。メソッドキャンセルの処理については,マニュアル「アプリケーションサーバ 機能解説 運用/監視/連携編」の「5.3.4 メソッドキャンセルとは」を参照してください。
バッチアプリケーション強制停止時に実行される処理を次に示します。
-
バッチアプリケーションの強制停止処理を開始することを示すメッセージ(KDJE55004-I)を出力します。
-
public static void main(String[])メソッドまたはpublic static int main(String[])メソッドのメソッドキャンセルを実行します。
なお,メソッドキャンセルに失敗した場合,KDJE55017-Eを出力して強制停止が失敗し,バッチサーバが強制停止します。強制停止が失敗した場合は,バッチサーバを再起動してください。
-
バッチアプリケーションの強制停止処理が完了したことを示すメッセージ(KDJE55005-I)を出力します。
-
FullGCを実行します。
-
cjexecjobコマンドにバッチアプリケーションの終了コードを送信します。
次の表に,バッチアプリケーションの強制停止条件を示します。
バッチアプリケーションの強制停止の条件 |
バッチサーバの動作 |
cjexecjobコマンドの動作 |
---|---|---|
バッチアプリケーション実行中にバッチ強制停止コマンドを実行した。 |
KDJE55004-I出力して,バッチアプリケーションの実行を強制停止を開始する。強制停止の完了時にはKDJE55005-Iを出力する。強制停止に失敗したときはKDJE55017-Eを出力する。 |
バッチ強制終了時の正常パス 戻り値:1 |
なお,JP1/Advanced Shellのadshjavaコマンドによってバッチアプリケーションを実行した場合は,JP1/Advancel Shellのジョブを強制終了することで,JP1/Advanced Shellが自動的にcjkilljobコマンドを実行してバッチアプリケーションを強制停止します。
(3) バッチアプリケーションの強制停止実行時の注意事項
バッチアプリケーションの強制停止に失敗すると,バッチサーバが強制停止されます。複数のバッチアプリケーションを連続して実行する場合,バッチサーバの強制停止後に実行するバッチアプリケーションを開始する前に,バッチサーバを再起動する必要があります。このため,Management Serverを利用して,バッチサーバが自動的に再起動するように設定してください。詳細は,マニュアル「アプリケーションサーバ 機能解説 運用/監視/連携編」の「5.3.4 メソッドキャンセルとは」を参照してください。