unloadOnExit プロパティーは、呼び出し先プログラムの終了後にそれをアンロードするかどうかを指定します。有効な値は YES または NO です。
プログラム・レベルとステートメント・レベルの両方でこのプロパティーを指定した場合は、ステートメント・レベルが優先されます。このトピックの『例』を参照してください。
Java™ 生成の場合、callLink 要素の linkType プロパティーが LIBRARY に設定されている場合には、unloadOnExit プロパティーには効果はありません。
プログラムをアンロードしたときに、そのプログラムが呼び出した他のプログラムはアンロードされません。各プログラムは個別にアンロードまたは保持されます。
保持されたプログラムは、その後の呼び出し後にアンロードされるまでか、実行単位が終了するまで保持されます。transfer to transaction 文によって実行単位が 終了されます。したがって、unloadOnExit プロパティーの値がオーバーライドされます。 保持されたプログラムは transfer to program 文の後まで保持されます。
DL/I プログラムが持つスケジュール済み PSB は一度に 1 つです。この PSB は、 任意の数のプログラムによって共有されます。呼び出し先プログラムのアンロードは、PSB に 影響しません。PSB は依然としてスケジュール済みです。
プログラムが使用するフォームは、グローバル・データであると見なされます。 そのフォームは、呼び出し先プログラムが保持されている間保持され、呼び出し先プログラムがアンロードされるときに破棄されます。
アンロードは、コミットもロールバックも意味しません。
COBOL では、再帰的プログラム呼び出しはサポートされていません。
この例では、最後の call 文が原因で InvocationException がスローされます。したがって、 ローカルの呼び出し先 Java プログラムが復帰し保持されているときは、同時にアクティブにできるそのプログラムのコピーは 1 つのみです。ただし、後でアンロードすることができます。
次の例では、リカバリー不能エラーが発生しなければ、プログラムが呼び出し元に制御権を戻した後、そのプログラムはメモリー内に保持されます。
Program custProcess1 type basicProgram (custNum INT) {unloadOnExit = NO}
...
if(myErrorCode == TERM_ERROR)
exit program {unloadOnExit = YES};
end
end