3.19.1 LANG="Java"を指定した場合のJavaバッチアプリケーションを実行する方法
EXEC要素にLANG="Java"を指定した場合のJavaバッチアプリケーションの実行に必要な情報の定義方法について示す。
- 〈この項の構成〉
(1) EXEC要素
バッチジョブ実行システムからJavaバッチアプリケーションを実行する場合には,次に示す情報をジョブ定義XMLファイルに指定する。バッチジョブ実行システムは,これらの情報を指定してcjexecjobコマンドを呼び出し,Javaバッチアプリケーションを実行する。
要素 |
属性 |
指定する値 |
最大長 |
説明 |
---|---|---|---|---|
EXEC |
PGM |
Javaアプリケーションクラス名(必須) |
1,023文字 |
パッケージ名を含む,Javaアプリケーションのクラス名を指定する。 例: PGM="jp.co.Hitachi.MyBank.MyBatchJob" |
LANG |
"Java"(必須) |
4文字 |
ジョブステップで実行するプログラムがJavaアプリケーションであることを示す。常に"Java"を指定する。 例: LANG="Java" |
|
Group |
スケジュールグループ名 |
63文字 |
ジョブスケジューリング機能で,CTMがバッチアプリケーションの実行をスケジューリングするときに割り当てるバッチサーバのグループを指定する。 例: Group="MyScheduleGroup" |
|
Option |
Javaオプション |
1,022文字 |
Java VMに渡すオプションを指定する。次のオプションが指定できる。 -cp, -classpath:Javaアプリケーション実行時のクラスパスを指定する。-D<name>=<value>:システムプロパティを指定する。 例: Option="-cp /mydir/hello.jar -DHELLO=WORLD" |
|
PARM |
mainメソッドに渡す引数 |
958文字 |
Javaアプリケーションのmainメソッドに渡す引数を指定する。 |
指定例を次に示す。
<EXEC PGM="jp.co.Hitachi.MyBank.MyJob" LANG="Java" Group="MyGroup" Option="-cp /mydir/hello.jar -DHello=World" PARM="myjob check_transaction" />
(2) DD要素
DD要素で指定した内容は,バッチジョブ実行システムによって-DオプションとしてJavaオプションに指定される。指定例を次に示す。
<DD NAME="WRITEDATA" TYPE="FILE" DSN="/myinfo/mydata.txt" DISP="OLD" />
ジョブ定義XMLファイル中のLANG="Java"のジョブステップで上記DD要素が定義された場合,バッチジョブ実行システムはNAME属性の指定値に"DDN_"を付与した文字列とDSN属性の指定値を,それぞれ次に示すように-Dオプションの<name>および<value>としてJavaオプションに設定する。指定例を次に示す。
-DDDN_WRITEDATA=/myinfo/mydata.txt
これによって,Javaアプリケーション内で<name>の値をキーとして,DD要素に指定されたファイルのパス名を取得できる。指定例を次に示す。
: java.lang.String mystr; mystr = System.getProperty("DDN_WRITEDATA"); // これによってmystrに/myinfo/mydata.txtが格納される。 :
(3) バッチジョブ実行システムによるcjexecjobコマンドラインの構築内容
バッチジョブ実行システムは,ジョブ定義XMLファイルに指定されたJavaバッチアプリケーション用の属性値に基づいてcjexecjobコマンド用の引数を作成し,cjexecjobコマンドを呼び出す。
ジョブ定義XMLファイルでのJavaバッチアプリケーション用のXML属性の指定方法を次に示す。
<EXEC PGM="<Javaアプリケーションクラス名>" LANG="Java" Group="<スケジュールグループ名>" Option="<Javaオプション>" PARM="<mainメソッドに渡す引数>"/> <DD NAME="<NAME属性値>" DSN="<DSN属性値>"/>
上記のXML定義ファイルを指定した場合,バッチジョブ実行システムは次のようにcjexecjobコマンドを呼び出す。
/opt/Cosminexus/CC/batch/bin/cjexecjob <スケジュールグループ名> -jobID <ジョブID> <Javaオプション> -DDDN_<NAME属性値>=<ファイルパス> "< Javaアプリケーションクラス名> <mainメソッドに渡す引数>"
DD要素にRENAME属性を指定した場合は,-Dオプションは次の形式になる。
-D<RENAME属性値>=<ファイルパス>
構築例を次に示す。
<EXEC PGM="MyJob" LANG="Java" Group="MyGroup" Option="-cp /home/user/Java -DHello=World" PARM="arg1 arg2"/> <DD NAME="WRITEDATA" TYPE="FILE" DSN="/tmp/mydata.txt" DISP="OLD"/>
上記のジョブ定義XMLを指定した場合,次のようなcjexecjobコマンドラインが構築される。
/opt/Cosminexus/CC/batch/bin/cjexecjob MyGroup -jobID <BJEXが自動割り当てした29けたの英数字> -cp /home/user/Java -DHello=World -DDDN_WRITEDATA=/tmp/mydata.txt MyJob arg1 arg2
(4) Javaバッチアプリケーションに対するジョブIDの自動割り当て
ジョブスケジューリング機能を利用したJavaアプリケーションの実行には,ジョブIDの情報が必要となる。LANG="Java"指定のJavaバッチアプリケーションの実行ではバッチジョブ実行システムが,実行したJavaバッチアプリケーションを識別するために独自にジョブIDを割り当てる。その機能によって,ジョブステップごとにユニークなジョブIDを保証するため,Option属性にcjexecjobコマンドの"-jobID"オプションを指定しないこと。指定した場合,バッチジョブ実行システムからJavaバッチアプリケーションの強制停止はできない。バッチジョブ実行システムは,次の形式でジョブIDを作成してJavaアプリケーションに割り当てるため,運用でほかのJavaバッチアプリケーションと重複しないようにすること。Javaアプリケーションに対するジョブIDの割り当て形式を次の図に示す。
Javaアプリケーションに対するジョブIDの割り当て形式の項目と内容を次の表に示す。
項目 |
長さ |
内容 |
---|---|---|
BJEX |
4けた |
バッチジョブ実行システムが割り当てるジョブIDに自動的に付与される。"BJEX"固定である。 |
ジョブ識別子 |
6けた |
バッチジョブ実行システムがジョブごとに割り当てるジョブ識別子である。 |
ステップ番号 |
3けた |
バッチジョブ実行システムが割り当てるジョブステップの通し番号である。 |
時刻情報 |
8けた |
内部的な時刻識別用情報である。 |
ID |
8けた |
内部的な識別用IDである。 |
(5) 注意事項
-
cjexecjob,cjkilljobの権限は550であるため,rootか同じグループのユーザアカウントで実行すること。
-
Javaオプションとして,-cp,-classpath,-D以外はサポートしないため指定しないこと。詳細については,マニュアル「Cosminexus アプリケーションサーバ V8 リファレンス コマンド編」のcjexecjobコマンドを参照のこと。
-
LANG="Java"を指定しないでGroupやOptionを指定した場合は,エラーとなる。
-
DD要素に指定できる属性に制限はないが,ISAMファイルなどはJavaから利用することは困難なため,指定するファイルについて考慮すること。
-
LANG="Java"を指定する場合,従来のバッチサーバ名称指定によるJavaバッチアプリケーションの実行はできない。スケジュールグループを指定すること。
-
cjexecjobコマンドの引数は「Javaオプション」,「Javaアプリケーションクラス名」,および「mainメソッドに渡す引数」の文字数の合計が1,024バイト以下であること。そのため,ジョブ定義XMLファイルに指定する値の文字数には注意すること(特に世代ファイルの作成数には注意すること)。cjexecjobコマンドの引数の詳細については,マニュアル「Cosminexus アプリケーションサーバ V8 リファレンス コマンド編」を参照のこと。
-
cjexecjobコマンドが異常終了した場合,cjexecjobが出力するエラーメッセージが,ジョブステップの標準エラー出力としてジョブログに出力される。
-
使用するOSごとに,コマンドラインに入力できる文字数に上限がある。そのため,各属性に指定した値の長さが上限値以内であっても,各属性の長さの合計がOSごとの上限を超えないように注意すること。