[Seasar-user:20445] Re: DataSourceからのコネクション設定 と コミットについて
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2010年 12月 19日 (日) 19:00:00 JST
小林 (koichik) です.
Date: Sun, 19 Dec 2010 18:33:32 +0900
From: [E-MAIL ADDRESS DELETED]
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:20444] DataSourceからのコネクション設定 と コミットについて
> ********ここからログ********
> 物理的なコネクションを取得しました。
> 論理的なコネクションを取得しました。tx=null // ← begin 呼出直後
> 物理的なコネクションを取得しました。
> 論理的なコネクションを取得しました。tx=null
見てのとおり,コネクションが二つ取得されています.
一つは
> void begin(){
> Connection con = ((ConnectionWrapper) dataSource.getConnection()).getPhysicalConnection();
> con.setAutoCommit( false );
> }
で取得しているコネクションで,もう一つは S2Dao が
取得しているコネクションです.
これらのコネクションが別々になっているため,
S2Dao が取得したコネクションは自動コミットモードに
なっています.
トランザクション制御 (begin, commit) は基本的に
Seasar2 の宣言的トランザクションか,それが無理でも
JTA のトランザクションを使用してください.
そうすることで,トランザクションの間は同じ
コネクションを使うことができるようになります.
その上で,
> void savePoint(){
Connection con = ((ConnectionWrapper) dataSource.getConnection()).getPhysicalConnection();
> con.savePoint();
> }
> void rollback(String name){
Connection con = ((ConnectionWrapper) dataSource.getConnection()).getPhysicalConnection();
> con.rollback(name);
> }
のように,savePoint の API を使う場合だけ,
[Seasar-user:20245] で説明した方法で
物理コネクションを取得してください.
--
<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>
<property name="twitter">"http://twitter.com/koichik"</property>
</component>
Seasar-user メーリングリストの案内