Logische Arbeitseinheit (LUW)

Wenn Sie nicht wiederherstellbare Ressourcen wie beispielsweise serielle Dateien unter Windows 2000 ändern, sind solche Änderungen relativ permanent. Weder Ihr Code noch EGL-Laufzeitservices können diese Änderungen ohne Benachrichtigung widerrufen. Wenn Sie wiederherstellbare Ressourcen wie beispielsweise Datenbanken ändern, kann Ihr Code bzw. können EGL-Laufzeitservices diese Änderungen entweder festschreiben (Commit-Operation), um sie permanent zu machen, oder rückgängig machen (Rollback-Operation), um zu dem Inhalt zurückzukehren, der gültig war, als zuletzt Änderungen festgeschrieben wurden.

Sie können die folgenden Ressourcen wiederherstellen:
Eine logische Arbeitseinheit (LUW) bezeichnet Eingabeoperationen, die als Gruppe festgeschrieben oder rückgängig gemacht werden. Eine Arbeitseinheit beginnt, wenn Ihr Code eine wiederherstellbare Ressource ändert, und endet, wenn das erste der folgenden Ereignisse eintritt:

Wenn das Programm in einer Transaktionsumgebung ausgeführt wird (CICS, IMS oder iSeries), gibt EGL ein Commit-Operation für die Umgebung aus. Diese Operation führt ein zweiphasiges Commit aus, das für alle Ressourcenmanager und alle Programme in der Ausführungseinheit koordiniert wird. In nicht transaktionsorientierten Umgebungen führt EGL ein einphasiges Commit aus, das jeden wiederherstellbaren Ressourcenmanager einzeln aufruft.

Wenn ein Programm in z/OS Batch ausgeführt wird und auf DB2 zugreift, kann es in einer RRSAF-Umgebung (Recovery Resource Services-Anschlussfunktion) ausgeführt werden:
Die folgenden Hinweise gelten für die Interaktion zwischen EGL-Programmen und Nicht-EGL-Programmen. Wenn Sie die Systemfunktion 'sqlLib.connect()' oder 'vgLib.connectionService()' aufrufen (die Sie beide verwenden können, um dynamisch eine Verbindung zu einer anderen Datenbank herzustellen), rufen Sie vor diesem Aufruf entweder 'sysLib.commit()' oder 'sysLib.rollback()' auf.

Kompatibilität

Tabelle 1. Hinweise zur Kompatibilität für Arbeitseinheiten
Plattform Problem
Java™-Generierung
  • Wenn eines der Java-Programme mit einem permanenten Fehler endet, wirkt sich dies genau so aus wie eine Rollback-Operation, das Schließen von Cursorn und das Freigeben von Sperren.
  • Endet die Ausführungseinheit erfolgreich, führt EGL eine Commit-Operation aus, schließt die Cursor und hebt die Sperren auf.
  • Sie können mehrere Verbindungen verwenden, um Daten aus mehreren Datenbanken zu lesen. Aktualisieren Sie in einer Arbeitseinheit jedoch immer nur eine Datenbank, da nur ein einphasiges Commit verfügbar ist. Weitere Informationen finden Sie unter connect().
  • Wenn Sie eine Mischung aus nativem und generiertem Java-Code schreiben und SQL-Datenbankänderungen festschreiben müssen, die zu einem früheren Zeitpunkt in der Ausführungseinheit vorgenommen wurden, können Sie die Java-Klasse verwenden, die in 'SharedResourcePowerServer' beschrieben ist.
CICS
In einer CICS-Ausführungseinheit ist jeweils immer nur eine DB2 UDB-Datenbank verfügbar. Eine automatische Verarbeitung erfolgt in den folgenden Situationen:
  • Wenn eines der Programme mit einem permanenten Fehler endet, führen die EGL-Laufzeitservices eine ROLLBACK-Operation aus, schließen die Cursor und geben Sperren frei.
  • Endet die Ausführungseinheit fehlerfrei, führt CICS eine COMMIT-Operation aus, schließt die Cursor und gibt die Sperren frei, sofern das aufrufende Programm nicht angefordert hat, dass diese Aktionen nicht ausgeführt werden sollen. So werden diese Aktionen beispielsweise nicht ausgeführt, wenn Java-Code auf ein EGL-CICS-Programm zugreift und der Verbindungsoptionsabschnitt für den Aufruf angibt, dass der Java-Code die logische Arbeitseinheit (LUW) bearbeitet. In diesem Fall wird die LUW als Client-Arbeitseinheit (UOW) bezeichnet. Weitere Informationen hierzu finden Sie im Handbuch für EGL-Generierung.
Eine COMMIT-Operation wird in den folgenden Fällen im Zusammenhang mit der DL/I-Verarbeitung ausgeführt:
  • Ein von EGL aufgerufenes Programm, das auf DL/I zugreift, kehrt zum aufrufenden Programm zurück, wenn wenn die Parameterliste des aufgerufenen Programms nicht die Adresse eines Programmkommunikationsblocks (PCB) oder Programmspezifikationsblocks (PSB) enthielt.
  • Ein PSB ist momentan terminiert, ein EGL-Programm übergibt die Steuerung mithilfe einer Anweisung 'transfer to program', und eine der folgenden Bedingungen trifft zu:
    • Die Übertragung erfolgt auf ein Nicht-EGL-Programm (und ein Nicht-VisualAge Generator-Programm).
    • Die Erstellungsdeskriptoroption 'synchOnPgmTransfer' ist für das übertragende Programm auf YES gesetzt.
    • Die Erstellungsdeskriptoroption 'synchOnPgmTransfer' ist für das übertragende Programm auf NO gesetzt, und der im PSB-Datensatz des übertragenden Programms referenzierte Standard-PSB unterscheidet sich von dem Standard-PSB, der im PSB-Datensatz des Zielprogramms referenziert ist. (Um die Unterschiede beim Verhalten zu minimieren, wenn ein übertragendes Programm sowohl für CICS als auch für IMS/VS generiert wird, setzen Sie die Erstellungsdeskriptoroption 'synchOnPgmTransfer' auf NO.)
IMS BMP
'sysLib.commit()' wird für transaktionsorientierte BMP-Programme ignoriert, in denen das Programm eine Anweisung 'get next' verwendet, um eine serielle Datei zu lesen, die dem Eingabe-/Ausgabe-PCB zugeordnet ist. Für diese Programme führt das System die Commit-Operation in einem der folgenden Fälle aus:
  • Immer dann, wenn eine Anweisung 'get next' für die dem Eingabe-/Ausgabe-PCB zugeordnete serielle Datei in einem Aufruf 'get unique' (GU) resultiert, um das erste Segment der nächsten Nachricht abzurufen.
  • Immer dann, wenn Sie 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' oder 'vgLib.VGTDLI()' verwenden, um einen Aufruf CHKP oder 'get unique' (GU) an den Eingabe-/Ausgabe-PCB auszugeben.
Bei einem stapelorientierten BMP-Programm, das keine Anweisung 'get next' verwendet, um eine dem Eingabe-/Ausgabe-PCB zugeordnete serielle Datei zu lesen, resultiert der Aufruf von 'sysLib.commit()' in einem DL/I-Basisaufruf CHKP. Dieser Aufruf schreibt Änderungen für alle Datenbanken fest. Der Inhalt der Struktur 'dliLib.psbData.psbName' wird als Prüfpunkt-ID im Aufruf CHKP verwendet.

GSAM-Dateien sind bei Verwendung mit einem CHKP-Basisaufruf nicht wiederherstellbar. Um GSAM-Dateien wiederherstellbar zu machen, verwenden Sie 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' oder 'vgLib.VGTDLI()' für einen symbolischen Prüfpunkt anstelle von 'sysLib.commit()'.

IMS/VS
'sysLib.commit()' wird ignoriert. Die Verarbeitung von Commits erfolgt nur an den folgenden impliziten Commitpunkten:
  • Bei einem Text-UI-Programm: Bei jeder Anweisung 'converse' oder wenn die Ausführungseinheit erfolgreich endet, wie unter Ausführungseinheit beschrieben.
  • Bei einem Basisprogramm führt das System das Commit wie folgt aus:
    • Immer dann, wenn eine Anweisung 'get next' für die dem Eingabe-/Ausgabe-PCB zugeordnete serielle Datei in einem Aufruf 'get unique' (GU) resultiert, um das erste Segment der nächsten Nachricht abzurufen.
    • Immer dann, wenn Sie 'dliLib.AIBTDLI', 'dliLib.EGLTDLI' oder 'vgLib.VGTDLI' verwenden, um einen Aufruf CHKP oder 'get unique' (GU) an den Eingabe-/Ausgabe-PCB auszugeben.
Änderungen an allen Datenbanken und seriellen Dateien werden an den impliziten Commitpunkten festgeschrieben.
Im Zusammenhang mit der logischen Arbeitseinheit (LUW) führt ein expliziter Prüfpunktbefehl (CHXP) zu einem Aufruf 'get unique' (GU) an den Eingabe-/Ausgabe-PCB, der wiederum ein Commit auslöst. Beachten Sie folgende Warnungen:
  • Geben Sie den Befehl CHKP niemals in einem Text-UI-Programm aus, da das Ergebnis die Art und Weise beeinträchtigt, in der das generierte COBOL-Programm mit der Eingabenachrichtenwarteschlange interagiert.
  • Geben Sie den Befehl CHKP nicht in einem Basisprogramm aus, selbst wenn Sie den Zugriff auf den Eingabe-/Ausgabe-PCB explizit im Code bearbeiten.
iSeries COBOL
Eine implizite Commit-Operation wird in den folgenden Situationen ausgegeben:
  • Wenn ein Text-UI-Hauptprogramm endet, das das Ende einer Ausführungseinheit darstellt. Dies ist hauptsächlich dann der Fall, wenn das Text-UI-Hauptprogramm zu dem Nicht-EGL-Programm (oder zu dem Nicht-VisualAge Generator-Programm) zurückkehrt, über das es gestartet wurde.
  • Wenn ein Programm eine Anweisung 'transfer to transaction' ausgibt.

Wenn das Programm SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einer SQL-Anweisung COMMIT WORK (geänderte Daten festschreiben). Wenn das Programm keine SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einem Befehl, der zu einem iSeries-Befehl COMMIT äquivalent ist.

z/OS Batch

Wenn das Programm keinen Programmspezifikationsblock (PSB) angibt, aber SQL-Anforderungen ausgegeben hat, resultiert der Aufruf von 'sysLib.commit()' in einer SQL-Anweisung COMMIT WORK (geänderte Daten festschreiben).

Wenn das Programm einen PSB angibt, resultiert der Aufruf von sysLib.commit() in einem DL/I-Basisaufruf CHKP, der Änderungen für alle Datenbanken festschreibt. Der Inhalt der Struktur 'dliLib.psbData.psbName' fungiert als Prüfpunkt-ID im Aufruf CHKP.

GSAM-Dateien sind bei Verwendung mit einem CHKP-Basisaufruf nicht wiederherstellbar. Um GSAM-Dateien wiederherstellbar zu machen, verwenden Sie 'dliLib.AIBTDLI()', 'dliLib.EGLTDLI()' oder 'vgLib.VGTDLI()' für einen symbolischen Prüfpunkt anstelle von 'sysLib.commit()'.


Feedback