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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 9月 12日 (土) 00:00:21 JST


小林 (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 を増やしてください.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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