Hierarchische Struktur für die Segmentierung von Programmen mithilfe der Anweisung 'transfer to program' implementieren

Es gibt eine Gruppe von EGL-Programmen, die bei Ausführung im Segmentmodus in der CICS-Umgebung eine gute Leistung zeigen sollten.

Es ist ein zusätzlicher Vorteil, dass diese Programme leichter zu verwalten, zu testen und zu verbessern sind, als ein einziges EGL-Programm, das dieselben Funktionen aufweist.

Im Diagramm unten ist die Beziehung zwischen vier EGL-Programmen dargestellt, die drei Tasks ausführen. Der einzige Zweck des Menüprogramms ist der Zugriff auf die anderen drei Programme. Wenn der Benutzer die gewünschte Task auswählt, überträgt das Menüprogramm die Steuerung an das entsprechende Programm und verwendet dazu die Anweisung transfer to program (Übertragung zu Programm). Das Menüprogramm übergibt einen kleinen Arbeitsspeichersatz, um die Anforderung weiter zu definieren. Das Programm, an das übergeben wurde, fordert den Benutzer zur Eingabe der erforderlichen Daten auf, führt die Task so oft wie benötigt aus und verwendet die Anweisung transfer to program, um zum Menüprogramm zurückzukehren.

Abbildung 1. Hierarchische Struktur, die die Anweisung 'transfer to program' verwendetHierarchische Struktur, die die Anweisung 'transfer to program' verwendet
Mithilfe der Anweisung transfer to program können folgende für den Segmentmodus gelten Einschränkungen aufgelöst werden:
In der IMS/VS-Umgebung wird mithilfe einer Anweisung transfer to program der Speicher nicht für das ursprüngliche Programm freigegeben. Im Beispiel ist das Menüprogramm das ursprüngliche Programm. Wenn Sie Programme entwickeln, die sowohl in IMS- als auch in CICS-Umgebungen ausgeführt werden, können Sie eine Anweisung transfer to program (Übertragung zu Programm) oder eine Anweisung transfer to transaction (Übertragung zu Transaktion) verwenden. Wenn Sie Programme entwickeln, die nur in IMS ausgeführt werden, verwenden Sie eine Anweisung transfer to transaction aus folgenden Gründen: Verwenden Sie eine Anweisung transfer to program in der IMS-Umgebung, wenn Sie nicht möchten, dass ein Festschreibungspunkt auftritt oder wenn es für Sie erforderlich ist, dass beide Programme denselben DB2-Plan und denselben Programmspezifikationsblock verwenden.

Zwischen Segmentmodus und Modus ohne Segmentierung dynamisch wechseln

Anmerkung: Dieses Verfahren wird nur im VisualAge Generator-Kompatibilitätsmodus unterstützt. Es sollte nicht für neue Programme verwendet werden.
Wenn Sie die Eigenschaft segmented für ein Programm angeben, legen Sie den Standardmodus fest, wie eine Anweisung converse zur Laufzeit behandelt wird. Die Eigenschaft segmented initialisiert den Wert der Systemvariable converseVar.segmentedMode auf folgende Weise:
0
Gibt an, dass das Programm nicht segmentiert ist.
1
Gibt an, dass das Programm segmentiert ist.
Sie können die Systemvariable converseVar.segmentedMode ändern, um die Segmentierung zur Laufzeit dynamisch zu steuern. Durch Festlegen von '0' bzw. '1' für converseVar.segmentedMode können Sie den Standardwert für die nächste converse-Anweisung überschreiben. Vor jeder Anweisung converse überprüft EGL den Wert von converseVar.segmentedMode und verarbeitet die Anweisung converse auf folgende Weise:
  • Wenn converseVar.segmentedMode auf '1' gesetzt wird, behandelt EGL die Anweisung converse wie eine mit 'segmented' versehene Anweisung 'converse'.
  • Wenn converseVar.segmentedMode auf '0' gesetzt wird, behandelt EGL die Anweisung converse wie eine nicht mit 'segmented' versehene Anweisung 'converse'.

Wenn die Anweisung converse erfolgreich abgeschlossen wird, setzt EGL converseVar.segmentedMode auf Basis der Eigenschaft segmented für das Programm auf den Standardwert zurück.

Die Systemvariable converseVar.segmentedMode ermöglicht es Ihnen, aus Gründen der Leistung, der Funktion und der Unterschiede des Zielsystems zwischen dem Segmentmodus und dem Modus ohne Segmentierung zu wechseln. Zum Steuern der Segmentierung verwenden Sie vor einer Anweisung converse eine der beiden folgenden Anweisungen:
converseVar.segmentedMode = 1;  // erzwingt, dass die nächste Anweisung 'converse' mit 'segmented' versehen ist
converseVar.segmentedMode = 0;  // erzwingt, dass die nächste Anweisung 'converse' nicht mit 'segmented' versehen ist

Denken Sie daran, dass converseVar.segmentedMode nach jeder Anweisung converse auf den generierten Standardwert zurückgesetzt wird. Sie sollten daher nur converseVar.segmentedMode festlegen, wenn Sie das Verhalten einer bestimmten Anweisung converse von der Standardverarbeitung abweichen lassen möchten.

Hinweis: In der IMS/VS-Umgebung ignoriert EGL die Verwendung der Systemvariable converseVar.segmentedMode. Alle Programme, die converse-Anweisungen enthalten, müssen in der IMS/VS-Umgebung im Segmentmodus ausgeführt werden.


Feedback