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