[seasar-s2dao-dev:8] ML-Seasar-user:4709 について{ExceptionのMessage}

kubo jazzflute @ mbn.nifty.com
2006年 9月 27日 (水) 12:10:14 JST


久保です。

ML-Seasar-user:4709について

ColumnNotFoundRuntimeException 発生時に、発生原因となったMethodの名称
を付加して欲しい、とのことですが、
自分も実際にS2Daoを使った開発をしている際に同じ様なことを思いました。

1Dao-Method作成ごとにキッチリUnitTestを書いて実行すれば、このことが
原因でデバッグに時間を掛けることも少ないかも知れませんが、
UnitTestをキッチリ書ける状態でないプロジェクトも多くあります。
(環境面やスキル、開発時間の不足などにより)
スキルの浅い開発者が多く存在するプロジェクトにおいて
今回と同様のことが実際に何回か発生してデバッグに時間を取られていました。
(.NETの場合はVSの設定などで外だしのSQLファイルをDDLに埋め込まなければ
 認識されないのでなおさらヒドいです)


幾つか修正案があります。

<A>
ColumnNotFoundRuntimeExceptionは、基本BeanMetaDataImplで発生するため、

convertFullColumnName() → DaoMetaDataImplより呼び出される
getPropertyTypeByAliasName() → DaoMetaDataImplより呼び出される
getPropertyTypeByColumnName() → 結構色々なところから呼び出される

これらのMethodの引数にMethod名を渡すようにし、
そして、ColumnNotFoundRuntimeExceptionのMessageに含める。

メリット:ColumnNotFoundRuntimeExceptionのMessageに含められる
デメリット:修正がちょっと大変だし汚い。Method名を取得できない
            ところからの呼び出しはどうするかなどの課題あり

<B>
DaoMetaDataImplの setupMethod() にてColumnNotFoundRuntimeException
を catch して、warnレベルでMethod名を含んだMessageをログ出力する。
(S2Dao-1.1だとDaoMetaDataFactoryImpl)

メリット:修正は楽(Aに比べて)。必要な部分だけの修正となる。
デメリット:ColumnNotFoundRuntimeExceptionのMessageには含まれないので
            理想形ではない。

<C>
DaoMetaDataImplの setupMethod() にてColumnNotFoundRuntimeException
を catch して、MethodSetupFailureRuntimeExceptionみたいな感じの
ラップ例外にMethod名を付与してThrowする。(名前は暫定です)
(S2Dao-1.1だとDaoMetaDataFactoryImpl)

メリット:修正は楽(Aに比べて)。必要な部分だけの修正となる。
          ExceptionのMessageとしてMethod名を出力することができる。
デメリット:S2Daoがthrowする例外の仕様が変わる。
            →ColumnNotFoundRuntimeExceptionを継承すれば良いか!?

<D>
その他の方法...


自分的には「C」が良いかと思うのですが、throwする例外の種類が
変わるのが許容されるかどうかがちょっと判断できません。

どうでしょうか?



-- 
kubo <jazzflute @ mbn.nifty.com>




seasar-s2dao-dev メーリングリストの案内