Die Eigenschaft 'unloadOnExit' gibt an, ob ein aufgerufenes Programm nach dessen Beendigung entladen werden
soll. Gültige Werte sind YES oder NO.
Für die Eigenschaft '
unloadOnExit' gelten folgende Einschränkungen:
- Verwenden Sie die Eigenschaft nur an den folgenden Stellen:
- Mit exit program-Anweisungen innerhalb eines Programms, das den Stereotyp 'BasicProgram' oder 'TextUIProgram' aufweist.
- Auf Programmebene bei Programmen, die den Stereotyp 'BasicProgram' oder 'TextUIProgram' aufweisen.
Wenn Sie die Eigenschaft sowohl
auf Programmebene als auch auf Anweisungsebene angeben, so hat die Anweisungsebene Vorrang (siehe 'Beispiel' in diesem Thema).
- Die Eigenschaft wirkt sich nur auf aufgerufene Programme aus. EGL ignoriert die Eigenschaft, sofern Sie keinen
lokalen Aufruf absetzen. Um als 'lokal' zu gelten, muss ein Aufruf alle folgenden Bedingungen erfüllen:
- Sie generieren beide Programme in derselben Sprache.
- Sie führen beide Programme auf demselben System aus.
- Entweder geben Sie keinen Verbindungsoptionsabschnitt an oder die Eigenschaft 'type' des Elements
'callLink' ist auf 'localCall' gesetzt.
Bei
Java™-Generierung hat die Eigenschaft 'unloadOnExit' keinen Effekt, wenn die
Eigenschaft 'linkType' des Elements 'callLink' auf LIBRARY gesetzt ist.
Wenn Sie die Eigenschaft '
unloadOnExit' auf NO setzen, wirkt sich dies wie folgt aus:
- Das aufgerufene Programm verbleibt im Hauptspeicher.
- Alle SQL-Ergebnismengen und vorbereiteten SQL-Anweisungen, die das Programm erstellt hat, bleiben geöffnet.
- Wenn Sie das Programm erneut aufrufen, wird durch die Erstellungsdeskriptoroptionen 'initNonIODataOnCall' und
'initIORecordsOnCall' gesteuert, ob globale Daten im Programm reinitialisiert werden.
Wenn Sie die Eigenschaft '
unloadOnExit' auf YES setzen, wirkt sich dies wie folgt aus:
- Der gesamte, für das Programm zugeordnete Hauptspeicher wird freigegeben.
- Alle SQL-Ergebnismengen und vorbereiteten SQL-Anweisungen, die das Programm erstellt hat, werden geschlossen, sofern das Programm nicht in
Java oder im Debugger ausgeführt wird und die Eigenschaft 'localSqlScope' mit der Einstellung NO
aufweist.
- Wenn Sie das Programm erneut aufrufen, erhalten Sie eine neue Kopie.
Durch das Entladen eines Programms werden andere, von diesem Programm aufgerufene Programme nicht automatisch ebenfalls entladen. Jedes Programm wird einzeln
entladen oder beibehalten.
Beibehaltene Programme bleiben so lange erhalten, bis sie nach einem nachfolgenden Aufruf entladen werden oder bis die Ausführungseinheit endet. Die
Ausführungseinheit wird durch die Anweisung 'transfer to transaction' beendet. Daher setzt
diese Anweisung den Wert der Eigenschaft 'unloadOnExit' außer Kraft.
Nach der Anweisung 'transfer to program' bleiben beibehaltene Programme weiterhin erhalten.
Die folgenden Elemente werden von allen Programmen in einer Ausführungseinheit gemeinsam genutzt und sind daher nicht betroffen, wenn ein aufgerufenes Programm
entladen wird:
- Dateien
- Nachrichtenwarteschlangen
- Datenbankverbindungen
- Datentabellen
- Bibliotheken
In DL/I-Programmen ist jeweils immer nur ein terminierter Programmspezifikationsblock (PSB) aktiv. Dieser PSB wird von beliebig vielen Programmen gemeinsam
genutzt. Das Entladen eines aufgerufenen Programms hat keine Auswirkung auf den PSB. Er bleibt weiterhin terminiert.
Die Formulare, die ein Programm verwendet, gelten als globale Daten.
Sie werden beibehalten, wenn ein aufgerufenes Programm beibehalten wird, und verworfen, wenn das betreffende Programm entladen wird.
Das Entladen impliziert keine Commit- oder Rollback-Operation.
Rekursive Programmaufrufe
COBOL unterstützt keine rekursiven Programmaufrufe.
Java
unterstützt rekursive lokale Aufrufe, ausgenommen in Situationen wie der im folgenden Beispiel:
- Programm A ruft Programm B auf, direkt oder indirekt.
- Programm B kehrt zurück und wird beibehalten.
- Programm A ruft Programm B erneut auf.
- Programm B ruft sich selbst auf, direkt oder indirekt.
In diesem Beispiel führt die letzte Anweisung 'call' dazu,
dass eine Ausnahmebedingung vom Typ 'InvocationException' ausgelöst wird. Daher gilt: Nachdem ein lokal aufgerufenes
Java-Programm zurückkehrt und beibehalten wird, kann jeweils immer nur eine Kopie des Programms aktiv sein, wenngleich
es zu einem späteren Zeitpunkt entladen werden kann.
Werte
Die Eigenschaft '
unloadOnExit' kann die folgenden Werte annehmen:
- YES
- Der gesamte Hauptspeicher für das Programm, einschließlich SQL-Ergebnismengen, wird freigegeben.
Dieser Wert ist der Standardwert bei Java-Generierung.
Beim Debugging setzen Sie die Benutzervorgabe 'Aufgerufene Programme geben nach Rückgabe standardmäßig Ressourcen frei'. Siehe
Benutzervorgaben für den EGL-Debugger definieren.
- NO
- Das aufgerufene Programm wird im Hauptspeicher gehalten, zusammen mit den SQL-Ergebnismengen und allen anderen Variablen. Dieser Wert ist der
Standardwert bei COBOL-Generierung.