例外処理の概要

例外処理とは次のような処理のことです。

実行時エラーが起こった時には、例外メッセージが生成されます。 例外メッセージは起こったエラーのタイプによって、次のいずれかのタイプに なります。

*ESCAPE
重大エラーが検出されたことを示します。
*STATUS
プログラムによって行われている処理の状況を説明します。
*NOTIFY
呼び出し側プログラムからの訂正処置または応答を必要とする状態を説明しま す。
機能チェック
前記 3 つの状態の 1 つが起こったが、処理されていないことを 示します。

例外メッセージは呼び出しスタック項目と関連しています。 さらに各呼び出しスタック項目は その項目に定義されている例外処理プログラムのリストと 関連しています (呼び出しスタックについて詳しくは、呼び出しスタック を参照してください)。

図 128 は、OPM プログラムがいくつかのモジュール、したがっていくつかのプロシージャーから構成される ILE プログラムを呼び出す、呼び出しスタックを示します。後に続く説明では、 この図を参照してください。

一般に、例外が起こった時には、呼び出しスタック項目に関連した処理プログラム が例外を処理できるようになります。 例外がリスト上のどの処理プログラムによっても 処理されなかった場合には、例外は未処理と見なされ、その点で、 未処理例外について次のようなデフォルトの処置が取られます。

  1. 例外が機能チェックである場合には、その呼び出しスタック項目がスタック から取り除かれます。
  2. 例外が前の呼び出しスタック項目に移されます (パーコレートされます)。
  3. この呼び出しスタック項目で例外処理が再開されます。

前の呼び出しスタック項目で例外を処理できるようにする処置をパーコレーションといいます。 パーコレーションは、例外が処理されるか、あるいは制御境界に達するまで続 けられます。制御境界は、直前の呼び出しスタック項目が別の活動化グループであ るか、あるいは OPM プログラムである呼び出しスタック項目です。 図 128 では、プロシージャー P1 が制御境界です。

図 128. 呼び出しスタックおよび例外メッセージのパーコレーション

OPM では、例外メッセージは呼び出しスタック上で活動状態の プログラム に関連しています。 例外が関連の例外処理プログラムによって処理されなかった場合には、例外を 受け取った同じ呼び出しスタック項目に機能チェックが送られます。 例外が処理不能のままである場合には、項目が除去され、機能チェックが パーコレートされます。 例外が処理されるまで、この処理が反復されます。

ILE では、例外メッセージは、呼び出しスタックで活動状態のプロシージャー と関連します。例外がパーコレートされる時には、例外は機能チェックに変換 されません。 各呼び出しスタック項目は、制御境界に達するまで元の例外を処理できるように なります。 制御境界に達して初めて、例外は機能チェックに変換され、その時点から例外 を受け取ったプロシージャーから例外処理がやり直されます。 この時、各呼び出しスタック項目が機能チェックを処理できるようになります。 制御境界に達し、例外がまだ未処理である場合には、一般障害例外メッセージ CEE9901 が制御境界でプロシージャーの呼び出し元に送られます。さらに、メッセージを処理しなかった呼び出しスタック項目はすべて除去されま す。