MTS Object model and services

Download Report

Transcript MTS Object model and services

Advanced MTS Programming of
Visual Basic6.0
Microsoft Corporation
Data Access Team
Keon Bok Lee
Agenda






MTS기초 Review
MTS Component 디버깅
Connection Pooling
MS-DTC
성능향상 방안
Q&A
MTS Review
개체모델과 서비스
Visual Basic 으로 MTS
구성요소 만들기

Visual Basic에서 MTS구성요소 작성단계:

ActiveX® DLL 프로잭트 선택




Reference에 MTS Type Library추가
IObjectControl인터페이스 구현
사용자 Public methods 추가
MTSTransaction 속성 설정
ObjectContext Interface


MTS 구성요소는 ‘GetObjectContext’를
호출
ObjectContext





SetComplete
SetAbort
IsInTransaction
CreateInstance
SafeRef
MTS Transaction 지원


MTS transactions databases
자동화 또는 Client제어 transactions
MTS 환경
Component
Method which
debits cash
and adds to
equity holding
SQL Server DB1
Customer Info
(Cash balance)
SQL Server DB1
Stock Info
(Equity Holdings)
MTS Transaction Mode

트랜잭션 필요


트랜잭션 지원


트랜잭션이 있는 경우 참여,없는 경우 참가하지
않음
새로운 트랜잭션 사용


항상 트랜잭션을 사용
반드시 새로운 트랜잭션 사용
트랜잭션 없음

일반적인 COM속성 지원
‘자동’ 트랜잭션
Public Sub BuyStock(Byval dblAmount As Double, Byval strSymbol
As String)
On Error Goto ErrHandler
RemoveFromCash dblAmount
BuyStock dblAmount, strSymbol
GetObjectContext.SetComplete
Exit Sub
ErrHandler:
GetObjectContext.SetAbort()
End Sub
MTS
“JIT(Just-in Time Activation)”

Client 는 서버 참조상태를 유지



Server의 resources를 사용
Client 는 빠름
Client 는 서버의 참조를 반환


Client pays performance penalty
Server releases expensive resources
MTS “Just-in Time Activation”


개체는 메소드가 호출되기 전에 활성화됨
비활성화가 될때:



SetComplete, SetAbort
트랜잭션 실패
Client가 참조를 반환할때
MTS ObjectControl
인터페이스
Implements ObjectControl
Public Sub Method1()
'......
End Sub
Private Sub ObjectControl_Activate()
’여기서 개체를 초기화 하는 코드나 연결등의 작업을 수행
Debug.Print "Activate"
End Sub
Private Sub ObjectControl_Deactivate()
’연결을 끓거나 개체의 resource를 반환
Debug.Print "Deactivate"
End Sub
Private Function ObjectControl_CanBePooled() As Boolean
ObjectControl_CanBePooled=True
End Function
Activation 과Deactivation
SetComplete/SetAbort 호출
Class_Initialize()
Set obj = New clsAccount
obj.BuyStock(“MSFT”,10)
obj.SellStock(“INTC”, 10)
Set obj = Nothing
ObjectControl_Activate()
BuyStock(“MSFT”, 10)
ObjectControl_Deactivate()
ObjectControl_Activate()
SellStock(“INTC”, 10)
ObjectControl_Deactivate()
Class_Terminate()
Deactivation 방지


DisableCommit/EnableCommit 사용
SetAbort, SetComplete을 사용하지
않는다
Private m_strSymbol As String
Private m_dblCash As Double
Public Property Let Symbol(ByVal strNewValue As String)
m_strSymbol = strNewValue
GetObjectContext.DisableCommit
End Property
Public Property Let Cash(ByVal dblCash As Double)
m_dblCash = dblCash
GetObjectContext.DisableCommit
End Property
Activation And Deactivation
No SetComplete/SetAbort Case
Class_Initialize()
Set obj = New clsQuote
obj.GetQuote(“MSFT”)
obj.GetQuote(“INTC”)
ObjectControl_Activate()
GetQuote(“MSFT”)
GetQuote(“INTC”)
ObjectControl_Deactivate()
Set obj = Nothing
Class_Terminate()


MTS “Declarative”
Security
Each “package” runs under different “identities”
“Roles” restrict client access
MTS Environment
“Role” 1
Admins
“Role” 2
Users
Admins
Package1 Identity =
Administrator
Updates
database
Component 1
Component 2
Package2 Identity =
Component 1
User
SQL Server
Component 2
Read-only
restricted access
MTS “Programmatic”
Security

Exposes “Identity” of Caller/Creator
Context Object
Security object
Base Process
A
GetDirectCallerName
GetDirectCreatorName
GetOriginalCallerName
Server
Process B
GetOriginalCreatorName
Server
Process C
Original
Creator/Caller =A
Direct
Creator/Caller=B
MTS “프로그램적 ” 보안기술
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 구성요소 디버깅
Visual Basic 6.0으로 MTS
구성요소 디버깅하기

Visual Basic 6.0에서 MTS 구성요소를
디버깅하긴 위한 조건


Windows NT® 4.0 SP4
MTSTransaction 속성 설정
Visual Basic Debugging 데모


간단한 Recordset Query
SetAbort와 자동 Rollback
디버깅 방법/절차


initialize 또는 terminate의 코드는 피하라!
구성요소는 ‘라이브러리’형식으로 선택


Security는 지원되지 않음
단일 Thread 실행
VC++ 디버거를 이용한 방법





VB컴파일시에 심볼파일을 선택
소스파일을 열고 중단점을 선택
Launching Application에 - mtx.exe를
선택
명령줄에 패캐지의 ID를 입력 :
/p:{00000000-0000- 0000-0000000000000000} or /p:<Package name>
VC 디버거를 사용하는 이유


Thread 정보를 볼 수 있다.
관련된 프로세스를 디버깅가능


server package
InetInfo process
Object Pooling 과 Advanced
Topic
MTS Object Pooling 과 Recycling



Thread Pool Manager
ODBC Resource Dispenser 사용
Object Instance Broker
MTS Environment
Existing
Requests
Object In Use
Object In Use
Object Available
New
Request
Object Available
Advanced MTS Topics

MS-DTC(Distributed Transaction Coordinator)




MTS의 트랜잭션을 다루는 서비스.
MTS DB 연결은 자동적으로 DTC 목록에 추가
지역 또는 원격 인스턴스 사용가능
트랜잭션 작업을 사용하기 위해서는 반드시
DTC가 실행
Advanced MTS Topics

MTS 프로세스 제어




각MTS 패키지는 프로세스를 나타낸다
모든 구성요소는 패키지안에 설치되며 같은
프로세스로 실핸된다.
프로세스는 첫번째 클라이언트의 요청에
의하여 실행
서버 패키지는 반드시 하나의 유효한 id를
가진다. 만일 ID가 유효하지 않다면 패키지는
실행되지 않는다.

암호가 변경되거나 로그온한 사용자가 없는 경우
Advanced MTS Topics

Failfasting

오류가 발생한 경우 MTS구성요소는 종료되며
Log를 남긴다.





Access Violations
Unhandled exceptions
Inconsistent internal states
대부분의 경우 구성요소의 내부적인 문제가
원인이 된다.
MTS 프로세스들을 안정적이고 올바르게
작동하도록 유지
Advanced MTS Topics

MTS이벤트로그



MTS 로그는 오류를 감지한 소스를 지정
스택 트래이스의 System 오류(AV, page
faults)의 결과기록.
일반 MTS 이벤트:



“An object call caused an exception”
“Failed on creation from ObjectContext”
Line d:\...\resdisp\mtxdm\cholder.cpp indicates
an unstable ODBC driver
Advanced MTS Topics

MTS 이벤트로그의 예제
Advanced MTS Topics

보안

DCOM Security




DComCnfg
Impersonation
NTLM
MTS security


역할에 따른 클라이언트의 사용권한 부여
서버패키지 ID를 이용한 인증
Advanced MTS Topics

보안(계속)

Database 보안



MTS 어플리케이션 모델에서는 보안은 반드시 DB가
아닌 미들티어에서 다루어져야 한다.
모든 연결은 고유한 보안 속성에서 이루어진다.
DB인 경우에는 , 같은 User/Password 가 모든
연결에 사용되어져야 한다.
Advanced Topics

IIS integration:

ASP는 MTS context에서 실행.



ASP페이지에서 발생한 문제(corruption 또는 AV)
는 MTS에 의해서 관리
IIS는 기본적으로 MTS 개체와 IStream
callback을 통하여 마샬링.
MTS 개체생성시 Server.CreateObject 는
context 를 이용하여 IIS의 보안과 트랜잭션에
관한 정보를 관리한다.

CreateObject
Advanced Topics


ObjectContext.CreateInstance 는 MTS
개체를 위한 context를 생성. CreateObject
(CoCreateInstance)
일반 구성요소에서는 차이가 없다.


COM+
JIT의 구현


No state
No VB events 또는 connection points
Advanced Topics

Application 디자인




Network round trip을 최소화 (no properties,
적은 method 호출)
클라이언트 커서를 이용하여 DB와의 network
traffic을 최소화
State (Client, DB, SPM), no objects in SPM
connection에 Callback과 VB이벤트를
포함하여 사용


보안문제
성능문제
Distributed Transaction
Co-ordinator
OLE Transactions


Interface’s used to communicate
between application, transaction
manager and resource manager
A group of COM interfaces
Application
OLE Tx
Transaction
Manager
E.g. MS DTC
RM API
E.g. ODBC
OLE Tx
Resource
Manager
E.g. MS SQL Server
OLE Transactions

Six Objects


MS DTC proxy core object, Transaction
object, Transaction Options, Export object,
Enlistment object, Voter object, Resource
Manager object
Thirteen Interfaces
X/Open Distributed Transaction
Processing Standard


X/Open DTP TX - App to Transaction
Mgr
X/Open DTP XA - RM to Transaction
Mgr
X/Open DTP TX
Application
RM API
E.g. ODBC
Transaction
Resource
Manager
X/Open DTP XA Manager
E.g. MS DTC
E.g. MS SQL Server
XA Interoperability

XA Mapper
E.g. Encina, TopEnd, Tuxedo
XA TM
Application
X/O
DTP TX
X/O DTP XA
RM API
E.g. ODBC
XA Mapper
MS DTC
E.g. MS DTC
OLE Tx
Resource
Manager
E.g. MS SQL Server
Distributed Transactions with
MS DTC
Application
RM API
RM Proxy
OLE Tx
Machine
Process
RM API
E.g. ODBC
OLE Tx
Resource
Manager
E.g. ODBC
DTC Proxy
DTC Proxy
OLE Tx
MS DTC
OLE Tx
RM Proxy
RM ‘Pipe’
E.g. TDS
E.g. MS SQL Server
MS DTC
DTC Proxy
OLE Tx
Resource
Manager
E.g. MS SQL Server
Distributed Transactions with
MTS
MTX.exe
MTS
Executive
Machine
Process
ObjectContext
App cpts
RM API
E.g. ODBC
OLE Tx
Dispenser
Manager
RM Proxy
DTC Proxy
MS DTC
DTC Proxy
Resource
Dispenser
OLE Tx
Resource
Manager
E.g. MS SQL Server
Server Component Options
In Visual Basic 6.0
서버구성요소로 사용하기 위한 중요한
Visual Basic기능




무인실행(Unattended Execution)
메모리에 보유(Retained in Memory)
아파트먼트(Apartment-thread)
이진호환(Binary Compatibility)
인터페이스의 중앙화



인터페이스GUIDs
인터페이스정의 와
구현
Server
‘순환참조’문제를 방지 Components
DLL2
Class C2
Implements
DLL1
IDL
Script
Central Abstract
TLB
Interface I1
Interface I2
Interface I3
Abstract.I2
Class C1
DLL3
Implements
Class C3
Abstract.I1
Implements
Abstract.I3
Performance Improvements


개체의 locking문제
메모리에 보유

“Retained in Memorry”
ThreadPoolMax




NT SP4
ThreadPoolMax (REG_DWORD)
HKEY_LOCAL_MACHINE/Software/
Microsoft/Transaction
Server/Package/{your package
GUID}
0 to 0x7FFFFFFF
Check List






하나의 Package안에는 동일한 Thread
Model을 사용.
이진호환모드(binary Compatibility)
Transaction Option의 설정의 정확성
Project ADO Library참조시 MDAC version
'무인실행'과 '메모리에 보유’
MTS component를 개발시에는 Instancing
option을 Global Multi-Use를 제외
References And Web
Sites






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
Q&A