unloadOnExit
unloadOnExit プロパティーは、呼び出し先プログラムの終了後にそれをアンロードするかどうかを指定します。有効な値は YES または NO です。
- このプロパティーは、以下の場所でのみ使用します。
- BasicProgram ステレオタイプまたは TextUIProgram ステレオタイプを持つプログラム内で exit program 文と組み合わせて使用
- BasicProgram ステレオタイプまたは TextUIProgram ステレオタイプを持つプログラムに対し、プログラム・レベルで使用
プログラム・レベルとステートメント・レベルの両方でこのプロパティーを指定した場合は、ステートメント・レベルが優先されます。このトピックの『例』を参照してください。
- このプロパティーは呼び出し先プログラムのみに影響を与えます。ローカル呼び出し を行う場合を除き、EGL ではこのプロパティーを無視します。ローカルであると見なされるためには、
呼び出しが次のすべての条件を満たす必要があります。
- 両方のプログラムが同じ言語で生成されている。
- 両方のプログラムを同じシステムで実行する。
- リンケージ・オプション・パーツを指定していないか、callLink 要素の type プロパティーに localCall が設定されているかのいずれか。
Java™ 生成の場合、callLink 要素の linkType プロパティーが LIBRARY に設定されている場合には、unloadOnExit プロパティーには効果はありません。
- 呼び出し先プログラムがメモリー内に残ります。
- そのプログラムが作成したすべての SQL 結果セットおよび準備済みステートメントは、オープンされたままになります。
- そのプログラムを再度呼び出すと、ビルド記述子オプション initNonIODataOnCall および initIORecordsOnCall により、プログラム内のグローバル・データを初期化し直すかどうかが制御されます。
- そのプログラム用に割り振られたすべてのメモリーが解放されます。
- そのプログラムが作成したすべての SQL 結果セットおよび準備済みステートメントがクローズされます。ただし、プログラムが Java またはデバッガーで実行されており、localSqlScope プロパティーに NO が設定されている場合を除きます。
- そのプログラムを再度呼び出すと、新規コピーが作成されます。
プログラムをアンロードしたときに、そのプログラムが呼び出した他のプログラムはアンロードされません。各プログラムは個別にアンロードまたは保持されます。
保持されたプログラムは、その後の呼び出し後にアンロードされるまでか、実行単位が終了するまで保持されます。transfer to transaction 文によって実行単位が 終了されます。したがって、unloadOnExit プロパティーの値がオーバーライドされます。 保持されたプログラムは transfer to program 文の後まで保持されます。
- ファイル
- メッセージ・キュー
- データベース接続
- DataTable
- ライブラリー
DL/I プログラムが持つスケジュール済み PSB は一度に 1 つです。この PSB は、 任意の数のプログラムによって共有されます。呼び出し先プログラムのアンロードは、PSB に 影響しません。PSB は依然としてスケジュール済みです。
プログラムが使用するフォームは、グローバル・データであると見なされます。 そのフォームは、呼び出し先プログラムが保持されている間保持され、呼び出し先プログラムがアンロードされるときに破棄されます。
アンロードは、コミットもロールバックも意味しません。
再帰的プログラム呼び出し
COBOL では、再帰的プログラム呼び出しはサポートされていません。
- ProgramA が ProgramB を直接または間接的に呼び出します。
- ProgramB が復帰し、保持されます。
- ProgramA が ProgramB を再度呼び出します。
- ProgramB が直接または間接的に ProgramB 自体を呼び出します。
この例では、最後の call 文が原因で InvocationException がスローされます。したがって、 ローカルの呼び出し先 Java プログラムが復帰し保持されているときは、同時にアクティブにできるそのプログラムのコピーは 1 つのみです。ただし、後でアンロードすることができます。
値
- 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