BYOT (使用自己的交易)
COM+ 的 BYOT 功能可讓 COM+ 元件將已經存在的 Microsoft 分散式交易協調器 (DTC) 或交易 Internet 通訊協定 (TIP) 交易設定為新元件內容的交易屬性。這麼做可讓 COM+ 元件和存留期 (Lifetime) 是由交易處理監視器、物件交易服務或資料庫管理系統控制的交易建立關聯。BYOT 也可以用來整合由 TIP 協調的交易。
注意 撰寫商務元件時慣用的程式撰寫模型為自動交易,而非 BYOT 交易。使用 BYOT 交易時必須非常小心。在某些情況下,它們可能會造成交易橫跨多個同步處理領域 (也就是說允許交易平行處理)。
BYOT 類別公開 (Expose) CreateWithTransaction 和 CreateWithTipTransaction 這兩個方法。下列範例會說明如何建立使用其他物件交易的物件。
BYOT 示範
Imports System
Imports System.Reflection
Imports System.EnterpriseServices
<assembly: AssemblyKeyFile("BYOTDemo.snk")>
Public Class Base
Inherits ServicedComponent
Public Readonly Property Transaction() as Object
Get
Return ContextUtil.Transaction
End Get
End Property
End Class
<Transaction()> Public Class CTransaction1
Inherits Base
' Insert your transaction logic here.
End Class
<Transaction()> Public Class CTransaction2
Inherits Base
' Insert your transaction logic here.
End Class
Class BYOTDemonstration
Public Shared Sub Main()
' Create a transactional object, and then get its
' transaction.
Dim tx1 as New CTransaction1
Console.WriteLine("Created transaction1.")
Dim tx as Object = tx1.Transaction
Console.WriteLine("Got the transaction of transaction1.")
Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
Console.WriteLine("Created transaction2 with the _
transaction of transaction1.")
End Sub
End Class
[C#]
using System;
using System.Reflection;
using System.EnterpriseServices;
[assembly: AssemblyKeyFileAttribute("byotdemo.snk")]
public class Base : ServicedComponent
{
public Object Transaction
{
get { return ContextUtil.Transaction; }
}
}
[Transaction]
public class CTransaction1 : Base
{
// Insert your transaction logic here.
}
[Transaction]
public class CTransaction2 : Base
{
// Insert your transaction logic here.
}
class BYOTDemonstration
{
static void Main()
{
/* Create a transactional object, and then get its
transaction. */
CTransaction1 tx1 = new CTransaction1();
Console.WriteLine("Created transaction1.");
Object tx = tx1.Transaction;
Console.WriteLine("Got the transaction of transaction1.");
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
Console.WriteLine("Created transaction2 using the transaction of transaction1.");
}
}
Makefile.bat
您可以依照下列方式編譯範例:
sn k BYOTDemo.snk
vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
[C#]
sn k BYOTDemo.snk
csc BYOTDemo.cs