共用交易物件
要合併的交易式元件具有特殊條件。
手動招募資源
參與交易的可池化物件必須手動登記受控資源。 如果物件在不同客戶端之間保存受管理資源,當物件在指定內容中啟動時,資源管理員將無法自動加入到交易中。
物件本身必須處理偵測交易的邏輯、關閉資源管理員的自動登記,以及手動登記其保存的任何資源。 執行此動作的步驟專屬於您使用的資源管理員。 如果您需要手動登記,請參閱資源管理員的文件。
如下所述,物件可以與交易親和性一起進入集區,當與該交易相關聯的用戶端呼叫時,可以利用交易親和性將其啟動。 在分配資源之前,您應該先檢查交易關聯性。 如果物件已從該交易專屬的集區中取得,它已經在該交易中完成工作,並投入其資源。
關閉自動登記
在資源取得後,應關閉自動註冊,這通常是在物件的構造函數中完成的。 換句話說,您會先停用自動登記,然後再連線。
停用自動註冊有時可能是一個微妙的過程,特別是在多層式數據存取提供者的情況下。 自動參與有時會與連接池結合使用,例如 ODBC ,有時則不會,例如 OLE DB 。 您可能需要確保在多個層級的供應商中關閉自動登記。
實作 IObjectControl
參與交易的可集區對象必須監視其持有的資源目前狀態。 如果物件偵測到它處於不可重複使用的狀態,例如,連線不佳,則應該針對 IObjectControl::CanBePooled傳回 False。 這將導致捨棄該物件實例並使當前交易失敗。
Transaction-Specific 池
物件的集區通常是同質的,而且目前未使用的任何集區對象都適合傳回任何用戶端。 此規則的唯一例外狀況是在交易物件的情況下,物件集區已被優化。 當要求物件的用戶端具有相關聯的交易時,COM+ 會掃描集區中已與該交易相關聯的可用物件。 如果找到具有交易親和性的物件,則會傳回給用戶端;否則,會傳回來自一般集區的物件。
如此一來,會維護特殊子集區,其中包含具有特定交易親和性的物件。 當交易提交或中止時,這些物件會被返回到一般集區,不再具有交易關聯性,隨時可供任何客戶端使用。
基於這個理由,當您的元件在交易中手動登記其受控資源時,應該先檢查它們是否已登記。 如果是,就不需要登記。
相關主題
-
使用物件共用 改善效能