TransactionScopeの動作
Requiredって、TransactionScope切ったら、その中で、Completeしないと、 外側までロールバックされるって、どういう事なのか・・・
古くはMTS、System.EnterpriseServicesと同様の総投票製で最終的なトランザクションの結果が確定するようですね。
簡単にいうとアビエントトランザクション(ルートトランザクション)とその配下のScopeからのCompleteはチェックビットを有効にしているだけで、実際のトランザクションが確定されるタイミングはアビエントトランザクションのDispose時に
- 全てのconsistencyビットがtrueならコミット
- 一つでもconsistencyビットがfalseならアボート
って感じの仕様になっています。
System.Transactions との動作-明示的プログラミング モデル
辺りに解説があります。
■
[.NET]
TransactionScopeを使ったEscalation
もし、.NET2.0でEscalationとやらが、僕の理解している様に動作するなら、ぶら下がってるリソースが、 単一なら、1フェーズコミット、複数あるなら2フェーズコミットになる筈です。
.NET2.0で新しく追加されたSystem.Transactions 名前空間を使ったトランザクション管理ですが、Escalationに関しては
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center
http://www.microsoft.com/japan/msdn/net/general/introsystemtransact.asp#introsystemtran_topic4
にある記述をみるとTransactionScopeを使えば必要があれば自動的にLTMからOleTxへ切り替わり、プログラマは対象リソースの多重度を意識しないで単一のプログラミングモデルを使用できる機能をなっています。
しかし、書籍案内|技術評論社を見た限りでは、現在のところLTMからOleTxへの自動昇格に対応しているのはリソースマネージャがIPromotableSinglePhaseNotificationの実装を提供しているSQLServer2005と2.0のデータプロバイダの組み合わせのみでその場合でも
行のバージョン管理に基づく分離レベルの使用 | Microsoft Docs
トランザクション分離レベルの調整 | Microsoft Docs
IsolationLevel Enum (System.Transactions) | Microsoft Docs
あたりを見るとSnapshot分離レベルの昇格はサポートされていないようだ。
自動昇格をサポートしないリソースマネージャとTransactionScopeを組み合わせた場合はLTMは使われず常にOleTxが利用されるため1.x環境でSystem.EnterpriseServicesを使った場合と同様のオーバーヘッドが掛かるって事かな?
今の所、S2Container.NETで全面的にTransactionScopeを活用した対応を行ってもメリットが引き出せる環境は限定的になるので、とりあえずMSDTCが動作するように対応するだけで良い気もする。
WPF? Flex2? Laszlo?うーんどれに投資するべきか
マイクロソフトの「WPF/E」は「Flashキラー」になるか - CNET Japan
WPFを利用すれば、グラフィック関連のハードウェアの機能をあますところなく引き出せるほか、Vistaに組み込まれた通信やワークフロー関連の機能も活用できるというメリットが得られるとO'Kellyはいう。
ん?http://www.microsoft.com/japan/msdn/windowsvista/general/WWFGetStart.asp
ってWPFに依存してるってこと?
「Microsoftでは、Vistaの機能をすべて使ってできることの魅力が、Vistaではできないことへの不満を大幅に上回ると開発者が気づくことに、ひそかに賭けている」
これは嫌だな..
■
[Memo]