このドキュメントでは、Natural をバッチモードで実行する場合の全般的な考慮事項について説明します。
以下のトピックについて説明します。
Adabas データセットは、シングルユーザーモードでのみ指定する必要があります。 これらのデータセットは、Adabas を使用する通常のアプリケーションプログラムの実行に必要なものと同じです。 Adabas データセットの詳細については、関連する Adabas ドキュメントを参照してください。
SORT
ステートメントを含む Natural プログラムが Natural セッション中に実行される場合は、ソートデータセットを指定する必要があります。
要件は、オペレーティングシステムのソートプログラムを呼び出す通常の COBOL または PL/1 アプリケーションプログラムの実行要件と同じで、使用中のソートプログラムによって異なります。
Natural は、中間データセットの SORTIN
および SORTOUT
を必要としませんが、ユーザー出口ルーチンインターフェイスの E15
および E35
を経由してソートプログラムと通信します。
注意:
CMS 対応 Natural では、サブタスクはサポートされていません。
サブタスクサポートにより、1 つのアドレススペース内で複数の Natural バッチモードセッションを実行できます。 後続のジョブステップを実行するのではなく、1 つのアドレススペース内で並行処理できるので、スループットが飛躍的に向上します。
通常、クライアント/サーバーアプリケーションおよび製品でこの機能(Natural リモートプロシージャコールなど)を活用します。 複数のサーバーサブタスクを開始して、リモートクライアントと通信することができます。
Natural ニュークリアスを再起動する場合は、Natural ニュークリアスがリエントラントモジュールとしてリンクされている(リンケージエディタオプション RENT
)必要があります。
Adabas リンクルーチン(ADALNK
)がリエントランシーサポートによって生成される必要があります。
サブタスクを開始するには、Natural プログラムから CALL
ステートメントを発行します。 拡張フロントエンドパラメータリストによって、新しい Natural セッション("サブタスク")が開始されます。 このリストには、以下に示す最大 3 つのパラメータセットが含まれます。
ダイナミック Natural プロファイルパラメータ
起動パラメータ
ユーザーパラメータ
標準 I/O データセットの変数名(CMPRINT
など)とバッチモードインターフェイス起動用の他のパラメータを、起動パラメータエリアの起動プログラムから渡すことができます。 標準 I/O データセットは、未定義またはダミーのデータセットにすることができます。また、1 つのセッションで所有することも、複数のセッションで共有することもできます。
さらに、Natural プログラムでユーザーパラメータエリアを読み取るために、CALL
インターフェイスが用意されています。
拡張パラメータリストがない Natural バッチモードインターフェイスでは、標準のリンケージコールを使用して、最初の制御をオペレーティングシステムから取得します。 レジスタ 1 は、最後のアドレスインジケータとして、高位ビットでアドレスをポイントします。 このアドレスは、以下のパラメータエリアの長さを含むハーフワードフィールドをポイントします。
拡張パラメータリストには、最大 3 つのパラメータアドレスが含まれます。 これは、最後のアドレス(最初、2 番目、または 3 番目のアドレス)の高位ビットで示されます。 すべてのパラメータアドレスは、以下のパラメータエリアのパラメータ長を含むハーフワードフィールドをポイントします。 長さ 0 は、パラメータエリアが存在しないことを示します。
最初のパラメータエリアは、Natural セッションのダイナミックプロファイルパラメータを含みます。
2 番目のパラメータエリアは、バッチモードインターフェイスを初期化するための特殊な起動パラメータを含みます。
3 番目のパラメータエリアは、Natural セッション中にアクセスできるユーザーパラメータエリアを含みます。
同じリージョン内で複数のバッチモード Natural(サブ)タスクが実行されている場合は、デフォルトではこれらのセッションはまったく同じ Natural 標準 I/O データセット(CMPRINT
や CMSYNIN
など)にアクセスします。これは、これらのファイル名の設定に使用できる Natural プロファイルパラメータがないためです。 また、デフォルトでは Natural システム変数の *INIT-ID
と *INIT-USER
は、バッチモード用の定義なので同じです。
Natural サブタスクセッション用に一意の標準 I/O データセット名と一意の ID を指定するために、拡張パラメータリスト内の起動パラメータを使用して Natural システムのデフォルトを上書きできます。 起動パラメータエリアは、ペアの 8 文字フィールドから成るテーブルです。
最初のエントリは、置換対象の 8 バイトのキーワードを含みます。
2 番目のエントリは、8 バイトの置換値を含みます。
キーワードと置換値は、必要に応じて末尾を空白で埋める必要があります。
有効なキーワードは以下のとおりです。
CMHCOPY |
恒久的なハードコピーの出力先 |
CMSYNIN |
コマンド入力データセット名 |
CMOBJIN |
オブジェクト入力データセット名 |
CMPRINT |
標準出力データセット名 |
CMPRMIN |
ダイナミックパラメータ入力データセット名 |
CMPLOG |
ダイナミックパラメータ出力データセット名 |
CMTRACE |
トレース出力データセット名 |
INITID |
ジョブステップ名(システム変数 *INIT-ID )
|
MSGCLASS |
CMPRINT および CMTRACE のダイナミックアロケーションのスプールクラス(z/OS のみ)
|
NATRJE |
ジョブサブミットデータセット名(z/OS のみ) |
STEPLIB |
プログラムロードライブラリ名(プロファイルパラメータ LIBNAM (ロードライブラリの名前)も参照。z/OS のみ)
|
SUBPOOL |
z/OS ストレージサブプール(0~127、右詰め) |
USERID |
最初のユーザー ID(システム変数 *INIT-USER )
|
これらのエントリの使用は任意で、特定の指定順序はありません。 データセットの空白値は、このデータセットが使用できないか空であることを表します。
デフォルトでは、すべての出力(CMPRINT
、CMHCOPY
、CMTRACE
、および CMPLOG
の結果)は SYSLST
に送信されます。 SYS
で始まるこれらのファイルの上書き指定は、z/VSE システム番号の上書きと見なされます。 可能なフォーマットは SYSnnn
です。nnn は 000
~099
の範囲の 3 桁の番号で、無効な番号 nnn
を指定すると無視されます。
ユーザーパラメータエリアのフォーマットはフリーです。 ユーザーパラメータエリアは、特殊な CALL
インターフェイスによって任意の Natural プログラムからアクセスできます(「ユーザーパラメータエリアへのアクセス」を参照)。
Natural プログラムで以下のコールインターフェイス使用して、同じアドレススペースでサブタスクを開始できます。
PGMNAME |
制御を取得する Natural ニュークリアス名(必須)。 同じニュークリアスで再起動するには、先頭の文字にアスタリスクを指定します。 実際のニュークリアス名がこのフィールドに返されます。 |
NATPARML |
Natural ダイナミックパラメータエリア |
STRPARML |
起動パラメータエリア |
USRPARML |
ユーザーパラメータエリア |
すべてのパラメータエリアは、以下のパラメータの長さで開始する必要があります。 以下に、CMTASK
の使用例を示します。
例:
DEFINE DATA LOCAL 01 PGMNAME (A8) INIT <'*'> 01 PARM1 02 NATPARML (I2) INIT <30> 02 NATPARMS (A30) INIT <'INTENS=1,IM=D,STACK=MYPROG'> 01 PARM2 02 STRPARML (I2) INIT <32> 02 STRPARM1 (A16) INIT <'CMPRINT SYSPRINT'> 02 STRPARM2 (A16) INIT <'CMPRMIN MYPARMS'> 01 PARM3 02 USRPARML (I2) INIT <80> 02 USRPARMS (A80) INIT <'special user parameters'> END-DEFINE CALL 'CMTASK' PGMNAME NATPARML STRPARML USRPARML END
サンプルプログラム ASYNBAT
は SYSEXTP
ライブラリ内にあります。
起動時に渡されたユーザーパラメータエリアは、以下の CALL
ステートメントを使用して、任意の Natural プログラムから読み取ることができます。
CALL 'CMUPARM' USRPARML USRPARMS
USRPARML
は、USRPARMS
エリアの長さ(I2
)(呼び出し前)と、返されたデータの長さ(呼び出し後)です。 USRPARMS
はパラメータデータエリアです。
返されるデータの長さがエリアの長さを超える場合は、データはエリアの長さに合わせて切り捨てられます。 以下のリターンコードが返されます。
0 |
データは正常に移動されました。 |
4 |
データは移動されましたが切り捨てられました。 |
8 |
データを使用できません。 |
12 |
長さの値が正の値ではありません。 |
16 |
パラメータ数が不足しています。 |
サンプルプログラム GETUPARM
は SYSEXTP
ライブラリ内にあります。