Zugriff auf GSAM und IMS-Nachrichtenwarteschlangen

GSAM und IMS-Nachrichtenwarteschlangen sind zwei Beispiele für den Zugriff auf serielle Dateien über EGL.

Serielle Dateien gehören zu einem der ältesten, aber vielseitigsten Dateitypen, mit denen EGL arbeitet. Bei einer seriellen Datei greifen Sie nacheinander auf die einzelnen Datensätze in der vorliegenden Reihenfolge zu. Für die Implementierung serieller Dateien gibt es in EGL drei Möglichkeiten:
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 die Verarbeitung von seriellen GSAM-Dateien gilt Folgendes:
  • 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.
EGL bietet keine Unterstützung für das Datensatzsuchargument für GSAM und keine Unterstützung für Datensätze mit nicht definierter Länge.

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

Wenn Sie eine serielle Datei einer Nachrichtenwarteschlange oder einer GSAM-Datei zuordnen, gibt das generierte Programm einen DL/I-Aufruf aus, um die E/A-Operation zu implementieren. Nach Abschluss des DL/I-Aufrufs führt Rational COBOL Runtime die folgenden Funktionen aus:
  • 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).
    Das EGL-Feld 'sysVar.transactionID' wird nach jedem Aufruf 'get next', der in einem Aufruf GU für den Eingabe-/Ausgabe-PCB resultiert, anhand des Transaktionsnamens im IMS-Nachrichtenheader aktualisiert.
  • 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

Feedback