unloadOnExit

unloadOnExit プロパティーは、呼び出し先プログラムの終了後にそれをアンロードするかどうかを指定します。有効な値は YES または NO です。

unloadOnExit プロパティーには、以下の制約事項があります。
unloadOnExit プロパティーに NO を設定すると、以下の 結果がもたらされます。
unloadOnExit プロパティーに YES を設定すると、以下の 結果がもたらされます。

プログラムをアンロードしたときに、そのプログラムが呼び出した他のプログラムはアンロードされません。各プログラムは個別にアンロードまたは保持されます。

保持されたプログラムは、その後の呼び出し後にアンロードされるまでか、実行単位が終了するまで保持されます。transfer to transaction 文によって実行単位が 終了されます。したがって、unloadOnExit プロパティーの値がオーバーライドされます。 保持されたプログラムは transfer to program 文の後まで保持されます。

以下の要素は、単一の実行単位に含まれるすべてのプログラムで共有されます。 したがって、呼び出し先プログラムがアンロードされたときに影響を受けません。

DL/I プログラムが持つスケジュール済み PSB は一度に 1 つです。この PSB は、 任意の数のプログラムによって共有されます。呼び出し先プログラムのアンロードは、PSB に 影響しません。PSB は依然としてスケジュール済みです。

プログラムが使用するフォームは、グローバル・データであると見なされます。 そのフォームは、呼び出し先プログラムが保持されている間保持され、呼び出し先プログラムがアンロードされるときに破棄されます。

アンロードは、コミットもロールバックも意味しません。

再帰的プログラム呼び出し

COBOL では、再帰的プログラム呼び出しはサポートされていません。

Java では、以下の例に示すような状態の場合を除き、 再帰的ローカル呼び出しをサポートしています。
  1. ProgramA が ProgramB を直接または間接的に呼び出します。
  2. ProgramB が復帰し、保持されます。
  3. ProgramA が ProgramB を再度呼び出します。
  4. ProgramB が直接または間接的に ProgramB 自体を呼び出します。

この例では、最後の call 文が原因で InvocationException がスローされます。したがって、 ローカルの呼び出し先 Java プログラムが復帰し保持されているときは、同時にアクティブにできるそのプログラムのコピーは 1 つのみです。ただし、後でアンロードすることができます。

unloadOnExit プロパティーには、以下の値があります。
YES
プログラム用のすべてのメモリーを解放します。これには SQL 結果セットを含みます。 この値は Java 生成の場合のデフォルトです。デバッグ目的の場合は、「呼び出されたプログラムは、デフォルトで、リターン時にリソースを解放する」設定を設定します。EGL デバッガーの設定の変更を参照してください。
NO
呼び出し先プログラムをメモリー内に保持します。これには、SQL 結果セットおよび その他のすべての変数を含みます。この値は COBOL 生成の場合のデフォルトです。

次の例では、リカバリー不能エラーが発生しなければ、プログラムが呼び出し元に制御権を戻した後、そのプログラムはメモリー内に保持されます。

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

  ...

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

フィードバック