[Seasar-user:19627] Re: [Teeda] DB接続障害時に指定したエラーページに遷移しない
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 4月 20日 (火) 15:30:52 JST
小林 (koichik) です.
Date: Tue, 20 Apr 2010 09:33:20 +0900
From: 木村 究道 <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19623] Re: [Teeda] DB接続障害時に指定したエラーページに遷移しない
> > スタックトレースを見せてください.
>
> 下記でよいでしょうか。
この原因となった例外が出ているはずですが,
その大元が SocketException でしょうか?
Teeda 1.0.13-sp7 で対応した [TEEDA-500] では,
HTML 出力中にブラウザからコネクションを
切断された場合に発生する例外を無視するために,
原因が SocketException の例外は無視するように
しています.
その影響で,SQLException の原因に SocketException が
含まれていると Teeda としては無視してしまいます.
以下 SocketException が原因の場合の対処について.
場当たり的ですが SQLRuntimeException を別の
例外に変換するのが手っ取り早いかと思います.
public class MyThrowableInterceptor extends ThrowsInterceptor {
public void handleThrowable(SQLRuntimeException e, MethodInvocation invocation)
throws Throwable {
logger.error("...", e);
throw new DatabaseAccessFailedRuntimeException();
}
}
変換した例外に原因となった例外を設定しないことが
ポイントです (設定すると同じように無視されます).
このインターセプタを Dao に設定することで,
問題の現象を回避することが出来ると思います.
# DaoInterceptor より先に設定する必要があります.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内