unloadOnExit

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:
Wenn Sie die Eigenschaft 'unloadOnExit' auf NO setzen, wirkt sich dies wie folgt aus:
Wenn Sie die Eigenschaft 'unloadOnExit' auf YES setzen, wirkt sich dies wie folgt aus:

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:

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:
  1. Programm A ruft Programm B auf, direkt oder indirekt.
  2. Programm B kehrt zurück und wird beibehalten.
  3. Programm A ruft Programm B erneut auf.
  4. 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.

Beispiel

Im folgenden Beispiel wird das Programm im Hauptspeicher beibehalten, nachdem es die Steuerung an das Programm zurückgibt, von dem es aufgerufen wurde, sofern kein nicht behebbar Fehler auftritt:

Program custProcess1 type basicProgram (custNum INT) {unloadOnExit = NO}

  ...

  if(myErrorCode == TERM_ERROR)
    exit program {unloadOnExit = YES};
  end
end

Feedback