2.3.2 バッチアプリケーションの実行
バッチアプリケーションは,cjexecjobコマンドで開始します。バッチアプリケーションのmainメソッドの実行が終わると,バッチサーバはFullGCを実行します。ここでは,バッチアプリケーションの開始方法と,バッチアプリケーションの開始および終了時の処理について説明します。
なお,実行中のバッチアプリケーションを停止する場合には,強制停止をします。バッチアプリケーションの強制停止の方法については,「2.3.3 バッチアプリケーションの強制停止」を参照してください。
(1) バッチアプリケーションの開始方法
ここでは,バッチアプリケーションの開始方法について説明します。
バッチアプリケーションを開始するにはcjexecjobコマンドを使用します。cjexecjobコマンドを実行するには,次の四つの方法があります。
-
cjexecjobコマンドを直接実行する方法
JP1/AJS,BJEX,およびJP1/Advanced Shellを使用しない場合はこの方法で開始します。
-
cjexecjobコマンドをJP1/AJSのジョブとして定義しておき,JP1/AJSから実行する方法
JP1/AJSだけを使用する場合はこの方法で開始します。
-
cjexecjobコマンドをBJEXのジョブステップとして定義しておき,JP1/AJSからBJEXのジョブを実行する方法
JP1/AJSおよびBJEXを使用する場合はこの方法で開始します。
-
JP1/Advanced Shellのジョブ定義スクリプトファイルから,JP1/Advanced Shellが提供するadshjavaコマンドを使用して実行する方法
JP1/Advanced Shellを使用する場合はこの方法で開始します。なお,この方法では,JP1/Advanced Shellを直接実行することも,JP1/AJS経由でJP1/Advanced Shellを実行することもできます。
2.,3.,および4.の方法で,バッチアプリケーションを開始するときの,JP1/AJS,BJEX,およびJP1/Advanced Shellのジョブの定義については,「2.13 JP1/AJSとの連携」を参照してください。
なお,JP1/AJS,BJEX,およびJP1/Advanced Shellからバッチアプリケーションを実行する際には,あらかじめバッチサーバを起動しておいてください。
(2) バッチアプリケーションの開始処理
cjexecjobコマンドにバッチアプリケーションのクラス名とクラスパスを指定すると,cjexecjobコマンドに指定したバッチアプリケーションが開始します。バッチアプリケーション開始時の処理を次に示します。
-
バッチアプリケーションの開始処理を開始することを示すメッセージ(KDJE55000-I)を出力します。
-
バッチアプリケーションのmainメソッドを開始することを示すメッセージ(KDJE55001-I)を出力します。
-
public static void main(String[])メソッドまたはpublic static int main(String[])メソッドを実行します。
バッチアプリケーションの開始時には,cjexecjobコマンドに指定した実行クラスのpublic static void main(String[])メソッドまたはpublic static int main(String[])メソッドが呼び出されます。メソッドの引数には,cjexecjobコマンドのクラス名のあとに指定した引数を設定します。
- バッチアプリケーションの開始に失敗する場合
-
バッチアプリケーションにmainメソッドが定義されていない場合などには,バッチアプリケーションの開始は失敗します。なお,バッチアプリケーションの開始に失敗すると,バッチサーバとcjexecjobコマンドは次のように動作します。
-
バッチサーバの動作
メッセージを出力し,バッチアプリケーション開始に失敗した情報とメッセージ文字列をcjexecjobコマンドに返します。
-
cjexecjobコマンドの動作
バッチサーバから受け取ったメッセージ文字列を出力し,異常終了します。なお,コマンドの戻り値は1です。
次の表に,バッチアプリケーションの開始に失敗する条件,およびバッチサーバが出力するメッセージを示します。
表2‒3 バッチアプリケーションの開始に失敗する条件 バッチアプリケーションの開始に失敗する条件
バッチサーバが出力するメッセージ
usrconf.properties(バッチアプリケーション用ユーザプロパティファイル)の読み込みに失敗した。
KDJE55035-E
cjexecjobコマンドに指定したクラスが存在しない。
KDJE55006-E
public static void main(String[])メソッドまたはpublic static int main(String[])メソッドが定義されていない。
public static void main(String[])メソッドまたはpublic static int main(String[])メソッドのどちらともシグニチャが異なる。
cjexecjobコマンドに指定したクラスのロード時に,java.lang.NoClassDefFoundErrorが発生した。
KDJE55007-E
public static void main(String[])メソッドまたはpublic static int main(String[])メソッド呼び出し時に必要なクラスが見つからない。
static{}ブロック内でエラーが発生した。
上記以外の問題でmainメソッドが実行できない。
KDJE55008-E
-
(3) バッチアプリケーションの終了処理
バッチアプリケーションは,mainメソッドの実行が終わると処理が終了します。バッチアプリケーション終了時に実行される処理を次に示します。
-
バッチアプリケーション終了処理を開始することを示すメッセージ(KDJE55002-I)を出力します。
-
バッチアプリケーションの終了処理が完了したことを示すメッセージ(KDJE55003-I)を出力します。
-
FullGCを実行します。
-
cjexecjobコマンドにバッチアプリケーションの終了コードを送信します。
次の表に,バッチアプリケーションの終了条件と,そのときのバッチサーバやcjexecjobコマンドの動作を示します。
バッチアプリケーションの終了条件 |
バッチサーバの動作 |
cjexecjobコマンドの動作 |
---|---|---|
mainメソッドを最後まで実行した。 |
KDJE55002-I出力して,バッチアプリケーションの実行を終了する。終了後にKDJE55003-Iを出力する。 |
正常終了する。 戻り値:0 |
public static void main(String[])メソッドでreturn文を実行した。 |
||
public static int main(String[])メソッドでreturn <終了コード>を実行した。 |
正常終了する。 戻り値:returnに指定した終了コード |
|
mainメソッドの外に,java.lang.Throwableまたはjava.lang.Throwableを継承したクラスがスローされた。 |
KDJE55009-Eを出力する。例外のスタックトレースを例外ログに出力する。バッチアプリケーションの実行を終了する。 |
例外のスタックトレースを標準エラー出力に出力する。バッチアプリケーションの実行を異常終了する。 戻り値:1 |
バッチサーバが終了した(バッチサーバの強制終了または予期しないJavaVMのダウン)。 |
なし。 |
KDJE55021-Eを出力して,バッチアプリケーションの実行を異常終了する。 戻り値:1 |
なお,バッチアプリケーション実行中に[Ctrl]+[C]やシグナルなどによってcjexecjobコマンドを終了しても,バッチアプリケーションの実行は終了しません。バッチアプリケーションの実行を強制停止したい場合は,cjkilljobコマンドを実行してください。ただし,cjkilljobコマンドで強制終了した場合,cjexecjobコマンドの終了コードは不定となります。バッチ強制停止コマンドについては,「2.3.3 バッチアプリケーションの強制停止」を参照してください。
(4) バッチアプリケーション実行時の注意事項
バッチアプリケーションからEJBまたはDB Connectorを呼び出して使用する場合,バッチアプリケーションの開始時には,使用するEJBおよびDB Connectorがあるかどうかの確認は実施しません。バッチアプリケーションから参照しているEJBまたはDB Connectorがない場合は,バッチアプリケーション実行中に実行時エラーになります。バッチアプリケーションを開始する前に,参照先のEJBがあるかどうかを確認してください。また,DB Connectorを使用してバッチアプリケーションからデータベースに接続する場合は,バッチサーバでDB Connectorを開始しておいてください。