[Seasar-user:14900] Re: S2JTA + S2Hibernate で、ConnectionPoolImpl からのコネクション取得に失敗することがある

YOKOTA Takehiko [E-MAIL ADDRESS DELETED]
2008年 7月 2日 (水) 16:04:09 JST


横田です。

解説ありがとうございました!すっきりしました。


Koichi Kobayashi さんは書きました:
> 小林 (koichik) です.
> 
> Date:    Wed, 02 Jul 2008 15:42:16 +0900
> From:    YOKOTA Takehiko <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:14898] Re: S2JTA + S2Hibernate で、ConnectionPoolImpl からのコネクション取得に失敗することがある
> 
>> ところで一つ気になっているのですが、なぜS2Daoではいずれの問題も発生し
>> ないのでしょうか。参考までに教えていただけませんか?
> 
> S2Dao は SQL を発行するたびにコネクションを取得して,
> 使い終わるとすぐにクローズするため,トランザクション終了後に
> コネクションをクローズすることがありません.
> 
> トランザクション終了時はコネクションプールがコネクションを
> プールに戻すだけです.この操作は afterCompletion で行われます.
> 
> 一方 S2JDBC や S2Hibernate を使った場合は,これらがコネクションを
> コンテキスト (Hibernate は Session) に保持して,トランザクション
> 終了後 (afterCompletion 時) にクローズします.
> 通常この操作はコネクションがプールに戻される操作よりも後に
> 実行されます (Synchronization の登録順).
> 
> maxPoolSize よりもコネクションを使用するスレッドの数が多いと,
> コネクションがプールに戻された直後にブロックしていたスレッドが
> プールからコネクションを取得して使い始めます.
> 
> S2JDBC や S2Hibernate のクローズ操作が,すでに他のスレッドによって
> 使われ始めたコネクションに対して行われると,[CONTAINER-197] の
> 問題が発生します.[CONTAINER-145] も同じような状況で発生します.
> 
> 2.4.17 以前は,トランザクション終了後 (afterCompletion 時) も
> スレッドにトランザクションが割り当てられていたため,これらの
> 問題は発生しません.
> 
> 


-- 
YOKOTA Takehiko
  [E-MAIL ADDRESS DELETED]


Seasar-user メーリングリストの案内