方法 :COM+ の BYOT (Bring Your Own Transaction) 機能を使用する
コード例
次の手順と例では、ServicedComponent クラスから派生したクラスから、COM+ の BYOT 機能を使用して分散トランザクション コーディネータ (DTC: ServicedComponent) にアクセスする方法について説明します。System.EnterpriseServices 名前空間内から BYOT 機能を使用する方法の詳細については、「BYOT (Bring Your Own Transaction)」を参照してください。
別のオブジェクトのトランザクションを使用するオブジェクトを作成するには
ServicedComponent クラスから派生するクラスを定義し、現在の COM+ DTC トランザクション オブジェクトを返すパブリック プロパティを公開します。たとえば、次のコードでは、
Base
クラスが ServicedComponent を継承し、オブジェクトがインスタンス化された現在の COM+ DTC トランザクションの ContextUtil.Transaction オブジェクトを返すパブリック オブジェクトがあります。Imports System.EnterpriseServices Public Class Base Inherits ServicedComponent Public Readonly Property Transaction() as Object Get Return ContextUtil.Transaction End Get End Property End Class
using System.EnterpriseServices; public class Base : ServicedComponent { public Object Transaction { get { return ContextUtil.Transaction; } } }
手順 1 で定義したクラスから派生する 2 つのクラスを作成し、両方のクラスに Transaction 属性を設定します。たとえば、次のコードは、
Base
クラスから派生し、独自の Transaction 属性セットを持つ 2 つのクラスCTransaction1
およびCTransaction2
を宣言します。<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
[Transaction] public class CTransaction1 : Base { // Insert your transaction logic here. } [Transaction] public class CTransaction2 : Base { // Insert your transaction logic here. }
手順 2 で作成したクラスを使用するクライアント アプリケーションを作成して、BYOT 機能をテストします。
手順 2 で定義したクラスの 1 つのインスタンスを作成します。たとえば、次のコードでは、
CTransaction1
クラスのインスタンスを作成します。Class BYOTDemonstration Public Shared Sub Main() Dim tx1 as New CTransaction1 End Sub End Class
class BYOTDemonstration { static void Main() { CTransaction1 tx1 = new CTransaction1(); } }
手順 3.a で作成したオブジェクトから、現在の COM+ DTC トランザクションを取得します。たとえば、次のコードは、
CTransaction1
クラスのパブリック プロパティTransaction
から Transaction オブジェクトを取得します。Dim tx as Object = tx1.Transaction
Object tx = tx1.Transaction;
手順 3.b で取得した Transaction オブジェクトを使用して、手順 2 で定義した 2 番目のクラスのインスタンスを作成します。たとえば、次のコードでは、手順 3.b で取得した Transaction を使用して、
CTransaction2
クラスのインスタンスを作成します。Dim tx2 as CTransaction2 = ctype(BYOT.CreateWithTransaction(tx, _ gettype(CTransaction2)),CTransaction2)
CTransaction2 tx2 = (CTransaction2)BYOT.CreateWithTransaction(tx, typeof(CTransaction2));
強力なキーを生成して、次の例をコンパイルします。
sn –k BYOTDemo.snk vbc /r:System.EnterpriseServices.dll BYOTDemo.vb
sn –k BYOTDemo.snk
例
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
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.");
}
}
関連項目
参照
System.EnterpriseServices Namespace
概念
BYOT (Bring Your Own Transaction)
利用可能な COM+ サービスの概要
Copyright © 2007 by Microsoft Corporation.All rights reserved.