Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel...

24
Kap 3.4 - 1 OHO-Workshop: MTS - COM‘s OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server: COM‘s OTM Entwickeln von MTS-Applikationen Vergleich TUXEDO vs. MTS Was ist COM+? Thanks to Mary Kirtland that contributed some of the slides

Transcript of Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel...

Page 1: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 1OHO-Workshop: MTS - COM‘s OTM T. Grabs

Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM

Was ist COM/DCOM?

Microsoft Transaction Server: COM‘s OTM

Entwickeln von MTS-Applikationen

Vergleich TUXEDO vs. MTS

Was ist COM+?Thanks to Mary Kirtland that contributed some of the slides

Page 2: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 2OHO-Workshop: MTS - COM‘s OTM T. Grabs

Was ist COM/DCOM ?

COM - Component Object Model -- DCOM - Distributed COM Komponente: Binärcode, der eine wohldefinierte Funktionalität

erbringt COM: Binärer Standard für solche Komponenten

unabhängig von einer Programmiersprache unabhängig vom gewählten Compiler Schnittstellenvererbung i. Ggs. zu Quellcode-Vererbung konkret: vptr/vtbl-Layout abstrakter C++-Klassen als

Schnittstelle der Komponenten festgelegt Roadmap der COM-Konzepte

Interfaces Klassen Objekte Laufzeitumgebung Account

IAccount vptr Debit()

Credit()

Page 3: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 3OHO-Workshop: MTS - COM‘s OTM T. Grabs

Interfaces

COM ist schnittstellen-orientiert Schnittstellenvererbung vs. Quellcodevererbung Schnittstellendefinitions-Sprache Microsoft IDL IDL: Interface Definition Language MS-IDL basiert auf OSF DCE RPC IDL also: RPC-Formulierung mit automatischer Netzwerktransparenz

Automatische Generierung von Proxy- und Stub-Code Beispiel einer IDL-Deklaration

interface IAccount : IDispatch {

[id(1), helpstring("method Debit")] HRESULT Debit([in] int account, [in] double amount);

[id(2), helpstring("method Credit")] HRESULT Credit([in] int account, [in] double amount);

};

Remote ProxyAccount

IAccount

Page 4: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 4OHO-Workshop: MTS - COM‘s OTM T. Grabs

IDL-Compiler

Account.idlTypen und Schnittstellen

MIDL.EXE

Account.hC/C++-Typ-Definitionen

Account_I.cGUID-

Definitionen

Account.tblTyp-Bib. für VB und Java

Account_P.cSchnittstellen-Definitionen

dlldata.cSchnittstellen-

Marshaler

Page 5: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 5OHO-Workshop: MTS - COM‘s OTM T. Grabs

IUnknown-Interface

COM-Standard-Interface: Jedes COM-Objekt muss es unterstützen, sonst ist es kein COM-

Objekt Schnittstellen-Navigation ermöglichen Referenzzählung auf Schnittstellen

IDL für IUnknown

interface IUnknown

{

HRESULT QueryInterface(

[in] REFIID riid, // the interface asked for

[out, iid_is(riid)] void **ppvObject);

ULONG AddRef();

ULONG Release();

}

Page 6: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 6OHO-Workshop: MTS - COM‘s OTM T. Grabs

Interface-Anfrage

Anfrage an ein gegebenes Objekt, ob es ein Interface Account unterstützt

void GetAndUseAccount(IUnknown * pObj) {

IAccount * pAccount;

HRESULT hr

hr = pObj->QueryInterface(IID_IAccount, (void**)&pAccount);

if (hr == S_OK)

pAccount->Debit(1000, (double)23.75);

pAccount->Release();

}

Unter Verwendung von SmartPointers

CComPtr<IAccount> account_from;

account_from.CoCreateInstance(OLESTR("Transfer.Account"));

hr = account_from->Debit(1000, (double)23.75);

Page 7: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 7OHO-Workshop: MTS - COM‘s OTM T. Grabs

Laufzeitumgebung

Prozessinterner Server (in-process server) Komponente ist in DLL implementiert DLL wird in den Client-Adressraum geladen

Prozessexterner Server (out-of-process server) Komponente ist in EXE implementiert Komponente ist in DLL implementiert

DLL wird in Surrogat geladen, bspw. MTX.EXE Prozessexterne Server unterstützen auch remote Zugriffe

Page 8: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 8OHO-Workshop: MTS - COM‘s OTM T. Grabs

Laufzeitumgebung Wir verwenden wieder unser Transfer(Debit-Credit)-Beispiel

Server A Server B

Client.exe

Remote ProxyAccount

Service Control Manager

Accounts.exe

OLE32.dllOLE32.dll

Local ProxyAccount

Extern ObjectAccount

IAccount

Accounts.dll

IAccountIAccount

Local ObjectAccount

IAccount

RPC

Accounts.exe

OLE32.dll

Local ProxyAccount

IAccount

RPC

Service Control ManagerRPC

Page 9: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 9OHO-Workshop: MTS - COM‘s OTM T. Grabs

In-Process Creation

Client ProcessClient Process

ClientClient

COM RuntimeCOM Runtime

11

SCMSCM22

RegistryRegistry{CLSID}{CLSID} Server.DLLServer.DLL

ComponentComponent

33

55

objectobject 44

Page 10: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 10OHO-Workshop: MTS - COM‘s OTM T. Grabs

Remote Creation

Surrogate ProcessSurrogate Process

ComponentComponent

55

ISurrogateISurrogate

ClientClient

COM RuntimeCOM Runtime

11

SCMSCM22

RegistryRegistry{AppID}{AppID} RemoteServerNameRemoteServerName

3344

COM RuntimeCOM Runtime

SCMSCM

77

{CLSID}{CLSID} Server.DLLServer.DLL

RegistryRegistry{AppID}{AppID} DllSurrogateDllSurrogate

objectobject 66

Page 11: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 11OHO-Workshop: MTS - COM‘s OTM T. Grabs

Methoden-Aufruf

Client ProcessClient Process

COMCOM

ClientClientAppApp

In-ProcessIn-ProcessServerServer

In-ProcessIn-ProcessObjectObject

RPCRPC

Local Server ProcessLocal Server Process

LocalLocalObjectObjectProxyProxy

Local ServerLocal Server

LocalLocalObjectObject

COMCOM

StubStub

Remote Server MachineRemote Server MachineRemoteRemoteObjectObjectProxyProxy

RPCRPC

Remote Server ProcessRemote Server Process

Remote ServerRemote Server

RemoteRemoteObjectObject

COMCOM

StubStub

Page 12: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 12OHO-Workshop: MTS - COM‘s OTM T. Grabs

COM mit MTS

Man kann COM Komponenten transaktionelle Eigenschaften zuordnen, wenn man sie über MTS administriert

(Fast) jede COM-Komponente eigent sich für MTS Was bietet MTS zusätzlich zu COM:

Transaktionsprimitive Objektkontexte (mehr dazu unten) Anbindung an Resource-Manager via XA 2PC-Koordination für verteilte Transaktionen

Objektkontext speichert Transaktionszustand eines Objektes Subtransaktionen erben den Kontext der Vatertransaktion Objekte innerhalb einer Transaktion entscheiden über

Commit: SetComplete()-Methode des Kontext-Interfaces Abort: SetAbort()-Methode des Kontext-Interfaces

Page 13: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 13OHO-Workshop: MTS - COM‘s OTM T. Grabs

Objekterzeugungmit MTS

MTS SurrogateMTS Surrogate

33

MTS ExecutiveMTS Executive

44ClientClient

77

ComponentComponent

55

Context Context wrapperwrapper

Object Object contextcontext

88

99

COM RuntimeCOM Runtime

11

SCMSCM22RegistryRegistry

{CLSID}{CLSID} MTX MTX {package}{package}

Class Class factory factory

wrapperwrapper

66 Class Class objectobject

Page 14: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 14OHO-Workshop: MTS - COM‘s OTM T. Grabs

Objekt-Kontexte

MTS SurrogateMTS Surrogate

MTS ExecutiveMTS Executive ComponentComponent

Class Class objectobject

Context Context wrapperwrapper

Class Class factory factory

wrapperwrapper

Object Object contextcontext

Object contextObject context

MTS CatalogMTS Catalog

Creator IDCreator ID

ActivityActivity

TransactionTransaction

Security PropertiesSecurity Properties

Page 15: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 15OHO-Workshop: MTS - COM‘s OTM T. Grabs

Sub-Objekt bzw.Subtransaktion

MTS Surrogate ProcessMTS Surrogate Process

MTS ExecutiveMTS Executive Sub ComponentSub Component

Class Class objectobjectClass factory Class factory

wrapperwrapper

ComponentComponent

ObjectObject

Object ContextObject Context

11

MTS CatalogMTS Catalog

22

Context Context wrapperwrapper

Object Object contextcontext

33

44

Page 16: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 16OHO-Workshop: MTS - COM‘s OTM T. Grabs

Methoden-Aufruf

MTS Surrogate ProcessMTS Surrogate Process

MTS ExecutiveMTS Executive ComponentComponent

Class Class objectobject

Context Context wrapperwrapper

Object Object contextcontext

ClientClient11

22

ObjectObject33

Page 17: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 17OHO-Workshop: MTS - COM‘s OTM T. Grabs

Code-BeispielTransfer()

try {

HRESULT hr;

CComPtr<IAccount> account_credit;

m_spObjectContext->CreateInstance(CLSID_Account,IID_IAccount, (void**)&account_credit);

hr = account_credit->Credit(account_to, amount);

if (hr != S_OK) throw hr;

// … do the same for debit

// commit

m_spObjectContext->SetComplete();

return S_OK;

}

catch(HRESULT hr) {

// abort

m_spObjectContext->SetAbort();

return S_FALSE;

}

Page 18: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 18OHO-Workshop: MTS - COM‘s OTM T. Grabs

Demo

Page 19: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 19OHO-Workshop: MTS - COM‘s OTM T. Grabs

TUXEDOzum Vergleich

// add the transfer info to the send buffers

// Withdraw buffer must have account number and amount

if ((ret = Fchg(combuf1, FROMACC_ID, -1, (char*)&fromacc_id, 0)) < 0)

fprintf(stderr, "Client couldn't add field to communication buffer! error: %d\n", Ferror);

if ((ret = Fchg(combuf1, AMOUNT, -1, (char*)&amount, 0)) < 0)

fprintf(stderr, "Client couldn't add field to communication buffer! error: %d\n", Ferror);

// Deposit buffer must have account number and amount

if ((ret = Fchg(combuf2, TOACC_ID, -1, (char*)&toacc_id, 0)) < 0)

fprintf(stderr, "Client couldn't add field to communication buffer! error: %d\n", Ferror);

if ((ret = Fchg(combuf2, AMOUNT, -1, (char*)&amount, 0)) < 0)

fprintf(stderr, "Client couldn't add field to communication buffer! error: %d\n", Ferror);

Page 20: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 20OHO-Workshop: MTS - COM‘s OTM T. Grabs

TUXEDOzum Vergleich

// start global transaction

if (tpbegin(20, 0) == -1)

{

userlog("Can't start TX\n");

userlog("Tperrno = %s\n", strerror(tperrno));

}

/* Request the service WITHDRAW, waiting for a reply */

ret = tpcall("WITHDRAW", (char*)combuf1, 0, (char**)&recbuf1, &reclen, (long)0);

if(ret == -1) {

userlog("Can't send request to service WITHDRAW\n");

userlog("Tperrno = %s\n", strerror(tperrno));

tpabort(0);

tpfree((char*)combuf1);

tpfree((char*)recbuf1);

tpfree((char*)combuf2);

tpfree((char*)recbuf2);

tpreturn(TPFAIL, 0L, (char*)NULL, 0L, 0L);

}

Page 21: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 21OHO-Workshop: MTS - COM‘s OTM T. Grabs

TUXEDO zum Vergleich

ret = tpcall("DEPOSIT", (char*)combuf2, 0, (char**)&recbuf2, &reclen, (long)0);

if(ret == -1) {

userlog("Can't send request to service DEPOSIT\n");

userlog("Tperrno = %s\n", strerror(tperrno));

tpabort(0);

tpfree((char*)combuf1);

tpfree((char*)recbuf1);

tpfree((char*)combuf2);

tpfree((char*)recbuf2);

tpreturn(TPFAIL, 0L, (char*)NULL, 0L, 0L);

}

// try to commit

if (tpcommit(0) == -1)

{

userlog("Can't commit TX\n");

userlog("Tperrno = %s\n", strerror(tperrno));

tpreturn(TPFAIL, 0L, (char*)NULL, 0L, 0L);

}

else

userlog("Successfully committed TX\n");

Page 22: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 22OHO-Workshop: MTS - COM‘s OTM T. Grabs

TUXEDO vs. MTS

Kriterium TUXEDO COM/MTS

ProgrammierungObjektorientiert -- +

Transaktionsmgt.Verteiltes 2PC + +Alternative TM - -KommunikationSynchron + +Asynchron + -Routing + ?Komplexe Datentypen + +

Load BalancingStatisch + +Dynamisch + -

Page 23: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 23OHO-Workshop: MTS - COM‘s OTM T. Grabs

COM+

COM+ ist COM und mehr für Windows 2000 COM+ = COM + MTS + MSMQ + Component Services + anderes Component Services

Asynchronous Non-blocking calls Queued Components (MSMQ)

Events Pipes Light-weight handlers

… andere Erweiterungen Apartment Threading überarbeitet Registrierung überarbeitet Keine Unterschiede bei Objekterzeugung für MTS mehr

Page 24: Kap 3.4 - 1OHO-Workshop: MTS - COMs OTM T. Grabs Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM Was ist COM/DCOM? Microsoft Transaction Server:

Kap 3.4 - 24OHO-Workshop: MTS - COM‘s OTM T. Grabs

Weitere Informationenzu COM, MTS und COM+

COM:http://www.microsoft.com/com/tech/com.asp

DCOM:http://www.microsoft.com/com/tech/DCOM.asp

MTS:http://www.microsoft.com/com/tech/MTS.asp

Applikationsentwicklung mit COM und MTS:http://msdn.microsoft.com/library/techart/dw1intro.htm

COM+:http://www.microsoft.com/com/tech/COMPlus.asp

(Stand: 19.4.2000)