Zugriff auf GSAM und IMS-Nachrichtenwarteschlangen
GSAM und IMS-Nachrichtenwarteschlangen sind zwei Beispiele für den Zugriff auf serielle Dateien über EGL.
- VSAM
- Virtual Storage Access Method (virtuelle Speicherzugriffsmethode). Weitere Informationen finden Sie unter VSAM-Dateizugriff.
- GSAM
- Generalized Sequential Access Method (generalisierte sequenzielle Zugriffsmethode). In IMS- und z/OS Batch-Umgebungen wird diese Zugriffsmethode für die Stapelverarbeitung verwendet.
- IMS-Nachrichtenwarteschlangen
- Diese Warteschlangen dürfen nicht mit WebSphere MQ-Nachrichtenwarteschlangen (ehemals MQSeries-Nachrichtenwarteschlangen) verwechselt werden.
Sie ordnen einen seriellen Datensatz (eine Datensatzdefinition mit dem Stereotyp 'SerialRecord') einer bestimmten Datei zu, indem Sie bei der Generierung einen Ressourcenzuordnungsabschnitt (ResourceAssociation) verwenden. Mit diesem Prozess wird festgelegt, ob EGL den Datensatz für VSAM-, GSAM- oder IMS-Nachrichtenwarteschlangenzugriff verwendet. Weitere Informationen hierzu finden Sie im Handbuch für EGL-Generierung.
Serielle Dateien als GSAM-Dateien
EGL-Programme, die in einer IMS BMP- oder z/OS Batch-Umgebung ausgeführt werden, können serielle Dateien als GSAM-Dateien implementieren. Dadurch wird auf diesen Systemen eine sehr grundlegende Datenbankfunktionalität bereitgestellt. Für serielle Dateien, die als GSAM-Dateien implementiert werden, können Sie die E/A-Anweisungen 'add', 'get next' und 'close' verwenden.
- Für eine GSAM-Datei ist ein Datenbanktreiber erforderlich.
- Für eine GSAM-Datei ist ein Programmkommunikationsblock (PCB) im IMS-Programmspezifikationsblock (PSB) erforderlich. Sie müssen diesen PCB in der Definition des IMS-Laufzeit-PSB und des EGL-PSB definieren. Sie müssen in Ihrem Programm eine Datensatzvariable deklarieren, die auf einem PSB-Datensatzabschnitt basiert.
- Das Lesen und Schreiben von Daten aus einer bzw. in eine GSAM-Datei erfolgt mithilfe von DL/I-Aufrufen. Das generierte COBOL-Programm führt diese Operationen automatisch auf der Basis der von Ihnen angeforderten E/A-Anweisungen aus.
- Eine GSAM-Datei wird auf dieselbe Weise mit Prüfpunkten versehen und erneut gestartet wie eine DL/I-Datenbank. Um eine GSAM-Datei wiederherzustellen müssen Sie jedoch statt eines Basisprüfpunkts einen symbolischen Prüfpunkt verwenden und einen Neustart durchführen.
Serielle Dateien als IMS-Nachrichtenwarteschlangen
Programme, die unter IMS/VS ausgeführt werden, implementieren serielle Dateien als IMS-Nachrichtenwarteschlangen. Programme, die als IMS BMP-Programme ausgeführt werden, können serielle Dateien auch als Nachrichtenwarteschlangen implementieren. Für Ausgabedateien können Sie die Ein-/Ausgabe-Anweisungen 'add' und 'get next' sowie die Anweisung 'close' verwenden. Wenn Sie IMS/VS oder IMS BMP als Ziellaufzeitumgebung auswählen, können Sie serielle Dateien oder Druckdateien so definieren, dass sie einer Nachrichtenwarteschlange zugeordnet sind. Bei IMS/VS müssen Sie alle seriellen Dateien und Druckdateien zu Nachrichtenwarteschlangen zuordnen. Sie können einer Nachrichtenwarteschlange nur eine einzige Eingabedatei zuordnen.
Wenn Sie einen seriellen Datensatz einer Nachrichtenwarteschlange zuordnen, definieren Sie nur die Programmdaten. Das generierte COBOL-Programm fügt den IMS-Nachrichtenheader (Länge, ZZ und Transaktionscode) für eine Anweisung 'add' hinzu und entfernt diesen Nachrichtenheader für eine Anweisung 'get next'.
Ergebnisse von E/A-Anweisungen für serielle Dateien überprüfen
- Für get next-Anweisungen wird der Datensatzstatus auf Basis des DL/I-Statuscodes gesetzt. Die Felder
'sysVar.sessionID' und 'sysVar.userID' werden anhand des Benutzer-ID-Felds des Eingabe-/Ausgabe-PCB
aktualisiert, wenn das generierte Programm einen Aufruf GU für den Eingabe-/Ausgabe-PCB ausgibt. Dies erfolgt an den folgenden Stellen:
- An der ersten Anweisung 'get next' für eine serielle Datei, die als Nachrichtenwarteschlange mit mehreren Segmenten (MMSGQ) definiert ist.
- An jeder Anweisung 'get next' für eine Nachrichtenwarteschlange mit einem einzelnen Segment (SMSGQ).
- Für eine Anweisung 'add' oder 'close' wird der Datensatzstatus auf Basis des DL/I-Statuscodes aktualisiert.
Nach einem DL/I-Aufruf, der entweder die Nachrichtenwarteschlange oder GSAM betrifft, werden die dliVar-Felder nicht aktualisiert. Diese Felder werden nur für Funktionen aktualisiert, die auf DL/I-Segmentdatensätze zugreifen. Dadurch kann ein Programm, das für eine CICS-Warteschlange mit transienten Daten oder eine serielle OS/VS-Datei geschrieben ist, konsistent ausgeführt werden, wenn die Datei in eine Nachrichtenwarteschlange oder GSAM-Datenbank in einer IMS-Umgebung geändert wird. Prüfen Sie die E/A-Fehlerwerte, um zu ermitteln, ob Fehler vom Typ 'endOfFile' (Dateiende) oder 'noRecordFound' (kein Datensatz gefunden) oder andere Fehler in der seriellen Datei aufgetreten sind. Wenn Sie detailliertere Informationen aus dem Programmkommunikationsblock (PCB) benötigen, verwenden Sie die Feldnamen in 'IO_PCBRecord' oder 'ALT_PCBRecord'.
Betrachten Sie eine Situation, in der Ihre PSB-Variable (namens myPSB) einen Datensatz vom Typ 'ALT_PCBRecord' namens myAltPCB deklariert und Sie myAltPCB als PCB-Namen in Ihrer Ressourcenzuordnung verwendet haben. Um den DL/I-Statuscode nach einer Anweisung 'add' zu referenzieren, verwenden Sie myPSB.myAltPCB.statusCode.
| EGL-E/A-Fehlercode | Statuscode der IMS-Nachrichtenwarteschlange | Wertigkeit |
|---|---|---|
| endOfFile | QC | Sporadisch |
| noRecordFound | QD | Sporadisch |
| ioError | Beliebiger belegter Statuscode (nicht leer) | Permanent oder sporadisch |
| hardIOError | Belegter Statuscode (nicht leer) mit Ausnahme von QC, QD, CE, CF, CG, CI, CJ, CK, CL | Permanent |
| EGL-E/A-Fehlercode | GSAM-Statuscode | Wertigkeit |
| endOfFile | GB | Sporadisch |
| ioError | Beliebiger belegter Statuscode (nicht leer) | Permanent oder sporadisch |
| hardIOError | Belegter Statuscode (nicht leer) mit Ausnahme von GB | Permanent |