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