ローカルトランザクション実装
現状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メソッドが使える様です。