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