50
Advanced MTS Programming Advanced MTS Programming of of Visual Basic6.0 Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Embed Size (px)

Citation preview

Page 1: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS Programming of Advanced MTS Programming of Visual Basic6.0Visual Basic6.0

Microsoft CorporationData Access TeamKeon Bok Lee

Page 2: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

AgendaAgenda

MTS 기초 Review MTS Component 디버깅 Connection Pooling MS-DTC 성능향상 방안 Q & A

Page 3: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS ReviewMTS Review개체모델과 서비스개체모델과 서비스

Page 4: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Visual Basic Visual Basic 으로 으로 MTS MTS 구성요소 만들기구성요소 만들기 Visual Basic 에서 MTS 구성요소 작성단계

: ActiveX® DLL 프로잭트 선택

Reference 에 MTS Type Library 추가 IObjectControl 인터페이스 구현 사용자 Public methods 추가 MTSTransaction 속성 설정

Page 5: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

ObjectContext InterfaceObjectContext Interface

MTS 구성요소는 ‘ GetObjectContext’ 를 호출

ObjectContext SetComplete SetAbort IsInTransaction CreateInstance SafeRef

Page 6: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

SQL Server DB1 Customer Info (Cash balance)

SQL Server DB1 Stock Info

(Equity Holdings)

MTS 환경

ComponentComponent

Method which Method which debits cash debits cash and adds to and adds to equity holdingequity holding

MTS Transaction MTS Transaction 지원지원 MTS transactions databases 자동화 또는 Client 제어 transactions

Page 7: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS Transaction ModeMTS Transaction Mode

트랜잭션 필요 항상 트랜잭션을 사용

트랜잭션 지원 트랜잭션이 있는 경우 참여 , 없는 경우

참가하지 않음 새로운 트랜잭션 사용

반드시 새로운 트랜잭션 사용 트랜잭션 없음

일반적인 COM 속성 지원

Page 8: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Public Sub BuyStock(Byval dblAmount As Double, Byval strSymbol APublic Sub BuyStock(Byval dblAmount As Double, Byval strSymbol As String)s String)

On Error Goto ErrHandlerOn Error Goto ErrHandler

RemoveFromCash dblAmountRemoveFromCash dblAmountBuyStock dblAmount, strSymbolBuyStock dblAmount, strSymbol

GetObjectContext.SetCompleteGetObjectContext.SetCompleteExit SubExit Sub

ErrHandler:ErrHandler:GetObjectContext.SetAbort()GetObjectContext.SetAbort()

End SubEnd Sub

‘‘ 자동’ 트랜잭션자동’ 트랜잭션

Page 9: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS MTS “JIT(Just-in Time Activation)”“JIT(Just-in Time Activation)”

Client 는 서버 참조상태를 유지 Server 의 resources 를 사용 Client 는 빠름

Client 는 서버의 참조를 반환 Client pays performance penalty Server releases expensive resources

Page 10: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS “Just-in Time Activation”MTS “Just-in Time Activation”

개체는 메소드가 호출되기 전에 활성화됨 비활성화가 될때 :

SetComplete, SetAbort 트랜잭션 실패 Client 가 참조를 반환할때

Page 11: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Implements ObjectControlImplements ObjectControl

Public Sub Method1()Public Sub Method1() '......'......End SubEnd Sub

Private Sub ObjectControl_Activate()Private Sub ObjectControl_Activate() ’ ’ 여기서 개체를 초기화 하는 코드나 연결등의 작업을 수행여기서 개체를 초기화 하는 코드나 연결등의 작업을 수행 Debug.Print "Activate"Debug.Print "Activate"End SubEnd Sub

Private Sub ObjectControl_Deactivate()Private Sub ObjectControl_Deactivate() ’ ’ 연결을 끓거나 개체의 연결을 끓거나 개체의 resourceresource 를 반환를 반환 Debug.Print "Deactivate"Debug.Print "Deactivate"End SubEnd Sub

Private Function ObjectControl_CanBePooled() As BooleanPrivate Function ObjectControl_CanBePooled() As Boolean ObjectControl_CanBePooled=TrueObjectControl_CanBePooled=True

End FunctionEnd Function

MTS ObjectControl MTS ObjectControl 인터페이스인터페이스

Page 12: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Set obj = New clsAccountSet obj = New clsAccount obj.BuyStock(“MSFT”,10)obj.BuyStock(“MSFT”,10) obj.SellStock(“INTC”, 10)obj.SellStock(“INTC”, 10)Set obj = NothingSet obj = Nothing

Class_Initialize()Class_Initialize()

ObjectControl_Activate()ObjectControl_Activate()BuyStock(“MSFT”, 10)BuyStock(“MSFT”, 10)

ObjectControl_Deactivate()ObjectControl_Deactivate()

ObjectControl_Activate()ObjectControl_Activate()SellStock(“INTC”, 10)SellStock(“INTC”, 10)

ObjectControl_Deactivate()ObjectControl_Deactivate()

Class_Terminate()Class_Terminate()

Activation Activation 과과 DeactivationDeactivationSetComplete/SetAbort SetComplete/SetAbort 호출호출

Page 13: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Private m_strSymbol As StringPrivate m_strSymbol As StringPrivate m_dblCash As DoublePrivate m_dblCash As Double

Public Property Let Symbol(ByVal strNewValue As String)Public Property Let Symbol(ByVal strNewValue As String) m_strSymbol = strNewValuem_strSymbol = strNewValue GetObjectContext.DisableCommitGetObjectContext.DisableCommitEnd PropertyEnd Property

Public Property Let Cash(ByVal dblCash As Double)Public Property Let Cash(ByVal dblCash As Double) m_dblCash = dblCashm_dblCash = dblCash GetObjectContext.DisableCommitGetObjectContext.DisableCommitEnd PropertyEnd Property

Deactivation Deactivation 방지방지 DisableCommit/EnableCommit 사용 SetAbort, SetComplete 을 사용하지

않는다

Page 14: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Set obj = New clsQuote

obj.GetQuote(“MSFT”)

obj.GetQuote(“INTC”)

Set obj = Nothing

Class_Initialize()Class_Initialize()

ObjectControl_Activate()ObjectControl_Activate()GetQuote(“MSFT”)GetQuote(“MSFT”)GetQuote(“INTC”)GetQuote(“INTC”)

ObjectControl_Deactivate()ObjectControl_Deactivate()

Class_Terminate()Class_Terminate()

Activation And DeactivationActivation And DeactivationNo SetComplete/SetAbort CaseNo SetComplete/SetAbort Case

Page 15: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

SQL Server

MTS EnvironmentMTS Environment

Package1 Identity = Administrator

Component 1

Component 2

Package2 Identity = User Component 1

Component 2

Updates Updates databasedatabase

Read-only Read-only restricted accessrestricted access

“Role” 2Users

Admins

“Role” 1Admins

MTS “Declarative” MTS “Declarative” SecuritySecurity

Each “package” runs under different “identities” “Roles” restrict client access

Page 16: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Security object

GetDirectCallerName

GetDirectCreatorName

GetOriginalCallerName

GetOriginalCreatorName

Context Object Base Process A

Server Process B

Server Process C

Original Original Creator/Caller =ACreator/Caller =A

Direct Direct Creator/Caller=BCreator/Caller=B

MTS “Programmatic” MTS “Programmatic” SecuritySecurity Exposes “Identity” of Caller/Creator

Page 17: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Dim objSecurity As SecurityProperty

Set objSecurity = GetObjectContext.SecurityProperty

If (GetObjectContext.IsSecurityEnabled) Then

If (Instr(1, objSecurity.GetDirectCallerName, “Brian”)) Then

Call AdminRoutine

End If

End If

MTS “MTS “ 프로그램적 ” 보안기술프로그램적 ” 보안기술

Page 18: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS MTS 구성요소 디버깅구성요소 디버깅

Page 19: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Visual Basic 6.0Visual Basic 6.0 으로 으로 MTS MTS 구성요소 디버깅하기구성요소 디버깅하기

Visual Basic 6.0 에서 MTS 구성요소를 디버깅하긴 위한 조건 Windows NT® 4.0 SP4 MTSTransaction 속성 설정

Page 20: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Visual Basic Debugging Visual Basic Debugging 데모데모 간단한 Recordset Query SetAbort 와 자동 Rollback

Page 21: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

디버깅 방법디버깅 방법 // 절차절차

initialize 또는 terminate 의 코드는 피하라 ! 구성요소는 ‘라이브러리’형식으로 선택

Security 는 지원되지 않음 단일 Thread 실행

Page 22: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

VC++ VC++ 디버거를 이용한 방법디버거를 이용한 방법

VB 컴파일시에 심볼파일을 선택 소스파일을 열고 중단점을 선택 Launching Application 에 - mtx.exe 를

선택 명령줄에 패캐지의 ID 를 입력 : /p:{00000000-0000- 0000-0000- 00000

0000000} or /p:<Package name>

Page 23: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

VC VC 디버거를 사용하는 이유디버거를 사용하는 이유

Thread 정보를 볼 수 있다 . 관련된 프로세스를 디버깅가능

server package InetInfo process

Page 24: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Object Pooling Object Pooling 과 과 Advanced TopicAdvanced Topic

Page 25: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

MTS Environment

Object Available

Object Available

Object In Use

Object In Use

ExistingExisting

RequestsRequests

NewNew

RequestRequest

MTS Object Pooling MTS Object Pooling 과 과 RecyclingRecycling

Thread Pool Manager ODBC Resource Dispenser 사용 Object Instance Broker

Page 26: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

MS-DTC(Distributed Transaction Coordinator)

MTS 의 트랜잭션을 다루는 서비스 . MTS DB 연결은 자동적으로 DTC 목록에 추가 지역 또는 원격 인스턴스 사용가능 트랜잭션 작업을 사용하기 위해서는 반드시 DT

C 가 실행

Page 27: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

MTS 프로세스 제어 각 MTS 패키지는 프로세스를 나타낸다 모든 구성요소는 패키지안에 설치되며 같은

프로세스로 실핸된다 . 프로세스는 첫번째 클라이언트의 요청에

의하여 실행 서버 패키지는 반드시 하나의 유효한 id 를

가진다 . 만일 ID 가 유효하지 않다면 패키지는 실행되지 않는다 . 암호가 변경되거나 로그온한 사용자가 없는 경우

Page 28: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

Failfasting 오류가 발생한 경우 MTS 구성요소는

종료되며 Log 를 남긴다 . Access Violations Unhandled exceptions Inconsistent internal states

대부분의 경우 구성요소의 내부적인 문제가 원인이 된다 .

MTS 프로세스들을 안정적이고 올바르게 작동하도록 유지

Page 29: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

MTS 이벤트로그 MTS 로그는 오류를 감지한 소스를 지정 스택 트래이스의 System 오류 (AV, page fault

s) 의 결과기록 . 일반 MTS 이벤트 :

“An object call caused an exception” “Failed on creation from ObjectContext” Line d:\...\resdisp\mtxdm\cholder.cpp indicates a

n unstable ODBC driver

Page 30: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

MTS 이벤트로그의 예제

Page 31: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

보안 DCOM Security

DComCnfg Impersonation NTLM

MTS security 역할에 따른 클라이언트의 사용권한 부여 서버패키지 ID 를 이용한 인증

Page 32: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced MTS TopicsAdvanced MTS Topics

보안 ( 계속 ) Database 보안

MTS 어플리케이션 모델에서는 보안은 반드시 DB가 아닌 미들티어에서 다루어져야 한다 .

모든 연결은 고유한 보안 속성에서 이루어진다 . DB 인 경우에는 , 같은 User/Password 가 모든

연결에 사용되어져야 한다 .

Page 33: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced TopicsAdvanced Topics

IIS integration: ASP 는 MTS context 에서 실행 .

ASP 페이지에서 발생한 문제 (corruption 또는 AV) 는 MTS 에 의해서 관리

IIS 는 기본적으로 MTS 개체와 IStream callback 을 통하여 마샬링 .

MTS 개체생성시 Server.CreateObject 는 context 를 이용하여 IIS 의 보안과 트랜잭션에 관한 정보를 관리한다 . CreateObject

Page 34: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced TopicsAdvanced Topics

ObjectContext.CreateInstance 는 MTS 개체를 위한 context 를 생성 . CreateObject (CoCreateInstance)

일반 구성요소에서는 차이가 없다 . COM+

JIT 의 구현 No state No VB events 또는 connection points

Page 35: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Advanced TopicsAdvanced Topics

Application 디자인 Network round trip 을 최소화 (no propertie

s, 적은 method 호출 ) 클라이언트 커서를 이용하여 DB 와의 netwo

rk traffic 을 최소화 State (Client, DB, SPM), no objects in SPM connection 에 Callback 과 VB 이벤트를

포함하여 사용 보안문제 성능문제

Page 36: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Distributed TransactionDistributed TransactionCo-ordinatorCo-ordinator

Page 37: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

ResourceManager

TransactionManager

Application

OLE Tx

OLE Tx RM API

E.g. MS DTC

E.g. ODBC

E.g. MS SQL Server

OLE TransactionsOLE Transactions

Interface’s used to communicate between application, transaction manager and resource manager

A group of COM interfaces

Page 38: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

OLE TransactionsOLE Transactions

Six Objects MS DTC proxy core object, Transaction

object, Transaction Options, Export object, Enlistment object, Voter object, Resource Manager object

Thirteen Interfaces

Page 39: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

X/Open Distributed Transaction X/Open Distributed Transaction Processing StandardProcessing Standard

X/Open DTP TX - App to Transaction Mgr

X/Open DTP XA - RM to Transaction Mgr

ResourceManager

TransactionManager

Application

X/Open DTP XA

X/Open DTP TX RM API

E.g. MS DTC

E.g. ODBC

E.g. MS SQL Server

Page 40: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

XA InteroperabilityXA Interoperability

XA Mapper

ResourceManager

MS DTC

Application

OLE Tx

RM API

E.g. MS DTC

E.g. ODBC

XA TM

XA Mapper

X/O DTP XA

E.g. Encina, TopEnd, Tuxedo

X/ODTP TX

E.g. MS SQL Server

Page 41: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Distributed Transactions with Distributed Transactions with MS DTCMS DTC

Machine

Process

MS DTCResourceManager OLE Tx

DTC Proxy

Application

RM APIE.g. ODBC

RM ProxyDTC Proxy

RM ProxyOLE Tx

RM APIE.g. ODBC

OLE TxOLE Tx

MS DTC OLE Tx

ResourceManager

E.g. MS SQL Server

DTC Proxy

RM ‘Pipe’E.g. TDS

E.g. MS SQL Server

Page 42: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Distributed Transactions with Distributed Transactions with MTSMTS

Machine

Process

App cpts

RM APIE.g. ODBC

DTC Proxy RM Proxy

MTSExecutive

DispenserManager

ResourceDispenserOLE Tx

MS DTCResourceManager

E.g. MS SQL Server

DTC ProxyOLE Tx

MTX.exe

ObjectContext

Page 43: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Server Component Options Server Component Options In Visual Basic 6.0In Visual Basic 6.0

Page 44: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

서버구성요소로 사용하기 위한 중요한 서버구성요소로 사용하기 위한 중요한 Visual BasicVisual Basic 기능기능

무인실행 (Unattended Execution) 메모리에 보유 (Retained in Memory) 아파트먼트 (Apartment-thread) 이진호환 (Binary Compatibility)

Page 45: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

인터페이스의 중앙화인터페이스의 중앙화 인터페이스 GUIDs 인터페이스정의 와

구현 ‘ 순환참조’문제를 방지

Central AbstractCentral AbstractTLBTLB

Interface I1Interface I1Interface I2Interface I2Interface I3Interface I3

IDL IDL ScriptScript

Class C2Class C2

Implements Implements

Abstract.I2Abstract.I2

DLL2

Class C1Class C1

Implements Implements

Abstract.I1Abstract.I1

DLL1

Class C3Class C3

Implements Implements

Abstract.I3Abstract.I3

DLL3DLL3

Server Components

Page 46: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Performance ImprovementsPerformance Improvements

개체의 locking 문제 메모리에 보유

“Retained in Memorry”

Page 47: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

ThreadPoolMaxThreadPoolMax

NT SP4 ThreadPoolMax (REG_DWORD) HKEY_LOCAL_MACHINE/Software/

Microsoft/Transaction Server/Package/{your package GUID}

0 to 0x7FFFFFFF

Page 48: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Check ListCheck List 하나의 Package 안에는 동일한 Thread Mo

del 을 사용 . 이진호환모드 (binary Compatibility) Transaction Option 의 설정의 정확성 Project ADO Library 참조시 MDAC versio

n ' 무인실행 ' 과 ' 메모리에 보유’ MTS component 를 개발시에는 Instancin

g option 을 Global Multi-Use 를 제외

Page 49: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

References And Web References And Web SitesSites

Homer A., Sussman D., Professional MTS MSMQ with VB and ASP, Wrox Press

Building and Debugging Components in Visual Basic 6.0, Visual Basic Readme, VB6.0

HOWTO: Debug a Native Code Visual Basic Component In VC++, Q166275, Microsoft Technical Support Articles

http://www.microsoft.com/com http://msdn.microsoft.com/developer http://www.advisor.co.kr

Page 50: Advanced MTS Programming of Visual Basic6.0 Microsoft Corporation Data Access Team Keon Bok Lee

Q & AQ & A