INTRDR

INTRDRとは、内部読み取りプログラム(Internal reader)と呼ばれる、JES2のリーダー・プログラムのことです。ジョブは、JES2によって実行されますが、そのジョブを定義したJCLを読み取る機能が、リーダーです。JES2のリーダーは、元々は紙カードに記録されたJCLを読み取るため、カードリーダー・デバイスに対してI/Oを行っていました。今日では紙カードもカードリーダーもまず使われることはなく、代わりにDASDや磁気テープ上のデータセットにJCLが作成されます。そこに書かれたJCLを読み取るのが、JES2のINTRDR(内部読み取りプログラム)です。

INTRDRはプログラムではあるものの、呼び出して使うサブルーチン的なものではなく、JCLのDDステートメントに定義して使用するか、TSOやISPFなど対話処理のコマンドによって間接的に使用します。この時に使用されるコマンドがSUBMITであることから、INTRDRにジョブを読み取らせることを、JCLをサブミットする、などと呼んでいます。

INTRDRの使い方①

サブミットしたいジョブのJCLを、IEBGENERユーティリティなど、順次データセットのコピーを行うプログラムを使って、コピー先にSYSOUT、ライター名(出力プログラム名)として「INTRDR」を指定します。この場合、クラスは省略するか適当なものでかまいません。

  • MY.JCLLIB内のメンバーTESTJOB1が、JCLとして読み取られ実行される。

INTRDRの使い方②

エディターやブラウザーで、サブミットしたいジョブのJCLを開き、SUB[MIT]コマンドを実行することで、ジョブをサブミットできます。

TSOコマンド「SUBMIT」を使って、ジョブをサブミットできます。パラメーターに、サブミットするJCLの’データセット名(メンバー名)’を指定します。

TSOの場合は、直接SUBMITコマンドを使うより、CLIST(コマンドプロシージャ)と組み合わせる方が一般的でしょう。CLIST内で、サブミットするJCLそのものを生成することで、入力パラメーターや状況に応じてJCL内容を変更することもできます。

MSPとVOS3では、SUBMITコマンドの入力ソースに端末やCLISTを指定できません。代わりに、一旦ワークデータセットに書き出し、そのデータセットをSUBMITコマンドで指定します。

INTRDRの使い方③

プログラムからINTRDRにJCLを書き出すこともできます。例えばCOBOLでJCLを作り、それを順次ファイルへ書き出せばジョブを実行できます。

プログラム内で定義したJCLデータが、SYSUT2に指定したINTRDRに書き出され、ジョブとして実行されます。

すでに紹介したGENERユーティリティや上記のCOBOLプログラムでは、INTRDRを順次データセットとして扱います。書き出したJCLを実際に実行させるには、データセットをクローズする必要があります。しかし、アセンブラー・プログラムなら、INTRDRをVSAMデータセットとして扱うことも可能です。複数のジョブをサブミットする場合でも、CLOSEと再OPENを繰り返す必要がありません(ただし、ジョブの区切りとしてENDREQマクロを発行する)。また、サブミットされたJOBのJOBIDが戻されるので、プログラムでJOBIDを処理に使うこともできます。

サンプルなので、エラーの判定を省略しています。正しく書き出されれば、JOBIDはRPLのRPLRBARフィールドに設定されます(CL8’JOBnnnnn’)。なお、スプールや空きジョブ番号など、JES2リソースが不足した状態では、発行したPUTマクロまたはENDREQマクロが完了しません。この場合は、JES2側で必要な対処を行う必要があります(例えば不要なジョブ出力を消去する)。応答がないからと言って、プログラムをキャンセルしても意味がありません。COBOLやTSOコマンドであっても同じです。