[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 メーリングリストの案内