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' verwendet
Mithilfe der Anweisung
transfer to program können folgende für den Segmentmodus gelten Einschränkungen aufgelöst werden:
- Ein aufgerufenes Programm kann nur im Segmentmodus ausgeführt werden, wenn alle Programme in der Kette segmentiert sind.
- Aufgerufene Programme geben die Ressourcen des Aufrufenden nicht frei, weil die Programmsteuerung zum aufrufenden Programm zurückkehrt.
- Der Umfang der Daten, die bei einer mit 'segmented' versehenen Anweisung 'converse' temporär ein- bzw. ausgelagert werden, ist viel kleiner. Nur die Datenbereiche des Programms, das aktuell die Steuerung hat, werden gespeichert.
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:
- Zum Freigeben von Ressourcen für die Programme, von denen übertragen wurde
- Zum Verursachen eines Festschreibungspunkts und zum Freigeben von forUpdate-Sperren
- Zum Ermöglichen, dass jedes Programm einen eigenen DB2-Plan und unterschiedliche Programmspezifikationen aufweist
- Zum Ermöglichen, dass jedes Programm in der IMS-Systemdefinition unterschiedliche Informationen zur Leistungsoptimierung aufweist
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.