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