Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

”Open棟梁”に組み込まれた例外処理の基本方針を説明する。

例外処理の処理フロー

コラボレーション図

クラス構造と例外の伝播

シーケンス図

例外処理の処理フロー

例外の種類

概要

例外の種類の概要図

例外の型名

業務例外

業務的なエラーを通知するための例外

システム例外

環境上の問題などで発生する例外であるが、アプリケーションに於いて原因を明確にできるもの。

その他、一般的な例外

バグや環境上の問題で発生する想定外の例外(ランタイム エラー)。別途、発生原因の調査が必要。

例外の業務続行の可・不可

業務例外

システム例外

その他、一般的な例外

例外の種類と、ハンドリングの説明

項番例外の種類ハンドリングの説明
業務例外業務続行可能なエラー用の例外をスローしたり、ハンドルしたりする。

例えば、以下に列挙した、リトライ可能なエラーは、「業務例外」型を使用して例外をスローし業務を続行する。
・関連チェック エラー
・更新件数0件(タイムスタンプ アンマッチ)
・追加時のキー重複
・デッドロック
・ロック・タイムアウト
・コマンド・タイムアウト
・, etc.
システム例外業務続行不可能なエラー用の例外をスローしたり、ハンドルしたりする。

例えば、以下に列挙した、アプリケーションで検出したが、リトライ不可能 or リトライさせたくないエラーは、
「システム例外」の型を使用して例外をスローし(基本的に)業務を停止する。
・リトライ不可能な、業務的なデータ不整合などのエラー
その他、一般的な例外ランタイム エラーなど、UPで特別に検知しない例外。この例外が発生した後、
例外の振替など特別な措置を取らない限りリトライ不可能であり、(基本的に)業務を停止する。

ここでのリトライは、「UIからのリトライ」、「プログラム内でのリトライ」の両方を指すが、いずれもトランザクション・ロールバック後のリトライを指す。
(プログラム・レベルのリトライや、同一トランザクション内のリトライは、リトライ回数・間隔を調整したとしても有用になり難いので)

業務例外

業務例外

B層で発生

B層で「業務例外」をスローすると以下の処理が実行される。

P層で発生

P層で「業務例外」をスローすると以下の処理が実行される。

システム例外、その他一般的な例外

システム例外、その他の例外

B層で発生

B層で「システム例外」、「その他一般的な例外」をスローすると以下の処理が実行される。

P層で発生

P層で「システム例外」、「その他一般的な例外」をスローすると以下の処理が実行される。

例外の振替処理方式

例えば、D層でレコード追加時のキー重複エラー、コマンド タイムアウトなどが発生した場合、
これはデータ プロバイダの提供する例外、すなわち、「その他、一般的な例外」として返される。

これをB層のルートの例外処理で「業務例外」に振り替えれば、P層に正常系の戻り値として例外情報が戻るため、
これから、元の画面に戻るか、業務開始時点の画面まで戻るなどの処理を個別に実装して、
追加時のキー重複、デッドロック、ロックタイムアウト、コマンドタイムアウト.etcのリトライが可能である。

”Open棟梁”の「業務コード親クラス2」のカスタム例外処理部に

などの例外の振替処理を実装できる。

下図は、「その他、一般的な例外」 → 「業務例外」へ例外を振り替える例外処理方式である。

例外の振替処理方式

例外処理の基本方針

例外のtry ~ catch

例外のtry ~ catchは、”Open棟梁”側で処理するため、業務プログラムではtry ~ catchしない。

P層フレームワークを持たないリッチクライアント技術を使用する場合、

イベントのハンドラを併用する。

エラー メッセージの設定と表示方針

業務例外

システム例外

その他、一般的な例外


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS