Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

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

バッチアプリケーションは,cjexecjobコマンドで開始します。バッチアプリケーションのmainメソッドの実行が終わると,バッチサーバはフルガーベージコレクションを実行します。ここでは,バッチアプリケーションの開始と終了について説明します。

<この項の構成>
(1) バッチアプリケーションの開始
(2) バッチアプリケーションの終了

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

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です。
次の表に,バッチアプリケーションの開始に失敗する条件,およびバッチサーバが出力するメッセージを示します。

表14-1 バッチアプリケーションの開始に失敗する条件

バッチアプリケーションの開始に失敗する条件 バッチサーバが出力するメッセージ
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

なお,バッチアプリケーションの作成については,「15.2 バッチアプリケーションの作成」を参照してください。

バッチアプリケーション実行時の注意
バッチアプリケーションの開始時には,使用するEJBおよびDB Connectorが存在するかどうかの確認は実施しません。バッチアプリケーションから参照しているEJBまたはDB Connectorがない場合は,バッチアプリケーション実行中に実行時エラーになります。バッチアプリケーションを開始する前に,参照先のEJBがあるかどうかを確認してください。また,DB Connectorを使用してバッチアプリケーションからデータベースに接続する場合は,バッチサーバでDB Connectorを開始しておいてください。

(2) バッチアプリケーションの終了

バッチアプリケーションのmainメソッドの実行が終わると処理が終了します。バッチアプリケーション終了時の処理を次に示します。

  1. バッチアプリケーション終了処理を開始することを示すメッセージ(KDJE55002-I)を出力します。
  2. バッチアプリケーションの終了処理が完了したことを示すメッセージ(KDJE55003-I)を出力します。
  3. フルガーベージコレクションを実行します。
  4. cjexecjobコマンドにバッチアプリケーションの終了コードを送信します。

なお,バッチアプリケーション実行中に[Ctrl]+[C]やシグナルなどによってcjexecjobコマンドを終了しても,バッチアプリケーションの実行は終了しません。バッチアプリケーションの実行を強制停止したい場合,cjkilljobコマンドを実行してください。ただし,cjkilljobコマンドで強制終了した場合,cjexecjobコマンドの終了コードは不定となります。

バッチ強制停止コマンドについては,「14.2.3 バッチアプリケーションの強制停止」を参照してください。

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

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

バッチアプリケーションの終了条件 バッチサーバの動作 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