「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
”Open棟梁”に組み込まれた例外処理の基本方針を説明する。
なお、2層C/Sの例外処理の処理フローでは、「業務例外」の場合にトランザクションのロールバック & 接続切断をしない(そのまま継続)。
業務的なエラーを通知するための例外
環境上の問題などで発生する例外であるが、アプリケーションに於いて原因を明確にできるもの。
バグや環境上の問題で発生する想定外の例外(ランタイム エラー)。別途、発生原因の調査が必要。
項番 | 例外の種類 | ハンドリングの説明 |
1 | 業務例外 | 業務続行可能なエラー用の例外をスローしたり、ハンドルしたりする。 例えば、以下に列挙した、リトライ可能なエラーは、「業務例外」型を使用して例外をスローし業務を続行する。 ・関連チェック エラー ・更新件数0件(タイムスタンプ アンマッチ) ・追加時のキー重複 ・デッドロック ・ロック・タイムアウト ・コマンド・タイムアウト ・, etc. |
2 | システム例外 | 業務続行不可能なエラー用の例外をスローしたり、ハンドルしたりする。 例えば、以下に列挙した、アプリケーションで検出したが、リトライ不可能 or リトライさせたくないエラーは、 「システム例外」の型を使用して例外をスローし(基本的に)業務を停止する。 ・リトライ不可能な、業務的なデータ不整合などのエラー |
3 | その他、一般的な例外 | ランタイム エラーなど、UPで特別に検知しない例外。この例外が発生した後、 例外の振替など特別な措置を取らない限りリトライ不可能であり、(基本的に)業務を停止する。 ここでのリトライは、「UIからのリトライ」、「プログラム内でのリトライ」の両方を指すが、いずれもトランザクション・ロールバック後のリトライを指す。 (プログラム・レベルのリトライや、同一トランザクション内のリトライは、リトライ回数・間隔を調整したとしても有用になり難いので) |
B層で「業務例外」をスローすると以下の処理が実行される。
P層で「業務例外」をスローすると以下の処理が実行される。
B層で「システム例外」、「その他一般的な例外」をスローすると以下の処理が実行される。
P層で「システム例外」、「その他一般的な例外」をスローすると以下の処理が実行される。
例えば、D層でレコード追加時のキー重複エラー、コマンド タイムアウトなどが発生した場合、
これはデータ プロバイダの提供する例外、すなわち、「その他、一般的な例外」として返される。
これをB層のルートの例外処理で「業務例外」に振り替えれば、P層に正常系の戻り値として例外情報が戻るため、
これから、元の画面に戻るか、業務開始時点の画面まで戻るなどの処理を個別に実装して、
追加時のキー重複、デッドロック、ロックタイムアウト、コマンドタイムアウト.etcのリトライが可能である。
”Open棟梁”の「業務コード親クラス2」のカスタム例外処理部に
などの例外の振替処理を実装できる。
下図は、「その他、一般的な例外」 → 「業務例外」へ例外を振り替える例外処理方式である。
例外のtry ~ catchは、”Open棟梁”側で処理するため、業務プログラムではtry ~ catchしない。
P層フレームワークを持たないリッチクライアント技術を使用する場合、
イベントのハンドラを併用する。