[Seasar-user:5889] [Teeda]ThrowsInterceptorでthrowした例外が初回はcatchできない(hotdeploy)

Asarima [E-MAIL ADDRESS DELETED]
2007年 1月 25日 (木) 16:17:54 JST


Asarimaです。

 Page〜Logic〜Daoという流れで処理を進めているとき、DaoでSQLException
が発生したら、独自のThrowsInterceptorでそれを掴んで、特定のランタイム
例外を投げ直すということをしています。

 具体的に言えば、SQLException中のSQLStateとErrorCodeを見て、例えば
一意制約違反だと分かれば、独自のSQLUniqueConstraintExcpetionを投げる、
ということです。

 これをPageクラスでcatchするのですが、なぜかcatchせずにエラーページ
が表示されてしまう時があり、調べて以下のことが分かりました。

 ・hotdeployの場合

  初回のみcatchできない。2回目以降はcatchできる。

 (2回目以降というのは、submit→エラー→戻る→submit→catch! という
  ことです)

 ・cooldeployの場合

  初回、2回目以降ともにcatchできる。

 つまり、hotdeployの初回だけ失敗することになります。

 このあたりの仕組みが全然理解できずにでおり、困っております。
 申し訳ありませんが、なぜこうなるのか分かれば教えてください。
 よろしくお願いいたします。



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