방법: COM+의 BYOT(Bring Your Own Transaction) 기능 사용
코드 예제
다음 절차와 예제에서는 ServicedComponent 클래스로부터 파생된 클래스에서 COM+의 BYOT 기능을 사용하여 DTC(Distributed Transaction Coordinator)에 액세스하는 방법을 보여 줍니다. 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단계에서 정의한 클래스에서 파생되는 클래스 두 개를 만들고 두 클래스에 Transaction 특성을 설정합니다. 예를 들어, 다음 코드에서는
Base
클래스에서 파생된 두 개의 클래스,CTransaction1
및CTransaction2
를 선언하고 각각의 Transaction 특성을 설정합니다.<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단계에서 정의한 클래스 중 하나의 인스턴스를 만듭니다. 예를 들어, 다음 코드에서는
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단계에서 정의한 두 번째 클래스의 인스턴스를 만듭니다. 예를 들어, 다음 코드에서는 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.