Segmentierung in Text-UI-Programmen und UI-Programmen

Die Segmentierung ist an die EGL-Anweisung converse und die Freigabe von Systemressourcen gebunden. 'converse' bezieht sich hier auf einen Dialog zwischen einem Programm und einem Benutzer. Die Anweisung converse präsentiert dem Benutzer Informationen, wartet auf eine Antwort und setzt dann die Verarbeitung bei der nächsten Anweisung fort.

Ein nicht segmentiertes Programm verbleibt im Arbeitsspeicher, während es auf die Antwort des Benutzers wartet. Ein segmentiertes Programm wird beendet, nachdem die Anweisung converse ausgeführt wurde, und es wird neu geladen, nachdem der Benutzer antwortet (außer in der IMS-Umgebung, in der das Programm nach einer converse-Anweisung zurückkehrt, um aus der Nachrichtenwarteschlange zu lesen). Die Idee hinter der Segmentierung ist, Systemressourcen freizugeben (z. B. Arbeitsspeicher und gesperrte Datenbanken), falls der Benutzer nicht sofort reagiert.

Im Allgemeinen spielen Segmentierungsprobleme in Transaktionsumgebungen wie CICS und IMS eine wichtige Rolle. Weitere Informationen finden Sie unter Verhalten von segmentierten Programmen unter CICS oder IMS. EGL schützt Sie vor diesen Implementierungsproblemen. Abgesehen von einigen kleinen Ausnahmen schreiben Sie Ihren Code in EGL, als ob Ihr Programm durchgehend im Arbeitsspeicher verfügbar wäre. EGL generiert dann die entsprechenden Befehle für jede Umgebung, einschließlich zusätzlichen Codes für die Ausführung der folgenden Aktionen (nach Bedarf):

EGL-generierte Java™-Programme, die keine UI-Programme sind, sind immer nicht segmentiert und verbleiben nach einer converse-Anweisung im Arbeitsspeicher. Wenn Sie Programme sowohl in Java als auch in COBOL generieren, können Sie das Programm als segmentiert deklarieren (indem Sie die Eigenschaft segmented des Programms auf YES setzen) oder die Systemvariable converseVar.commitOnConverse festlegen. Auf diese Weise wird das Verhalten mancher segmentierter Programme in der Java-Umgebung imitiert, z. B. das Festschreiben von Änderungen an der Datenbank und das Freigeben von Datenbanksperren nach einer converse-Anweisung.

Ein aufgerufenes Programm kann segmentiert sein. Setzen Sie EGL davon in Kenntnis, indem Sie die Eigenschaft segmented für jedes Programm in der aufrufenden Kette auf YES setzen.

Ein nicht segmentiertes Programm kann einfacher zu codieren sein. Sie müssen beispielsweise nach einer converse-Anweisung nicht erneut eine Sperre für eine SQL-Zeile anfordern. Zu den Nachteilen gehört, dass die SQL-Zeilen blockiert sind, solange der Benutzer überlegen muss. Dies kann zu Leistungsproblemen für Benutzer führen, die auf dieselbe SQL-Zeile zugreifen müssen.

Es gibt zwei Techniken für die Freigabe oder Aktualisierung von Ressourcen, bevor eine converse-Anweisung in einem nicht segmentierten Programm ausgeführt wird:

Kompatibilität

Tabelle 1. Hinweise zur Kompatibilität für segmentierte Programme
Plattform Problem
IMS oder CICS für z/OS
Der Vorteil der Verwendung eines segmentierten Programms unter IMS oder CICS für z/OS ist folgender:
  • Falls EGL nicht vorhanden ist, schreibt der Entwickler eines segmentierten Programms Code für die Analyse des Programmstatus bei jedem Aufruf. Mit EGL ist die Anwendungslogik einfacher, denn der Entwickler schreibt den Code so, als würde der Benutzer einen Dialog mit einem ständig im Speicher verfügbaren Programm führen.
  • Begrenzte Ressourcen wie Speicher werden effizienter genutzt, sodass eine größere Anzahl von Terminals gleichzeitig EGL-Programme ausführen können.

Der Vorteil der Verwendung eines nicht segmentierten Programms unter IMS oder CICS für z/OS besteht darin, dass die Antwortzeit für jeden Benutzer kürzer ist als bei einem segmentierten Programm, weil der Programmstatus nicht gespeichert und wiederhergestellt wird.

Ein segmentiertes EGL-Programm führt die folgenden Aktionen aus, wenn der Benutzer es zum ersten Mal aufruft:
  1. Es führt Initialisierungstasks aus, einschließlich der Feststellung, dass dies der erste Aufruf des Benutzers ist.
  2. Es übergibt die Steuerung an den Anfang der Programmlogik.
  3. Es implementiert jede EGL-Anweisung converse auf diese Weise:
    1. Es verwendet eine Arbeitsdatenbank, um den Status des Programms zu speichern. Dabei handelt es sich um einen Satz benutzerspezifischer Werte, der den aktuellen Status des Benutzerprogrammdialogs widerspiegelt. Darin enthalten sind die Daten für alle Datensätze und Formulare. Ebenfalls enthalten sind die Informationen, die zur Ausführung des Programms aus der entsprechenden Zeile erforderlich sind.
    2. Es schreibt Datenbank- und wiederherstellbare Ressourcen fest.
    3. Es hebt alle Sperren auf.
    4. Es behält auch dann keine Datenbankposition bei, wenn die Anweisung 'open' der Datenbank die Option 'hold' einschließt.
    5. Es führt eine 'converse'-Anweisung für ein Formular aus.
    6. Es wird beendet.
IMS oder CICS für z/OS (Fortsetzung)
Wenn der Benutzer eine Aktion ausführt (z. B. zur Aktualisierung von Geschäftsdaten), stellt das Laufzeitsystem das Programm im Arbeitsspeicher wieder her. Das Programm startet erneut. Das segmentierte Programm führt automatisch die folgenden Aktionen aus:
  1. Es führt Initialisierungstasks aus, einschließlich der Feststellung, dass dieser Benutzer das Programm bereits mindestens einmal aufgerufen hatte.
  2. Es stellt den Programmstatus wieder her, einschließlich der Daten für alle Formulare und Datensätze sowie Informationen dazu, welche converse-Anweisung in dem Programm ausgeführt wurde.
  3. Es liest die Eingabe des Benutzers und führt Bearbeitungen aus.
  4. Es setzt den Zyklus fort, wenn die nächste converse-Anweisung implementiert wird:
    1. Es speichert den Programmstatus.
    2. Es schreibt Datenbank- und wiederherstellbare Ressourcen fest.
    3. Es hebt alle Sperren auf.
    4. Es behält auch dann keine Datenbankposition bei, wenn die Anweisung 'open' der Datenbank die Option 'hold' einschließt.
    5. Es führt eine 'converse'-Anweisung für ein Formular oder ein VGUI-Datensatz aus.
    6. Es wird beendet.

Feedback