[Seasar-user:20446] Re: Re: DataSourceからのコネクション設定 と コミットについて

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2010年 12月 19日 (日) 20:51:49 JST


pianyiです。

早急な回答を頂き、真にありがとうございます。

結論から言いますと、きちんと制御できるようになりました。
ありがとうございます。

> > void begin(){
> >     Connection con = ((ConnectionWrapper) dataSource.getConnection()).getPhysicalConnection();
> >     con.setAutoCommit( false );
> > }
> 
> で取得しているコネクションで,もう一つは S2Dao が
> 取得しているコネクションです.
> これらのコネクションが別々になっているため,
> S2Dao が取得したコネクションは自動コミットモードに
> なっています.

2つのコネクションを取っていたのですね。
そりゃ無理ですよね…(汗


> トランザクション制御 (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] で説明した方法で
> 物理コネクションを取得してください.

これを元に、
begin()、commit()、rollback() には、以前どおり、UserTransaction を使用するようにしました。
rollback(String)、savepoint()、savepoint(String) には、DataSource を使用するようにしました。

上記対応により、正常動作しています。

これから、savepoint や ロールバックのテストになりますが、
手間が掛かるので、先にご報告させて頂きます。

対応方法が間違っていた場合はご指摘頂ければと思います。

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


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