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

1 Advanced MTS Programming of Visual Basic6.0 Microsoft C...
Author: Bethany Lynne Martin
0 downloads 4 Views

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

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

3 MTS Review 개체모델과 서비스

4 Visual Basic 으로 MTS 구성요소 만들기  Visual Basic 에서 MTS 구성요소 작성단계 :  ActiveX ® DLL 프로잭트 선택  Reference 에 MTS Type Library 추가  IObjectControl 인터페이스 구현  사용자 Public methods 추가  MTSTransaction 속성 설정

5 ObjectContext Interface  MTS 구성요소는 ‘GetObjectContext’ 를 호출  ObjectContext  SetComplete  SetAbort  IsInTransaction  CreateInstance  SafeRef

6 SQL Server DB1 Customer Info (Cash balance) SQL Server DB1 Stock Info (Equity Holdings) MTS 환경 Component Method which debits cash and adds to equity holding MTS Transaction 지원  MTS transactions databases  자동화 또는 Client 제어 transactions

7 MTS Transaction Mode  트랜잭션 필요  항상 트랜잭션을 사용  트랜잭션 지원  트랜잭션이 있는 경우 참여, 없는 경우 참가하지 않음  새로운 트랜잭션 사용  반드시 새로운 트랜잭션 사용  트랜잭션 없음  일반적인 COM 속성 지원

8 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 ‘ 자동 ’ 트랜잭션

9 MTS “JIT(Just-in Time Activation)”  Client 는 서버 참조상태를 유지  Server 의 resources 를 사용  Client 는 빠름  Client 는 서버의 참조를 반환  Client pays performance penalty  Server releases expensive resources

10 MTS “Just-in Time Activation”  개체는 메소드가 호출되기 전에 활성화됨  비활성화가 될때 :  SetComplete, SetAbort  트랜잭션 실패  Client 가 참조를 반환할때

11 Implements ObjectControl Public Sub Method1() '...... '...... End Sub Private Sub ObjectControl_Activate() ’ 여기서 개체를 초기화 하는 코드나 연결등의 작업을 수행 ’ 여기서 개체를 초기화 하는 코드나 연결등의 작업을 수행 Debug.Print "Activate" Debug.Print "Activate" End Sub Private Sub ObjectControl_Deactivate() ’ 연결을 끓거나 개체의 resource 를 반환 ’ 연결을 끓거나 개체의 resource 를 반환 Debug.Print "Deactivate" Debug.Print "Deactivate" End Sub Private Function ObjectControl_CanBePooled() As Boolean ObjectControl_CanBePooled=True ObjectControl_CanBePooled=True End Function MTS ObjectControl 인터페이스

12 Set obj = New clsAccount obj.BuyStock(“MSFT”,10) obj.BuyStock(“MSFT”,10) obj.SellStock(“INTC”, 10) obj.SellStock(“INTC”, 10) Set obj = Nothing Class_Initialize() ObjectControl_Activate() ObjectControl_Activate() BuyStock(“MSFT”, 10) ObjectControl_Deactivate() ObjectControl_Deactivate() ObjectControl_Activate() ObjectControl_Activate() SellStock(“INTC”, 10) ObjectControl_Deactivate() ObjectControl_Deactivate()Class_Terminate() Activation 과 Deactivation SetComplete/SetAbort 호출

13 Private m_strSymbol As String Private m_dblCash As Double Public Property Let Symbol(ByVal strNewValue As String) m_strSymbol = strNewValue m_strSymbol = strNewValue GetObjectContext.DisableCommit GetObjectContext.DisableCommit End Property Public Property Let Cash(ByVal dblCash As Double) m_dblCash = dblCash m_dblCash = dblCash GetObjectContext.DisableCommit GetObjectContext.DisableCommit End Property Deactivation 방지  DisableCommit/EnableCommit 사용  SetAbort, SetComplete 을 사용하지 않는다

14 Set obj = New clsQuote obj.GetQuote(“MSFT”) obj.GetQuote(“INTC”) Set obj = Nothing Class_Initialize() ObjectControl_Activate() ObjectControl_Activate()GetQuote(“MSFT”)GetQuote(“INTC”) ObjectControl_Deactivate() ObjectControl_Deactivate()Class_Terminate() Activation And Deactivation No SetComplete/SetAbort Case

15 SQL Server MTS Environment Package1 Identity = Administrator Component 1 Component 2 Package2 Identity = User Component 1 Component 2 Updates database Read-only restricted access “Role” 2 Users Admins “Role” 1 Admins MTS “Declarative” Security  Each “package” runs under different “identities”  “Roles” restrict client access

16 Security object GetDirectCallerName GetDirectCreatorName GetOriginalCallerName GetOriginalCreatorName Context Object Base Process A Server Process B Server Process C Original Creator/Caller =A Direct Creator/Caller=B MTS “Programmatic” Security  Exposes “Identity” of Caller/Creator

17 Dim objSecurity As SecurityProperty Set objSecurity = GetObjectContext.SecurityProperty If (GetObjectContext.IsSecurityEnabled) Then If (Instr(1, objSecurity.GetDirectCallerName, “Brian”)) Then Call AdminRoutine End If MTS “ 프로그램적 ” 보안기술

18 MTS 구성요소 디버깅

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

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

21 디버깅 방법 / 절차  initialize 또는 terminate 의 코드는 피하라 !  구성요소는 ‘ 라이브러리 ’ 형식으로 선택  Security 는 지원되지 않음  단일 Thread 실행

22 VC++ 디버거를 이용한 방법  VB 컴파일시에 심볼파일을 선택  소스파일을 열고 중단점을 선택  Launching Application 에 - mtx.exe 를 선택  명령줄에 패캐지의 ID 를 입력 :  /p:{00000000-0000- 0000-0000- 000000000000} or /p:

23 VC 디버거를 사용하는 이유  Thread 정보를 볼 수 있다.  관련된 프로세스를 디버깅가능  server package  InetInfo process

24 Object Pooling 과 Advanced Topic

25 MTS Environment Object Available Object In Use ExistingRequests NewRequest MTS Object Pooling 과 Recycling  Thread Pool Manager  ODBC Resource Dispenser 사용  Object Instance Broker

26 Advanced MTS Topics  MS-DTC (Distributed Transaction Coordinator)  MTS 의 트랜잭션을 다루는 서비스.  MTS DB 연결은 자동적으로 DTC 목록에 추가  지역 또는 원격 인스턴스 사용가능  트랜잭션 작업을 사용하기 위해서는 반드시 DTC 가 실행

27 Advanced MTS Topics  MTS 프로세스 제어  각 MTS 패키지는 프로세스를 나타낸다  모든 구성요소는 패키지안에 설치되며 같은 프로세스로 실핸된다.  프로세스는 첫번째 클라이언트의 요청에 의하여 실행  서버 패키지는 반드시 하나의 유효한 id 를 가진다. 만일 ID 가 유효하지 않다면 패키지는 실행되지 않는다.  암호가 변경되거나 로그온한 사용자가 없는 경우

28 Advanced MTS Topics  Failfasting  오류가 발생한 경우 MTS 구성요소는 종료되며 Log 를 남긴다.  Access Violations  Unhandled exceptions  Inconsistent internal states  대부분의 경우 구성요소의 내부적인 문제가 원인이 된다.  MTS 프로세스들을 안정적이고 올바르게 작동하도록 유지

29 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

30 Advanced MTS Topics  MTS 이벤트로그의 예제

31 Advanced MTS Topics  보안  DCOM Security  DComCnfg  Impersonation  NTLM  MTS security  역할에 따른 클라이언트의 사용권한 부여  서버패키지 ID 를 이용한 인증

32 Advanced MTS Topics  보안 ( 계속 )  Database 보안  MTS 어플리케이션 모델에서는 보안은 반드시 DB 가 아닌 미들티어에서 다루어져야 한다.  모든 연결은 고유한 보안 속성에서 이루어진다.  DB 인 경우에는, 같은 User/Password 가 모든 연결에 사용되어져야 한다.

33 Advanced Topics  IIS integration:  ASP 는 MTS context 에서 실행.  ASP 페이지에서 발생한 문제 (corruption 또는 AV) 는 MTS 에 의해서 관리  IIS 는 기본적으로 MTS 개체와 IStream callback 을 통하여 마샬링.  MTS 개체생성시 Server.CreateObject 는 context 를 이용하여 IIS 의 보안과 트랜잭션에 관한 정보를 관리한다.  CreateObject

34 Advanced Topics  ObjectContext.CreateInstance 는 MTS 개체를 위한 context 를 생성. CreateObject (CoCreateInstance)  일반 구성요소에서는 차이가 없다.  COM+  JIT 의 구현  No state  No VB events 또는 connection points

35 Advanced Topics  Application 디자인  Network round trip 을 최소화 (no properties, 적은 method 호출 )  클라이언트 커서를 이용하여 DB 와의 network traffic 을 최소화  State (Client, DB, SPM), no objects in SPM  connection 에 Callback 과 VB 이벤트를 포함하여 사용  보안문제  성능문제

36 Distributed Transaction Co-ordinator

37 Resource Manager Transaction Manager Application OLE Tx RM API E.g. MS DTC E.g. ODBC E.g. MS SQL Server OLE Transactions  Interface’s used to communicate between application, transaction manager and resource manager  A group of COM interfaces

38 OLE Transactions  Six Objects  MS DTC proxy core object, Transaction object, Transaction Options, Export object, Enlistment object, Voter object, Resource Manager object  Thirteen Interfaces

39 X/Open Distributed Transaction Processing Standard  X/Open DTP TX - App to Transaction Mgr  X/Open DTP XA - RM to Transaction Mgr Resource Manager Transaction Manager Application X/Open DTP XA X/Open DTP TXRM API E.g. MS DTC E.g. ODBC E.g. MS SQL Server

40 XA Interoperability  XA Mapper Resource Manager 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/O DTP TX E.g. MS SQL Server

41 Distributed Transactions with MS DTC Machine Process MS DTC Resource Manager OLE Tx DTC Proxy Application RM API E.g. ODBC RM Proxy DTC Proxy RM Proxy OLE Tx RM API E.g. ODBC OLE Tx MS DTC OLE Tx Resource Manager E.g. MS SQL Server DTC Proxy RM ‘Pipe’ E.g. TDS E.g. MS SQL Server

42 Distributed Transactions with MTS Machine Process App cpts RM API E.g. ODBC DTC Proxy RM Proxy MTS Executive Dispenser Manager Resource Dispenser OLE Tx MS DTC Resource Manager E.g. MS SQL Server DTC Proxy OLE Tx MTX.exe ObjectContext

43 Server Component Options In Visual Basic 6.0

44 서버구성요소로 사용하기 위한 중요한 Visual Basic 기능  무인실행 (Unattended Execution)  메모리에 보유 (Retained in Memory)  아파트먼트 (Apartment-thread)  이진호환 (Binary Compatibility)

45 인터페이스의 중앙화  인터페이스 GUIDs  인터페이스정의 와 구현  ‘ 순환참조 ’ 문제를 방지 Central Abstract TLB Interface I1 Interface I2 Interface I3 IDLScript Class C2 ImplementsAbstract.I2 DLL2 Class C1 ImplementsAbstract.I1 DLL1 Class C3 ImplementsAbstract.I3DLL3 Server Components

46 Performance Improvements  개체의 locking 문제  메모리에 보유  “Retained in Memorry”

47 ThreadPoolMax  NT SP4  ThreadPoolMax (REG_DWORD)  HKEY_LOCAL_MACHINE/Software/ Microsoft/Transaction Server/Package/{your package GUID}  0 to 0x7FFFFFFF

48 Check List  하나의 Package 안에는 동일한 Thread Model 을 사용.  이진호환모드 (binary Compatibility)  Transaction Option 의 설정의 정확성  Project ADO Library 참조시 MDAC version  ' 무인실행 ' 과 ' 메모리에 보유 ’  MTS component 를 개발시에는 Instancing option 을 Global Multi-Use 를 제외

49 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://msdn.microsoft.com/developer  http://www.advisor.co.kr http://www.advisor.co.kr

50 Q & A