[Seasar-user:18268] Re: [S2DBCP,S2DAO] DB(Oracle側)のエラーでコネクションクローズに至った場合再取得について

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 8月 12日 (水) 19:30:35 JST


小林 (koichik) です.

Date:    Wed, 12 Aug 2009 18:49:40 +0900
From:    尾藤 浩嗣 <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:18265] [S2DBCP,S2DAO] DB(Oracle側)のエラーでコネクションクローズに至った場合再取得について

> S2DAOだけでなく、DBCPに関連するかもしれませんが、DBとのコネクション
> が上記の様に例外によりクローズした場合、DBCPやS2DAOは、その
> JDBC Connectionのインスタンスをこれ以上使用できないものとして
> いつかのタイミングで解放する動作をするでしょうか?

します.
S2DBCP では,例外が発生したコネクションは
即座にクローズして,プールに戻すことは
ありません.

>   SQLException I/O例外です。パイプが切断されました。
>   SQLException クローズされた接続です。
> 
> という例外が発生したのは、S2DAOを用いて(内部的にはPreparedStatement
> が使われていると認識しています)DML文を発行した結果でした。
> つまり、Connectionのメソッド呼び出しではなく、PreparedStatementの
> メソッド呼び出し時の例外に対し、S2DBCPは、Connectionをクローズする
> でしょうか?

どちらということもなく,「例外が発生したとき」です.
上記のような現象は Connection#prepareStatement() で
例外が発生しなかったのではないでしょうか.

ちなみに,DB サーバとの間にファイアウォールが
あったりしないでしょうか?
その場合,S2DBCP のアイドル時間を適切に設定しないと
ファイアウォールによってコネクションが切断されやすく
なります.

また,以下のドキュメントにある validationQuery
および validationInterval を設定すると,プールから
取得したコネクションが生きているか検証するように
なります.

http://s2container.seasar.org/2.4/ja/jdbc.html


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