# 共通ドキュメント

## エラー処理

### 概要

- 概念
- 設定
- エラーハンドラーの取得
- ログ出力
- 実装済みのErrorHandler(C#)
- 新しいエラーハンドラーの実装

### 概念

- 処理したい例外に対応するErrorHandler実装クラスを作成する。
- 例外が発生したらErrorHandler実装クラスのインスタンスを取得し、ログを出力する。
- 出力内容は 例外メッセージ、スタックトレース。他実装クラスにより色々
- 使用中のリソースは破棄する。
- 必要なら例外メッセージを表示する。

### 設定

例外クラスとハンドラークラスのマッピングを定義する。

    <configuration>
    <configSections>
        <!-- エラーハンドラー設定セクション定義 -->
        <section name="errorHandler" type="CFW.Config.ErrorHandlerConfigSettingSection,CFW" allowLocation="true" allowDefinition="Everywhere"/>
    </configSections>
    ...(snip)
    <!-- エラーハンドラー設定セクション -->
    <errorHandler>
        <!-- SQLサーバーの例外処理
        CFW.ErrorHandler.SqlExceptionHandler が処理する -->
        <add exceptionName="System.Data.SqlClient.SqlException"
            handler="CFW.ErrorHandler.SqlExceptionHandler,CFW" />
        <!-- テスト用
        CFW.Common.Test.ErrorHandler.NullPointerExceptionHandlerが処理する
        -->
        <add exceptionName="CFW.Common.Test.ErrorHandler.NullPointerException"
            handler="CFW.Common.Test.ErrorHandler.NullPointerExceptionHandler,CFW.Common.Test" />
      </errorHandler>
    ...(snip)
    </configuration>

マッピングが定義されていない場合、ErrorHandlerFactoryが既定の検索順序で検索して適当なハンドラークラスを見つける。検索順序は

- 元の例外クラス名+"Handler"の名前を持つクラス
- "CFW.ErrorHandler." + 元の例外クラスの基本名 +"Handler"の名前を持つクラス
- "CFW.ErrorHandler.DefaultErrorHandler"

### エラーハンドラーの取得

CFW.ErrorHandler.ErrorHandlerFactory#GetInstanceを使用してCFW.ErrorHandler.ErrorHandler実装オブジェクトを取得。

#### 例(C#)

    ErrorHandler handler = ErrorHandlerFactory.GetInstance(ex);

### ログ出力

ErrorHandler実装オブジェクトにログを出力させる

#### 例(C#)

    try{
        // ...何か処理を行う
    }
    catch(Exception ex)
    {
        CFW.ErrorHandler.ErrorHandler handler = CFW.ErrorHandler.ErrorHandler.GetInstance(ex);
        handler.WriteLog();
    }
    finally{
        // ...何か後始末を行う
    }

### 実装済みのErrorHandler(C#)

現在実装済みのErrorHandler(C#)は以下のとおり

CFW.ErrorHandler.DefaultErrorHandler | Exceptin.Message、StackTraceをログに出力する
CFW.ErrorHandler.SqlExceptionHandler | SQL例外のメッセージを出力する。内部エラーが存在する場合はすべてのエラーについて同様の処理を行う。
CFW.ErrorHandler.InvalidCastExceptionHandler | キャストエラー用(元はサンプルとして実装。)
CFW.ErrorHandler.FormatExceptionHandler | 書式化エラー用(元はサンプルとして実装。)

### 新しいハンドラーの実装

...