dotNET和COM+中的事務(2)

來源:互聯網
上載者:User

 
首頁
新事務之一: dotNET和COM+中的事務(2)
新事務之一: dotNET和COM+中的事務

 

--------------------------------------------------------------------------------

小氣的神

2002-4-16

 

Article Type: In-Depth 

難度等級:6/9       

版本:2.32

CLR中和事務相關的屬性類

屬性類
 作用
 
AutoCompleteAttribute
 函數內自動完成聲明的事務
 
ConstructionEnabledAttribute
 添加construct 字串
 
JustInTimeActivationAttribute
 即時啟用
 
ObjectPoolingAttribute
 對象池
 
TransactionAttribute
 聲明事務
 

 

CLR中和事務有關的方法和屬性

屬性和方法
 介面和方法
 
DisableCommit
 IObjectControl::DisableCommit
 
EnableCommit
 IObjectControl::EnableCommit
 
SetAbort
 IObjectControl::SetAbort
 
SetComplete
 IObjectControl::SetComplete
 
IsInTransaction
 IObjectContextInfo::IsInTransaction
 
MyTransactionVote
 IContextState::Get/SetMyTransactionVote
 
DeactivateOnReturn
 IContextState::Get/StateDeactivateOnReturn
 
Transaction
 IObjectContextInfo::GetTransaction
 
TransactionId
 IObjectContextInfo::GetTransactionId
 
ContextId
 IObjectContextInfo::GetContextId
 

 

當然在上面的類中我們也可以不加任何的屬性控制,只是簡單從ServicedComponent繼承一個類,那麼當我們用Regsvcs向COM+註冊我們的組件成功後,COM+設定中依然有一些預設的值,或是我們使用了屬性但沒有明確的指明屬性的值。這些是由System.EnterpriseServices.RegistrationHelper來完成的,事實上Regsvcs在調用完Regasm和Tlbexp之後就調用了它完成在COM+ Catalogs的註冊。

 

下表是CLR中類編譯之後的屬性(配置和沒有配置)

屬性
 適用範圍
 沒有配置屬性時在COM+中的值
 使用屬性配置但沒有顯示指明屬性在COM+中的值
 
ApplicationActivation
 Assembly
 Library
 No default
 
ApplicationID
 Assembly
 Generated GUID
 No default
 
ApplicationName
 Assembly
 Assembly name
 No default
 
AutoComplete
 Method
 False
 True
 
ConstructionEnabled
 Class
 False
 True
 
JustInTimeActivation
 Class
 False
 True
 
MustRunInClientContext
 Class
 False
 True
 
ObjectPooling
 Class
 False
 True
 
Synchronization
 Class
 False
 SynchronizationOption.Required
 
Transaction
 Class
 False
 TransactionOption.Required

TransactionIsolationLevel.Serializable

Timeout = infinite
 

 

從上面看得出屬性編程給我們帶來的方便和簡捷的感覺,比起以前COM方式下的COM+編程方便了許多,不用太多的引用、不用考慮線程的同步、甚至登記到COM+環境中也相當容易。但只能說,如果以前你在COM下工作得不錯,現在你這CLR下也可以工作的很好或更好,COM+以及事務編程模型仍然沒有改變,從實際需要和應用中分析和構造出事務模型依然還是每個開發人員主要的任務,不過現在你可以有更多的時間和精力來應對這個問題了。

 

 

Windows XP和Windows.NET中的可配置事務隔離層(Configurable Transaction Isolation Level)

 

Windows XP 和Widnows.NET的COM+環境下允許我們指定事務隔離等級.

 

這的確是一個盼望已久的新特性,COM+ 1.0中我們只能使用預設的也是最嚴格的事務隔離等級:Serializable。在Windows XP和Windows.NET中的COM+允許我們指定組件的事務隔離等級,可以由開發人員和實際應用決定使用何種隔離等級。不是所有的RM(resource managers)都支援目前的定義的四個隔離等級,可能的一個策略是當RM不支援當前的隔離設定那麼使用一個更高的隔離等級,Serializable是最嚴格的隔離等級,同時也是最普通的一個隔離等級,那麼也就是說幾乎所有的RM都支援這個隔離等級設定(目前COM+支援的四個隔離等級也是MS SQL Server都支援和實現的也是SQL-92定義的四個)。同樣也不是所有的開發人員都明白這些選項的作用和含義。下面會給出一些通常的解釋和資訊以便在未來的開發過程中作出選擇。

 

多個使用者對資料庫操作就可能產生資料不一致的情況了,隔離等級就是說事務可以接受不一致資料的程度,是一個事務與其他事務隔離的程度。較低的隔離等級可以增加並發,但代價是降低資料的正確性。相反,較高的隔離等級可以確保資料的正確性,但可能對並發產生負面影響。我們在COM+中要求的隔離等級確定了RM使用鎖的行為。不同的隔離等級可能會帶來不同的問題,比如:

問題
 描述
 執行個體
 
髒讀

Dirty read
 也叫未提交讀或未確認讀。一個事務修改了資料庫但未提交或確認,此時另一個事務讀取這個值,並且拿去操作。
 原來小明的帳戶有1元,A負責存入,B負責劃帳,那麼A先存入20元但未提交,此時B讀取這20元,然後划去5元,A失敗復原事務,B則將15元存入資料庫,完成事務。而小明就開心壞了。
 
不可重讀

Nonrepeatable read
 也叫不一致讀或不可再讀。一個事務讀取了某個值,當它下次再讀時這個值變化了,而修改不是它主導的,顯然是其他事務操作了
 這次B學聰明了,在第一次獲得20元的資訊之後先減去自己的5元,然後沒有立即更新資料庫,又去查了一次資料庫,而原先的20現在變成了50,三秒之後B發現已經是10了,所以B很納悶:不是我負責劃帳的嗎?
 
幻影

Phantom
 是指對同一資料庫的兩次讀操作中發現出現一組新的資料。與不可重讀的區別是,不可重讀是對現有資料的修改或覆蓋,沒有增加或減少資料,幻影則是插入了先前沒有的資料或刪除了原先已有的資料。
 B有時也負責向小明報告他最新的存款情況,雖然昨天沒睡好,但是B仍然進行了統計,他發現第一次統計時A有5筆記錄自己有10筆,第二次查詢確認時發現A增加了3筆共有8筆自己少了月初的一筆成了9筆,B想自己應該休息一會再統計一次,儘管少了月初的一筆有些奇怪,但如果結果是A的總數大於自己的,那小明對他的存款還是會有信心的
 

下面的表是設定不同的隔離選項對並發發生的問題接受程度,看得出Serializable 最嚴格,三種可能的錯誤都不會發生。COM+按其順序依次認為它們從低到高隔離值從小到大,Read uncommitted最小,Serializable最大。

Isolation level
 發生髒讀
 發生不可重讀
 發生幻影
 
Read uncommitted
 Yes
 Yes
 Yes
 
Read committed
 No
 Yes
 Yes
 
Repeatable read
 No
 No
 Yes
 
Serializable
 No
 No
 No
 

 

(未完) 

--------------------------------------------------------------------------------

特別:

本文CSDN署名首發,轉載或改編請註明作者和出處。如果有問題,請發電子郵件給new2001@msn.com

以上文字和圖片涉及其他人的隱私和個人權利,所有文字和圖片只用於內部交流,不作任何新聞發表和商業用途。

 

--------------------------------------------------------------------------------
Copyright ?2005 china.udotnet.COM 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.