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