C言語アプリケーションについて説明します。
C言語アプリケーションの形態について説明します。
アプリケーションの形態
バッチアプリケーションの形態は、C言語アプリケーションの副プログラムです。バッチアプリケーションは、C言語アプリケーションの副プログラムとして設計します。
パラメタは、すべて入力パラメタであり、かつデータ型を限定しています。
アプリケーションからのライブラリ呼出し
バッチアプリケーションからC言語や他言語で作成したライブラリを呼び出すことができます。バッチアプリケーションから呼び出すライブラリの設計は、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になります。
■環境変数
バッチアプリケーションで使用する環境変数です。
バッチアプリケーションが使用できる環境変数には以下があります。
バッチアプリケーション定義の環境変数
バッチワークユニットの環境変数
バッチアプリケーション定義の環境変数については、“バッチアプリケーションに渡す環境変数”を参照してください。
バッチアプリケーション実行時に使用できる環境変数の詳細、およびバッチワークユニットの環境変数については、“Interstage Job Workload Server セットアップガイド”の“環境変数の設定指針”を参照してください。
バッチアプリケーション定義の環境変数、およびジョブ定義の環境変数を使用したバッチアプリケーション間の、環境変数によるデータの引継ぎはできません。
■ファイル資源の割当て
ファイル管理機能が、バッチジョブ定義に設定した資源名とファイルの物理的なパスの対応関係を環境変数に設定しバッチアプリケーションに通知します。これにより、バッチアプリケーションに直接、物理的なパスを記述しないでファイルをアクセスできます。
以下にファイルのアクセス方法について示します。(例でのパス名などは、SolarisおよびLinuxの形式で記載しています。)
バッチジョブ定義で資源名“DAT1”を設定します。資源名“DAT1”は“/data/2006/”に割り当てられているファイル“file1”です。バッチアプリケーションでは、環境変数名“DAT1”に対してgetenvを実行して、取り出した文字列を指定してファイルをアクセスします。取り出した文字列に、該当する物理ファイル名とファイルの割当て場所が取り込まれているため、“/data/2006/”に割り当てられているファイル“file1”をアクセスできます。
ファイルの物理的なパスを変更する場合は、“2.4.3 ファイルパスの論理化機能”を利用することでバッチジョブ定義およびバッチアプリケーションの汎用性が高くなります。
プロセスの操作について
バッチアプリケーション内で、子プロセスの生成、監視などのプロセスに関する操作を行わないでください。
プロセスの操作を行った場合、ジョブの動作は保証しません。
スレッドの操作について
バッチアプリケーション内で、スレッドの生成、監視などのスレッドに関する操作を行わないでください。
スレッドに関する操作を行った場合、ジョブの動作は保証しません。
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ビットアプリケーションとしてコンパイルしたライブラリを使用してください。