エクスポートされた JCL シンボル

リリース 5.0 PU5 から、Enterprise Server でシンボルをエクスポートして、それをインストリーム データで使用できるようになりました。また、内部読み取りプログラムを使用すれば、サブミットされるジョブにシンボルを渡すこともできます。ここで挙げる例は、SYMBOLS をどのように使用できるかを示しています。

重要: リリース 5.0 PU5 では、JES エンジンによって作成されるジョブ解析ファイル MFELX* の形式が変更されています。この変更の結果、5.0 PU5 をインストールする前に実行されたジョブを再開することはできなくなっています。

ここで挙げる例は、本製品とともにインストールされる JCL - Symbols サンプルに基づいています。JCL - Symbols Mainframe Samples ブラウザーを参照してください。

ユーザー プログラムのコンパイル

このデモンストレーションには、2 つのユーザー プログラムが含まれています。
  • CALLMFJZ.cbl は、JCL シンボル サービス IEFSJSYM を呼び出す方法を示しています。
  • MFJUXIT.cbl は、現在のジョブ相関子 SYS_CORR_CURRJOB、および関連付けられたユーザー データ SYS_CORR_USRDATA の設定と読み取りを行うサンプル JCL ユーザー出口です。
これら 2 つのプログラムは、共有オブジェクトとしてコンパイルし、JES エンジンがロードできる場所 ($ CAS_BATCH_PATH 上) に配置する必要があります。Enterprise Server インスタンスには、次に示す MFJUXIT 環境変数を含める必要があります。
MFJUXIT=[full path and name of the MFJUXIT compiled module]

これらのプログラムをコンパイルするには、次のコマンドを使用します。

Windows の場合:

cbllink -d CALLMFJZ.cbl -oCALLMFJZ.dll
cbllink -d MFJUXIT.cbl -oLOADLIB\MFJUXIT.dll

UNIX の場合:

cob -v -zgU -a CALLMFJZ.cbl -C"dialect(MF)"
cob -v -zgU -a MFJUXIT.cbl -C"dialect(MF)"

システム シンボルの定義

データセット SYS1.PARMLIB(IEASYM00) でシステム全体のシンボルを定義できます。このデータセットはシステムの起動時に読み取られ、定義された値はその後 JCL ジョブで使用できます。

サンプル ジョブ INITSYS.JCL は、このデータセットを作成してシンボルと値を入力する方法を示しています。また、値を定義するサブストリングの使用方法も示します。

このデータセットはシステムの起動時に読み取られるため、後から追加した値は使用できません。環境変数 MFJ_RELOAD_IEASYM00=Y を設定することで、ジョブのサブミットごとにこのデータセットを強制的に再読み取りすることができます。

インストリーム データでのシンボルの使用

サンプル ジョブ SYMBOL6.JCL は、インストリーム データでシンボルを使用し、置換する方法を示しています。これは、静的システム シンボル SYSNAME (IEASYM00 で定義される) および動的シンボル SYSJOBNM、SYSJOBID、SYS_CORR_CURRJOB と、ジョブで定義およびエクスポートされるその他の JCL シンボルの使用方法を示します。

シンボルは、IEBGENER ステップ内の SYSUT1 のインストリーム データで使用され、そのステップの SYSUT2 データセットには置換された値が表示されます。

&SYS_JOB_NOTIFY には値が割り当てられていないため、出力ではそのまま表示されることに注意してください。SYSUT1 にはパラメーター SYMBOLS=(JCLONLY,MYLOG) があり、MYLOG データセットには、インストリーム データの各行の値の置換を示すメッセージが含まれます。

エクスポートされたシンボルの一覧表示 (IEFSJSYM)

SYMBOL6 ジョブの 2 番目のステップである LISTSYMB は CALLMFJZ モジュールを呼び出します。このモジュールは、「IEFSJSYM」を呼び出してジョブのその時点で定義されているすべての JCL シンボルを一覧表示します。その後、値をステップの SYSOUT データセットに書き込みます。

CALLMFJZ.cbl は、IEFSJSYM によって返されたメモリ構造を解釈する方法を示しています。情報が処理されたら、割り当てられているメモリのブロックを解放するために、88-func-freemem 関数を使用して IEFSJSYM を呼び出すことが重要です。これをしないと、メモリ リークが発生し、最終的にシステム全体が停止する可能性があります。

内部読み取りプログラムを使用したシンボルの受け渡し

内部読み取りプログラムを使用することにより、エクスポートされたシンボルを、サブミットされるジョブに渡すことができます。SYMBOL8.JCL は、INTRDR を使用して、あるジョブで定義されたシンボルを、そのジョブがサブミットするジョブに渡して使用する方法を示しています。SYMBOL8 は、ジョブ SYMBOL8B をサブミットします。サブミットされた SYMBOL8B は、親ジョブから定義されて渡されたシンボル値を使用します。

ジョブ相関子およびユーザー データの取得

ジョブ相関子 (一意のジョブ参照 ID) はシステムによって生成され、シンボル値として使用 (SYMBOL6.JCL の SYS VALUE = &SYS_CORR_CURRJOB のように) できます 。ジョブ相関子は MJFUXIT ユーザー出口で受け取ることもできます。このユーザー出口では SYS_CORR_USERDATA も設定できます。

このデモンストレーションに含まれている MFJUXIT サンプル ユーザー出口は、event-job-stmt-info で、SYMBOL6 ジョブの SYS_CORR_USERDATA を「MY JOB USER DATA」に設定します。

ジョブの実行時、ユーザー出口は event-job-started でユーザー データ値を報告します。コンソール ログにエコーされた設定文をメッセージで確認できます。

JCLXM0000I J000**** SYMBOL6  Job Correlator = J0001029TST.....JES6DFEE255....:
JCLXM0000I J000**** SYMBOL6  User Exit set correlator user data to MY JOB USER DATA

ジョブの実行後にその JESYSMSG を表示すると、これらの値がユーザー出口によって読み取られたことを報告するメッセージを確認できます。

JCLXM0000I Job Correlator = J0001029TST.....JES6DFEE255....: 
JCLXM0000I User Data is: MY JOB USER DATA

しかし、次の「制限事項」で説明するように、JES シンボル サービス IAZSYMBL は現在実装されていないため、これらの値をユーザー出口以外のユーザー プログラムで要求または設定することはできません。

制限事項

  • SYS_JOB_NOTIFY は、静的システム シンボル (IEASYM00) に含まれていない限り、ジョブのサブミットの前に設定することはできません。
  • SYMBOLS=EXECSYS と SYMBOLS=CNVTSYS に違いはありません。
  • SYMBOLS=JCLONLY は、エクスポートされた JCL シンボル、および $SYS_* システム シンボルを解決します。
  • SYMBOLS=EXECSYS または SYMBOLS=CNVTSYS は、エクスポートされた JCL シンボルの置換 (ジョブのサブミット時に解決された値に置換)、および実行プロセスで定義された静的システム シンボルの置換を行います。
  • エクスポートされた JCL シンボル値はすべて、ジョブがサブミットされたときに解決されます。JCL シンボルとしてエクスポートされていない静的システム シンボルは、ジョブの実行時に解決されます。これは、SYMBOLS=EXECSYS と同等です。
  • JES シンボル サービス (IAZSYMBL) は実装されていません。IAZSYMBL の呼び出しは 12 を返します。
  • IEFSJSYM 関数の GETBYNAME は実装されていないため、8 (サポートされていない関数) および理由コード x'00000818' を返します。