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.
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.
Die Einstellung von converseVar.commitOnConverse wirkt sich nie auf Systemvariablen oder EGL-Tabellen aus.
Das Verhalten eines segmentierten Programms ist von dem Wert der Systemvariablen converseVar.commitOnConverse nicht betroffen.
| 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:
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:
|
| 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:
|