[Seasar-user:421] assembleAutoBy*

B gluegent.com Masataka Kurihara kurihara
2004年 3月 3日 (水) 22:14:43 JST


栗原です。

  一人で風速あげてますが、気がついたことを最後にひとつ。

  引数のあるコンストラクタを持つコンポーネントでArgDef
をきちんと設定しないと、コンポーネントを取得する時に
ComponentDefImpl#assembleAutoByConstructor() に処理が
移りますが、ここでネストした getComponent() にて、
引数型のコンポーネントが見つからないと実行時例外の
ClassNotFoundRuntimeException です。このとき例外の出方
が予想しない場所で予想しないコンポーネント検索をしてる
ところなので、キャッチしておいて違う「引数がきちんと設
定されてない」旨を告げる例外を再生成するようにしたほう
が良いかと思います。あと #assembleAutoByProperties()。
  コンテナが String 型のコンポーネントを探し始めたとき
は仰天しました(^^;

  プラス提案です。Tapestry では例外発生時のレポート機能
が良くできていて、フレームワーク上で例外発生したときに
フレームワークが出すエラーページに、スタックトレースや
そのときのHTTPリクエスト内容や環境変数などを表示するほ
かに、例外オブジェクトのプロパティをリフレクションによ
って全部列挙して表示してくれます。これにより、例外の原
因追求をしやすくなっています。
  Seasarも例外をきちんとフレームワーク独自に定義してま
すので、それらの例外クラスに、原因追求しやすくなるよう
なプロパティを追加していてくれると便利です。すでに、S2
では丁寧なメッセージを出力するようにはなってるんですけ
どね。
  たとえば、ClassNotFoundRuntimeException なら、

public class ClassNotFoundRuntimeException
  extends SRuntimeException {

  private Class notFoundClass;

  public Class getNotFoundClass() {
    return notFoundClass;
  }

  public ClassNotFoundRuntimeException(
    ClassNotFoundException cause,
    Class notFoundClass) {
    
    super("ESSR0044", new Object[]{cause}, cause);
    this.notFoundClass = notFoundClass;
  }
}

  SQL系のものなら、そのときのSQL文とか、ソース名とか。
では、おうちに帰ります。おやすみなさい。

--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--





Seasar-user メーリングリストの案内