[Seasar-user:14893] Re: S2JTA + S2Hibernate で、ConnectionPoolImpl からのコネクション取得に失敗することがある
YOKOTA Takehiko
[E-MAIL ADDRESS DELETED]
2008年 7月 2日 (水) 12:48:10 JST
横田です。
この件についてですが、まとめると
■問題
・コネクションプールの maxPoolSize がスレッドより少ない状況で、
コネクション取得時に例外(トランザクションのネスト)が発生する
■再現環境
○S2.4.9〜S2.4.25
・S2JTA+S2Hibernate →発生する
・S2JDBC →発生する可能性がある
・S2Dao →発生しない
○〜S2.4.8、S2.4.26-SNAPSHOT〜
・発生しない
ということでよろしいでしょうか。
回答よろしくお願いします。
Koichi Kobayashi さんは書きました:
> 小林 (koichik) です.
>
> Date: Tue, 01 Jul 2008 15:06:05 +0900
> From: Noriyuki Mizutani <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:14879] Re: S2JTA + S2Hibernate で、ConnectionPoolImpl からのコネクション取得に失敗することがある
>
>> 2.4.25 のログを整形したものを添付します。
>> (2つのスレッドが絡んで非常に見づらいため、エクセルで
>> 色付けしました)
>
> ありがとうございました.原因判明しました.
>
> 現在の S2DBCP はトランザクションの終了時に
> コネクションをクローズしてプールに戻しています.
> また,Hibernate もコネクションをクローズします.
> そのため,同じコネクションに対してクローズが
> 2 回行われます.
>
> コネクションプールの maxPoolSize がスレッドより
> 少ないと,S2DBCP がコネクションをプールに戻すと
> 同時に別スレッドがそのコネクションをプールから
> 取り出して使用します.
> その後 Hibernate がコネクションをクローズすると,
> そのコネクションは既に別スレッドで使われているため,
> 今回の現象になってしまいます.
>
> この問題は S2JDBC でも発生する可能性があります.
> S2Dao では発生しません.
>
> 対応するには S2DBCP に大きく手を加えることになるため,
> rc を出すなどリリースまで時間がかかりそうなので,
> 現時点でたまっている修正を 2.4.26 としてリリースした後,
> 2.4.27 での対応にしたいと思います.
>
> SNAPSHOT は早めに出すので,それまでは maxPoolSize を
> 増やして回避していただけないでしょうか.
> よろしくお願いします.
>
>
--
YOKOTA Takehiko
[E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内