BatchServer 実行&デバッグ

1. バッチプログラムの実行

1-1. JCLの作成方法

Sequence Management Consoleで定義したバッチプログラムを実行するには、テキストエディターでJCL(ジョブコントロール言語)を作成します。一つのJCL中に複数本のプログラムを記述する事で、それらを連続して実行する事が出来ます。

以下にJCLの記述方法を説明します。

  1. コメント
    バッチ実行エンジンにコメント行である事を指示します。実行時にコメント行を無視します。コメント行は、"/,コメント文"を記述します。

  2. プログラムの開始と終了
    バッチ実行エンジンにプログラムの開始と終了である事を指示します。プログラムの開始行は"BEGIN"、終了行は"END"を記述します。実行エンジンはBEGIN行からEND行までをプログラム単位として随時読み込み実行します。

  3. プログラム名
    バッチ実行エンジンに実行するプログラムを指示します。プログラム名は"STEP,プログラム物理名,ラベル名称(任意)"を記述します。バッチ実行エンジンは指示されたプログラムをリポジトリから読み込み、実行します。
    ラベルを設定することにより、STEPをジャンプする際の識別(位置)として認識されます。
    詳細については、次節の「JCLの具体例」を参照ください。

  4. 入力ファイル
    バッチ実行エンジンに入力ファイルを指示します。入力ファイルは"INPUTFILE,ディレクトリ名/ファイル名,TEMP(任意)"を記述します。
    ディレクトリ名/ファイル名の後に”TEMP”の文字を指定することにより、一時ファイル名としてディレクトリ名/一意な識別名.ファイル名”が割り当てられます。

  5. 出力ファイル
    バッチ実行エンジンに出力ファイルを指示します。ファイルは"OUTPUTFILE,ディレクトリ名/ファイル名,TEMP(任意)"を記述します。
    ディレクトリ名/ファイル名の後に”TEMP”の文字を指定することにより、一時ファイル名としてディレクトリ名/一意な識別文字.ファイル名”が割り当てられます。

  6. STEPステータス判定
    "BEGIN"と"END"に囲まれた中に"IF,STATUS,演算子,判定値,GOTO,ラベル"の記述を行うことにより、JCL内の任意のSTEPにJUMPします。
    ・IF … 固定値です。
    ・STATUS … 固定値です。
          (この値はSQLマッパーのpublic void setBatchStatus(String status)メソッドを使用し、設定される値です。
           又、この値の有効範囲は直前のSTEPに設定された値のみ判定可能です。)
    ・演算子… =, >=, <=, >, <,>< が指定することが可能です。
    ・判定値 … 任意な値を指定します。(""にて囲まれた値は文字列として、囲まれない場合は数値として判定されます。)
    ・GOTO …固定値です。
    ・ラベル…条件がtrue(真)の場合JUMPする、ラベル名を指定します。
         指定されたラベル名は、後方に存在する場合に機能します。
         (よって判定以降、合致するラベル名が存在しない場合は、JCLは終了します。又、判定以前のSTEPに戻ることはできません。)

  7. STEPパラメータ
    STEP毎に指定されたパラメータ値をバッチから取得します。
    ・STEP,バッチ, 以降にkey=valueの形式でJCL上に指定します。
     (「,」で区切ることにより複数指定可能です。)
    ・指定されたパレメータの取得はロジッククラスの下記メソッドより取得します。
     (AbstractServerを継承し「public String getStepParameter(String key)」を使用します。

  8. JCLパラメータ
    JCL毎に指定されたパラメータ値をバッチから取得します。
    ・JCL起動時(バッチファイル若しくはシェル)のコマンドとして”-key=value”の形式で指定します。
     (「,」で区切ることにより複数指定可能です。)
    ・指定されたパレメータの取得はロジッククラスの下記メソッドより取得します。
     (AbstractServerを敬称し「public String getJobParameter(String key)」を使用します。

1-2. JCLの具体例

以下にJCLの具体例を記述します。

  1. データベース抽出プログラム例

    /,大分類マスタ抽出
    BEGIN
    STEP,LCLASS_SELECT_BAT
    OUTPUTFILE,work/lclass.txt
    END

  2. ファイル移動例

    /,MoveFile 実行
    BEGIN
    STEP,MoveFile
    INPUTFILE,lclass.*
    OUTPUTFILE,print
    END
    //,End Job

    MoveFileはWebtribeで用意されているファイル移動プログラムです。INPUTFILEには入力ファイルを指定します。マスク指定が可能です。OUTPUTFILEには出力先のディレクトリ名を指定します。実行終了後は、入力ファイルは削除されます。
  3. ファイル削除例

    /,DeleteFile 実行
    BEGIN
    STEP,DeleteFile
    DELETEFILE,lclass.txt
    DELETEFILE,Mclass.txt
    END
    //,End Job

    DeleteFileはWebtribeで用意されているファイル削除プログラムです。DELETEFILEには削除ファイルを指定します。削除対象ファイルが複数存在する場合は、”DELETEFILE”行を複数記述します。
  4. STEP制御例

    /,商品マスタ抽出初期
    BEGIN,STEP1
    STEP,SelectGoods
    OUTPUTFILE,work/STEP1.txt,TEMP
    END
    /,判定
    BEGIN
    IF,STATUS,=,2,GOTO,STEP3
    END
    /,商品マスタ抽出1
    BEGIN,STEP2
    STEP,SelectGoods2
    OUTPUTFILE,work/STEP2.txt,TEMP
    END
    /,商品マスタ抽出2
    BEGIN,STEP3
    STEP,SelectGoods3
    OUTPUTFILE,work/STEP3.txt,TEMP
    END
    /,商品マスタ抽出3
    BEGIN,STEP4
    STEP,SelectGoods4
    OUTPUTFILE,work/STEP4.txt,TEMP
    END
    //,End Job
    上記例は、第一STEPである「SelectGoods」終了後、ステータス判定を行い、2(数値)であればラベルの”SETP3”(商品マスタ抽出2である「SelectGoods3」)にJUMPし実行され、引き続き”SETP4”(商品マスタ抽出である「SelectGoods4」)が実行されます。
    又、各々のSTEPに「OUTFILE」指定にて”TEMP”が指定されている為、実際のファイル名に一意になる識別文字が付与されます。
    この識別文字は、JCL内において同一の識別文字が付与されます。

1-3. JCLの起動

作成したJCLを以下の手順で実行します。

  1. Webtribeが提供するバッチ実行エンジンを実行するバッチファイルを作成し、パラメータに作成したJCL名を指定します。
  2. コマンドプロンプトからバッチファイルを起動します。
    バッチ実行エンジンがパラメータに指定されたJCLファイルを読み込み、記述されているプログラムを順に実行して行きます。
  3. バッチファイルのサンプル

    ./image/jcl.jpg
 

2. バッチ実行エンジンログ

ジョブ実行時に異常が発生した場合は configファイル(RunBatchServer.wdg)にてログHandlerの設定に記述されたパスおよびファイルに情報が出力されます。

2-1. ログ情報

ログ情報の内容は、サーバ実行エンジンログと同じ情報が出力されますので、APServerの実行&デバッグを参照して下さい。

 

3. デバッグ方法

3-1. トレースモードの設定

ジョブ実行時に、バッチプログラムの詳細なトレース情報をログファイルに出力することが出来ます。

ジョブ起動時のバッチファイルのパラメータに"-TRACEMODE=ON"を指定する事により、デフォルトでは common.wdg の"LogPath"に記述されたパス直下の"trace"ディレクトリに"プログラム物理名.log"のファイル名でトレース情報が出力されます。

また、"-TRACEMODE=OFF"の場合はトレース情報は出力されません。したがって、実行速度がトレース出力される時に比較し格段に速くなりますので、本番運用時には"-TRACEMODE=OFF"で実行するようにして下さい。