[seasar-dotnet:1444] Re: System.Transaction TransactionScopeの入れ子について

koyak [E-MAIL ADDRESS DELETED]
2009年 9月 2日 (水) 02:23:44 JST


清末さん

小谷です。

・ファサード、ビジネスロジックにTx.RequiredTx → ×(ロールバックされない)
・ファサードにのみTx.RequiredTx → ×
・ビジネスロジック(Tx.RequiredTx適用?)単独 → ○(ロールバックされる)

ということは
ファサードに対するトランザクションの設定が何か関係している
or
一つのトランザクションの中に
ビジネスロジックの処理を複数組み合わせると問題が起きる

あたりなのかもしれません。

>S2Dao.netで接続している場合、ご指摘のようなコネクションの取得がTransactionScopeの
>範囲外となる可能性はあるのでしょうか?

コードを見直してみましたが、恐らくないと思われます。
(S2DaoInterceptor内で呼ばれるISqlCommand#Executeの中でコネクションをOpenしているので
DBを更新しに行くときにコネクションが取得される)
自分で疑わしいと書いておきながら、申し訳ないです。


正直、思いつきで言ってしまっているレベルなのですが、
・ODP.NETの構成
http://otndnld.oracle.co.jp/document/products/oracle11g/111/windows/E06104-01/featConfig.htm
の分散トランザクション関係の設定
なども関係しているかもしれません。
(単体でうまくいっているのであればこれも期待薄ですが・・・)

分散トランザクションにこだわる必要がないのであれば、
個人的には五十嵐さんがおっしゃるように
LocalTx.RequiredTx
http://s2container.net.seasar.org/ja/tx.html#LocalTx
を使ったトランザクション管理に切り替えることをオススメしたいのですが、
(使われた実績は恐らくこちらの方が多いと思うので)
Webサービスで使用されるということなので、
要件によっては難しい事情があるでしょうか。

(五十嵐さん、フォローありがとうございます)

後は、全部載せるのは難しいかもしれませんが、
作成されたソースコードやdiconの内容を差し支えのない範囲で
お見せいただくと何かわかることがあるかもしれません。



2009年9月1日10:23 五十嵐 大士 <[E-MAIL ADDRESS DELETED]>:
>
> 小谷さん
>
> 五十嵐です。
>
>> >MLの方々へ
>> (TransactionScopeに詳しい方や
>> 同様の事例を経験なさったことがある方が
>> もしいらっしゃいましたらアドバイスお願い致します)
>
> 以前、
> Quill-1.3.11
> DBFlute-0.8.0
> DB2Express-9.5.2
> の環境でTransactionScopeを利用すると例外が発生しました。
>
> ↓こんなことしたら
>       [Test]
>       public void Insert()
>       {
>           using(TransactionScope ts = new TransactionScope())
>           {
>               Parts parts = new Parts();
>               parts.PartsId = "5";
>               parts.PartsName = "CPU";
>
>               partsBehavior.Insert(parts);
>           }
>       }
>
> ↓こんな例外でした。
> IBM.Data.DB2.DB2Exception: 0ERROR [58005] [IBM][DB2/NT] SQL0998N  トランザクションまたはヒューリスティック処理中に、エラーが発生しました。理由コード = "16"。サブコード = "2-8004D026"。  SQLSTATE=58005
> 場所 IBM.Data.DB2.DB2ConnPool.a(DB2Connection A_0, String A_1, ref a A_2, ref Object A_3)
> 場所 IBM.Data.DB2.DB2Connection.Open()
> 場所 Seasar.Framework.Util.DataSourceUtil.GetConnection(IDataSource dataSource) 場所 DataSourceUtil.cs: line 42
>
> これはDB2に固執した内容だと思いますし、ちょっと違う事象だと思いますが
> 一応報告いたします。
>
> # これがあって小谷さんにTransaction管理インタセプタでAOPするように
> # ご助言いただきました
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内