2.5 バッチアプリケーション
2.5.3 C言語アプリケーション
2.5.3.2 C 言語アプリケーションのインタフェース
バッチジョブ定義で設定した入力パラメタを、バッチアプリケーション(C言語アプリケーション)に渡すことができます。また、バッチアプ リケーションからの復帰コードは、ジョブステップの終了コードになります。これにより、バッチアプリケーションからの復帰コードで、後続 ジョブステップを実行するかを制御できます。
バッチジョブ定義とバッチアプリケーションの入力パラメタ、および復帰コードの関係を以下に示します。
バッチアプリケーションには、以下のインタフェースがあります。
・ 入力パラメタ
- 入力パラメタの構成
- IDLファイルの設定項目
・ 復帰コード
・ 環境変数
・ ファイル資源の割当て 詳細を以下で説明します。
■入力パラメタ
入力パラメタについて説明します。
入力パラメタの構成
バッチジョブ定義のジョブステップ定義のバッチアプリケーション定義にあるパラメタに設定した値が、バッチアプリケーションの入力パ ラメタとして渡されます。入力パラメタのデータ型は、IDLファイルに設定します。
IDLファイルは、1バッチアプリケーションにつき、1つ作成します。
バッチジョブ定義に設定したパラメタの値が、バッチアプリケーションのパラメタに渡されるイメージは以下のとおりです。
・ バッチアプリケーションのパラメタが存在する場合
バッチアプリケーションのパラメタが存在する場合、バッチアプリケーションのすべてのパラメタを1つのIDLファイルに記述します。
バッチアプリケーション
IDLファイル
・ バッチアプリケーションのパラメタが存在しない場合
バッチアプリケーションのパラメタが存在しない場合は、パラメタのないIDLファイルを作成します。
バッチアプリケーション
IDLファイル
IDLファイルの設定項目
C言語アプリケーションに入力パラメタを渡す場合は、IDLファイルが必要になります。入力パラメタが必要ない場合でも、IDLファイル は必要です。入力パラメタが複数個ある場合は、1つのIDLファイルにまとめます。
IDLファイルの設定例を以下に示します。
module module1{
interface func1{
long pgm1(
in short parm1, /* INパラメタ(数値型2バイト) */
in long parm2, /* INパラメタ(数値型4バイト) */
in long long parm3, /* INパラメタ(数値型8バイト) */
in string parm4 /* INパラメタ(英数字項目) */
);
};
};
C言語アプリケーションのデータ型、バッチアプリケーション定義のパラメタのデータ型およびIDLファイルのデータ型の対応関係は以 下のとおりです。
C言語のデータ型 パラメタのデータ型 IDLファイルのデータ型
short short : 数値型(2バイト)項目 short
int int : 数値型(4バイト)項目 long
long long long long : 数値型(8バイト)項目 long long
char* char : 英数字項目 string
・ バッチアプリケーションのパラメタは最大32個です。
・ 使用できるパラメタはINパラメタのみです。
■復帰コード
バッチアプリケーションの復帰コードを決定します。
また、バッチ実行基盤で使用できるユーザアプリケーションの復帰コードは、ジョブのジョブステップ終了コードとジョブ終了コードにも なります。
復帰コードのデータ型
バッチ実行基盤で使用できるユーザアプリケーションの復帰コードのデータ型は、以下のとおりです。
C言語データ型 int
復帰コードの範囲と値
バッチ実行基盤で実行するユーザアプリケーションの復帰コードの範囲は、以下のとおりです。
復帰コードの範囲 -999999999~999999999
・ バッチ実行基盤とSystemwalker Operation Managerを連携する場合、バッチアプリケーションの復帰コードを0~200の範囲にして ください。バッチアプリケーションの復帰コードがこの範囲以外の場合には、Systemwalker Operation Managerの仕様にしたがいま す。
・ 復帰コードを設定せずに終了した場合、バッチアプリケーションの復帰コードは、0になります。
■環境変数
バッチアプリケーションで使用する環境変数です。
バッチアプリケーションが使用できる環境変数には以下があります。
・ バッチアプリケーション定義の環境変数
・ 2.2.1.2 ジョブ定義の環境変数定義
・ バッチワークユニットの環境変数
・ バッチアプリケーション定義の環境変数については、“バッチアプリケーションに渡す環境変数”を参照してください。
・ バッチアプリケーション実行時に使用できる環境変数の詳細、およびバッチワークユニットの環境変数については、“Interstage Job Workload Server セットアップガイド”の“環境変数の設定指針”を参照してください。
バッチアプリケーション定義の環境変数、およびジョブ定義の環境変数を使用したバッチアプリケーション間の、環境変数によるデー タの引継ぎはできません。
■ファイル資源の割当て
ファイル管理機能が、バッチジョブ定義に設定した資源名とファイルの物理的なパスの対応関係を環境変数に設定しバッチアプリケー ションに通知します。これにより、バッチアプリケーションに直接、物理的なパスを記述しないでファイルをアクセスできます。
以下にファイルのアクセス方法について示します。(例でのパス名などは、SolarisおよびLinuxの形式で記載しています。)
バッチジョブ定義で資源名“DAT1”を設定します。資源名“DAT1”は“/data/2006/”に割り当てられているファイル“file1”です。バッチ アプリケーションでは、環境変数名“DAT1”に対してgetenvを実行して、取り出した文字列を指定してファイルをアクセスします。取り出 した文字列に、該当する物理ファイル名とファイルの割当て場所が取り込まれているため、“/data/2006/”に割り当てられているファイ ル“file1”をアクセスできます。
ファイルの物理的なパスを変更する場合は、“2.4.3 ファイルパスの論理化機能”を利用することでバッチジョブ定義およびバッチアプリ ケーションの汎用性が高くなります。
2.5.3.3 C 言語アプリケーションの注意事項
プロセスの操作について
バッチアプリケーション内で、子プロセスの生成、監視などのプロセスに関する操作を行わないでください。
プロセスの操作を行った場合、ジョブの動作は保証しません。
スレッドの操作について
バッチアプリケーション内で、スレッドの生成、監視などのスレッドに関する操作を行わないでください。
スレッドに関する操作を行った場合、ジョブの動作は保証しません。
atexit
関数の使用について
バッチアプリケーションで、atexit関数を使用しないでください。使用方法を誤るとワークユニットの停止処理がハングアップする可能性 があります。
iconv関数の使用について
バッチアプリケーションで、iconv関数を使用して独自に文字コード変換を行うことはできません。
SIGTERMなどのシグナルハンドラについて
バッチアプリケーションからシグナルに関する処理を行わないでください。
シグナルに関する操作を行った場合、ジョブの動作は保証しません。
標準出力/標準エラー出力への出力について
バッチアプリケーションからprintf関数などを使用して標準出力(stdout)/標準エラー出力(stderr)に大量データを出力しないでくださ い。標準出力/標準エラー出力へ出力できるデータの量は、以下に示す上限があるため、上限を超えて出力した分のデータは、切り 捨てられます。
標準出力/標準エラー出力に出力できるデータ量の上限
標準出力/標準エラー出力あわせて1ジョブあたり2メガバイト
ただし、標準出力/標準エラー出力には、バッチ実行基盤からジョブの実行に関するデータを出力するため、実際にバッチアプリケー ションから標準出力/標準エラー出力に出力できるデータ量は、上記の上限以下となります。
また、バッチアプリケーション間で、標準出力/標準エラー出力を利用したデータの引継ぎはできません。
・ 上限を超えて出力した分のデータは切り捨てられます。すべてのデータ出力は保障されないため、バッチアプリケーションから、標 準出力/標準エラー出力に業務データ等の重要なデータを出力しないでください。
・ バッチアプリケーションからメッセージなどを標準出力/標準エラー出力に出力する場合、データがバッファリングされるため、処 理と同時に出力されません。処理と同時に出力したい場合は、バッチアプリケーション内でfflush関数を使用して処理と同期をとっ てください。
業務用データベースのトランザクション制御について
バッチ実行基盤では、バッチアプリケーションが使用する業務用データベースのトランザクション制御を行いません。バッチアプリケー ション内でトランザクション制御を行ってください。
IPC資源について
バッチ実行基盤では、バッチアプリケーションでのIPC資源の利用を管理しないため、プロセスダウン等が発生した場合、IPC資源が回 収されません。
入力要求を求めるアプリケーションの実行
バッチアプリケーション内で、標準出力/標準エラー出力にプロンプトを出力して入力要求を求めるような処理はできません。
コード体系について
バッチ受付サービス、バッチ実行サービス、バッチワークユニット、バッチアプリケーション、引継ぎファイルなどで扱うデータのコード体 系は、すべて同じコード体系に統一してください。
文字コードの設計については、“Interstage Job Workload Server セットアップガイド”の“文字コードの設計”を参照してください。
英数字項目の入力パラメタについて
C言語アプリケーションの英数字項目の入力パラメタの扱いは以下のとおりです。
・ 使用しないパラメタの場合
NULLポインタを値として持つ変数のアドレスが渡されます。
・ 使用するパラメタの場合
文字列領域のアドレスを値として持つ変数のアドレスが渡されます。文字列領域はC言語実行基盤インタフェースで自動的に獲 得、および解放されますが、必要に応じてアプリケーションで解放することもできます。
コンパイル・リンクについて
オペレーティングテステムがRHEL5(Intel64)の場合、バッチアプリケーションは、64ビットアプリケーションとしてコンパイルしてください。
また、バッチアプリケーションでライブラリを使用する場合は、64ビットアプリケーションとしてコンパイルしたライブラリを使用してくださ い。