Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 拡張編


2.3.2 バッチアプリケーションの実行

バッチアプリケーションは,cjexecjobコマンドで開始します。バッチアプリケーションのmainメソッドの実行が終わると,バッチサーバはFullGCを実行します。ここでは,バッチアプリケーションの開始方法と,バッチアプリケーションの開始および終了時の処理について説明します。

なお,実行中のバッチアプリケーションを停止する場合には,強制停止をします。バッチアプリケーションの強制停止の方法については,「2.3.3 バッチアプリケーションの強制停止」を参照してください。

〈この項の構成〉

(1) バッチアプリケーションの開始方法

ここでは,バッチアプリケーションの開始方法について説明します。

バッチアプリケーションを開始するにはcjexecjobコマンドを使用します。cjexecjobコマンドを実行するには,次の四つの方法があります。

  1. cjexecjobコマンドを直接実行する方法

    JP1/AJS,BJEX,およびJP1/Advanced Shellを使用しない場合はこの方法で開始します。

  2. cjexecjobコマンドをJP1/AJSのジョブとして定義しておき,JP1/AJSから実行する方法

    JP1/AJSだけを使用する場合はこの方法で開始します。

  3. cjexecjobコマンドをBJEXのジョブステップとして定義しておき,JP1/AJSからBJEXのジョブを実行する方法

    JP1/AJSおよびBJEXを使用する場合はこの方法で開始します。

  4. 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コマンドに指定したバッチアプリケーションが開始します。バッチアプリケーション開始時の処理を次に示します。

  1. バッチアプリケーションの開始処理を開始することを示すメッセージ(KDJE55000-I)を出力します。

  2. バッチアプリケーションのmainメソッドを開始することを示すメッセージ(KDJE55001-I)を出力します。

  3. 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メソッドの実行が終わると処理が終了します。バッチアプリケーション終了時に実行される処理を次に示します。

  1. バッチアプリケーション終了処理を開始することを示すメッセージ(KDJE55002-I)を出力します。

  2. バッチアプリケーションの終了処理が完了したことを示すメッセージ(KDJE55003-I)を出力します。

  3. FullGCを実行します。

  4. cjexecjobコマンドにバッチアプリケーションの終了コードを送信します。

次の表に,バッチアプリケーションの終了条件と,そのときのバッチサーバやcjexecjobコマンドの動作を示します。

表2‒4 バッチアプリケーションの終了条件

バッチアプリケーションの終了条件

バッチサーバの動作

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を開始しておいてください。