BYOT (Bring Your Own Transaction)
COM+ の BYOT 機能を使用すると、既存の Microsoft 分散トランザクション コーディネータ (DTC: Distributed Transacton Coordinator) トランザクションまたはトランザクション インターネット プロトコル (TIP: Transaction Internet Protocol) トランザクションを、新しいコンポーネントのコンテキストのトランザクション プロパティとして設定できます。これにより、COM+ コンポーネントを、トランザクション処理モニタ、オブジェクト トランザクション サービス、またはデータベース管理システムによって有効期間が制御されるトランザクションに関連付けることができます。BYOT は、TIP によって調整されるトランザクションを統合する場合にも便利です。
メモ ビジネス コンポーネントを記述するのに適したプログラミング モデルは、BYOT トランザクションではなく、自動トランザクションです。BYOT トランザクションを使用するには注意が必要です。条件によっては、BYOT トランザクションが複数の同期ドメインにまたがる (つまり、トランザクションとの平行処理ができる) 場合があります。
BYOT クラスは、CreateWithTransaction と CreateWithTipTransaction の 2 つのメソッドを公開します。他のオブジェクトからの BYOT トランザクションを使用するオブジェクトを作成する方法を次の例で示します。
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