2008年3月1日土曜日

[.NET]自動トランザクション(ServicedComponent)

.NET Frameworkでは自動トランザクションとよばれる機構があります。まぁ簡単に言うと2フェーズコミットを実現する分散トランザクション機構です。
私の知る限り、.NET Framework3.5までの、実装方法は2種類の方法があります。

  1. System.Transactions.TransactionScopeを使う方法(新しい2.0系)
  2. System.EnterpriseServices.ServicedComponentを継承する方法(古い1.1系)


以前「1.」を.NET2.0+ODP.NETで利用したことがありました。そのときはC#との相性のよさと、使い勝手のよさに感動しました。しかし、今回、.NET1.1系の仕事であったため「2.」を使った自動トランザクションを調査しました。

「1.」では配備や設計ことなどあまり意識する必要はありませんでしたが、「2.」はcom+として動作する仕様であることから、配備(com+への登録作業)など結構メンドウでしす。しかし、自力トランザクションで何とかしようと思う場合を考えると、安全に実装できます。また慣れてしまえば、パターン化できます。今回複数の開発ベンダで作業するため、おのおのAPIを出し合ったりします。そういう場合このような技術が必須ですね

「2.」の方法では、クラスのアトリビュートに、トランザクション及びIsolation Levelの設定を行います。そのため、クラスの属性になるため設計に注意が必要です。同じクラス内であるメソッドはREAD UNCOMMITTEDあるメソッドではSERIALIZABLEな場合など、どうせならIsolation Levelの設定でやったほうがカッコいいんですけど面倒なんですよね。まぁSQLのヒントでも対応可能なんですけどね。

0 件のコメント: