[Seasar-user:18332] Re: [S2DBCP,S2DAO] DB(Oracle側)のエラーでコネクションクローズに至った場合再取得について
尾藤 浩嗣
[E-MAIL ADDRESS DELETED]
2009年 8月 19日 (水) 18:50:15 JST
びとうです。
ご回答ありがとうございます。
Connectionのメソッドで例外がスローされた場合は、物理的なコネクションが閉じられ
るため、S2DAOから次の要求があったときは、新しいコネクション(プールされていた
ものか、新しく物理的なコネクションを取得したもの)を使うことになると理解致しま
した。
Koichi Kobayashi さんは書きました:
> 小林 (koichik) です.
>
> Subject: [Seasar-user:18304] Re: [S2DBCP,S2DAO] DB(Oracle側)のエラーでコネクションクローズに至った場合再取得について
>
>> (2) (1)のすぐ後、S2DAOを用いた別のテーブルに対するデータ取得で以下の例外が発生
>
> 実際には (2) で PreparedStatement#executeQuery() を
> 呼び出す前にその PreparedStatement を取得するため
> Connection#prepareStatement() が呼び出されたはずですが,
> そこで例外が発生してないということですね.
> それを書いたのが [Seasar-user:18268] の
>
>>> 上記のような現象は Connection#prepareStatement() で
>>> 例外が発生しなかったのではないでしょうか.
>
> です.
>
>> DEBUGレベルのログが残っていないため、論理的なコネクション、物理的なコネクションがいつ
>> 取得、閉じられたかがログから明確にならないのですが、以下の様な動作になると考えても
>> 良いでしょうか?
>>
>> ・ (1),(2)は、PreparedStatementUtil#executeQueryでの例外発生で、ここでは物理的なコネクションは
>> 閉じられない(論理的なコネクションは閉じられる)
>
> Connection ではなく Statement のメソッドがスローした
> 例外では論理・物理ともコネクションはクローズしません.
> # S2Dao が明示的に Connection#close() を呼び出すことで
> # 論理コネクションがクローズされます.
>
>> ・ (3) は、ConnectionUtil#prepareStatement での例外発生で、これによりdbcp実装は、
>> 物理的なコネクションを閉じる(実際にDBとのコネクションはクローズされており、
>> dbcpとしてもコネクションインスタンスを解放する)
>
> はい.
Seasar-user メーリングリストの案内