ローカルトランザクション実装

現状S2.NETではCOM+を使うMS DTCを扱うアスペクトが実装されているます。
只、いつでもグローバルトランザクションが必要か…と言うと、結構微妙です。
何とかしてローカルトランザクションを実装したいなぁ…と。考える事しきり。


最大の問題は、.NET1.1だとJavaでいう所のTransactionManagerが無い事。
.NET2.0になるとまた状況は変わるんですが…。
やっぱりローカルトランザクションを扱えるアスペクトは欲しいです。ハイ。


で、ダッサイなぁ…と思いつつ、ここで1つ。
スレッドローカルにSystem.Data.IDbConnectionと、System.Data.IDbTransactionを
格納しちゃうってのは、どうかしら?
と、考えています。


で、これをやると何が問題か?RequiresNewトランザクションです。
現状のSystem.Data.IDbTransactionには、Saveメソッドが無いんですなぁ…。
何故か、System.Data.SqlClient.SqlTransactionにだけはあるんですが。
で、Saveメソッドが無いとすると、どうするかなぁ…と考えると
もうSystem.Data.IDbConnectionをRequiresNewを要求される度に、
スレッドローカルにガシガシ格納していくしか無いなぁ…と。
最悪のシナリオは、単一のスレッドで、
RequiresNewがちょっと大目に要求されるだけでサーバリソースがカツカツになってしまう事。
まぁ、接続先がSQL-Serverな時だけは、Saveメソッドで実装してあるので万事オッケー。
みたいな考え方もありますが。


もう1つの問題は、System.Data.IDbConnectionに触る際に、
S2.NETで用意したAPIを使って貰わないとキチンと動作しない…って事があります。
まぁ、こっちは、IDataSourceってクラスを用意するので、こやつをDIして使ってネ♪
って話で済むのかなぁ…とか思ってたり…。如何でしょうか?


追記。
Oracle先生もODP.NETと言うのを使えば、Saveメソッドが使える様です。

http://otn.oracle.co.jp/mp/EL/sll?p=958-102574-4-0