[Seasar-user:18491] Re: DataSource取得時のトランザクション動作について

duran [E-MAIL ADDRESS DELETED]
2009年 9月 14日 (月) 10:36:47 JST


小林さん

ご回答ありがとうございます。
単純にコネクションが足りて無かったようです。

実際にはmaxPoolSizeは2で設定されていたようなのですが、
どこかで使用してるようなので、もう一度見直したいと思います。

ありがとうございました。

> 小林 (koichik) です.
> 
> Date:    Fri, 11 Sep 2009 14:37:59 +0900
> From:    duran <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:18484] DataSource取得時のトランザクション動作について
> 
>> UpdateLogicImpl#update で、requiresNewTxをかけているのですが、
>> このメソッドが呼ばれた瞬間に、処理が止まります。
>> ※ログに「トランザクションが開始されました」と出た直後になります。
> 
> 「呼ばれた瞬間」というのは考えにくいです.
> 実際には update() の中に入って,
> 
>>   @Aspect("j2ee.requiresNewTx")
>>   public void update(){
>>     //DB更新処理
>>    hogeDao.insert(hoge);
> 
> この hogeDao.insert() の中で止まっているのでは?
> デバッガでここにブレークポイントを付けて確認
> してみてください.
> 
> hogeDao.insert() の中で止まるのであれば,
> コネクションプールに利用可能なコネクションが
> 存在していないケースが考えられます.
> 
> 例えば maxPoolSize が 1 になっている場合,
> 利用可能な唯一のコネクションが外側の
> トランザクションで利用され,内側の
> requiresNew なトランザクションで利用できる
> コネクションがないため,デッドロックして
> しまいます.
> 
> このような状況になるのであれば,コネクション
> プールの maxPoolSize を増やしてください.
> 
> 



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