GSAM および IMS メッセージ・キュー・アクセス
GSAM および IMS™ メッセージ・キューは、EGL を介してアクセスされるシリアル・ファイルの 2 つの例です。
- VSAM
- 仮想記憶アクセス方式。詳しくは、VSAM ファイルへのアクセスを参照してください。
- GSAM
- 汎用順次アクセス方式 (Generalized Sequential Access Method)。IMS または z/OS バッチ環境では、 このアクセス方式を使用してバッチ処理を行います。
- IMS メッセージ・キュー
- WebSphere® MQ (以前の MQSeries®) メッセージ・キューと混同することのないようにしてください。
シリアル・レコード (SerialRecord ステレオタイプを持つレコード定義) は、 生成時に ResourceAssociation パーツを使用して特定のファイルに関連付けます。 このプロセスにより、EGL がレコードを使用して VSAM、 GSAM、または IMS メッセージ・キューのいずれのアクセスをするかが決まります。詳しくは、「EGL 生成ガイド」を参照してください。
GSAM ファイルとしてのシリアル・ファイル
IMS BMP または z/OS バッチ環境で実行される EGL プログラムは、 シリアル・ファイルを GSAM (汎用順次アクセス方式) ファイルとして実装することができます。これにより、 これらのシステムでごく基本的なデータベース機能セットが提供されます。GSAM ファイルとして実装するシリアル・ファイルには、add、get next、および close I/O ステートメントを使用できます。
- GSAM ファイルは、データベース・ドライバー (DBD) を必要とします。
- GSAM ファイルは、IMS PSB に PCB を必要とします。この PCB は、IMS ランタイム PSB、および EGL PSB 定義で定義する必要があります。プログラムでは、PSB レコード・パーツに基づくレコード変数を宣言する必要があります。
- GSAM ファイルは DL/I 呼び出しにより読み取り/書き込みがされます。生成された COBOL プログラムは、要求された I/O ステートメントに基づいてこれを自動的に処理します。
- GSAM ファイルは、DL/I データベースと同じ方法で、チェックポイント指定され、再開されます。 ただし、GSAM ファイルをリカバリーするには、 基本チェックポイントに代えて、シンボリック・チェックポイントを使用し、再開する必要があります。
IMS メッセージ・キューとしてのシリアル・ファイル
IMS/VS で実行されるプログラムは、シリアル・ファイルを IMS メッセージ・キューとして実装します。 IMS BMP プログラムとして実行されるプログラムも、シリアル・ファイルをメッセージ・キューとして実装できます。 出力ファイルには、add ステートメントと get next I/O ステートメントのほか、close も使用できます。 IMS/VS または IMS BMP をターゲットのランタイム環境として選択した場合、 シリアル・ファイルまたは印刷ファイルをメッセージ・キューに関連付けて定義することができます。IMS/VS の場合は、すべてのシリアル・ファイルと印刷ファイルをメッセージ・キューに関連付ける必要があります。メッセージ・キューに関連付けることができる入力ファイルは 1 つのみです。
シリアル・レコードをメッセージ・キューに関連付ける際には、プログラム・データのみ定義します。 生成された COBOL プログラムでは、add ステートメントについて IMS メッセージ・ヘッダー (長さ、ZZ、 およびトランザクション・コード) を追加し、get next ステートメントについてはこれを除去します。
シリアル・ファイルの I/O ステートメントの結果の確認
- get next ステートメントの場合、レコードの状態は
DL/I 状況コードに基づいて設定されます。生成されたプログラムが入出力 PCB に対して GU 呼び出しを発行すると、sysVar.sessionID および sysVar.userID フィールドが、入出力 PCB のユーザー ID フィールドを基に更新されます。この処理は、次の場所で行われます。
- 複数セグメントのメッセージ・キュー (MMSGQ) として定義されているシリアル・ファイルに対する最初の get 文。
- 単一セグメントのメッセージ・キュー (SMSGQ) に対して get next ステートメントが発行されるたび。
- add ステートメントまたは close ステートメントについては、 DL/I 状況コードに基づきレコードの状態が更新されます。
メッセージ・キューまたは GSAM に関連する DL/I 呼び出しの後に、dliVar フィールドは更新されません。 これらのフィールドは、DL/I セグメント・レコードにアクセスする関数の場合にのみ更新されます。これにより、CICS® 一時データ・キューまたは OS/VS シリアル・ファイル用に作成されたプログラムは、そのファイルが IMS 環境のメッセージ・キューまたは GSAM データベースに変更されても、整合性を維持したまま実行できます。 シリアル・ファイルで endOfFile、noRecordFound、またはその他のエラーが発生したかどうかを判別するには、 I/O エラー値をチェックします。PCB からさらに詳細な情報を必要とする場合は、IO_PCBRecord または ALT_PCBRecord のフィールド名を使用します。
PSB 変数 (名前は myPSB) が ALT_PCBRecord (名前は myAltPCB) を宣言して、リソース関連で myAltPCB を PCB 名として使用した状況を考えてみます。add ステートメントの後で DL/I 状況コードを参照するには、myPSB.myAltPCB.statusCode を使用します。
| EGL I/O エラー・コード | IMS メッセージ・キューの状況コード | 重大度 |
|---|---|---|
| endOfFile | QC | ソフト |
| noRecordFound | QD | ソフト |
| ioError | 非ブランクの任意の状況コード | ハードまたはソフト |
| hardIOError | QC、QD、CE、CF、CG、CI、CJ、CK、CL 以外の非ブランクの状況コード | ハード |
| EGL I/O エラー・コード | GSAM 状況コード | 重大度 |
| endOfFile | GB | ソフト |
| ioError | 非ブランクの任意の状況コード | ハードまたはソフト |
| hardIOError | GB 以外の非ブランクの状況コード | ハード |