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