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