Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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:

Ähnliche Präsentationen


Präsentation zum Thema: "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:"—  Präsentation transkript:

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

2 Kap OHO-Workshop: MTS - COMs 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 vptrDebit() Credit()

3 Kap OHO-Workshop: MTS - COMs 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 Proxy Account IAccount

4 Kap OHO-Workshop: MTS - COMs OTM T. Grabs IDL-Compiler Account.idl Typen und Schnittstellen MIDL.EXE Account.h C/C++-Typ- Definitionen Account_I.c GUID- Definitionen Account.tbl Typ-Bib. für VB und Java Account_P.c Schnittstellen- Definitionen dlldata.c Schnittstellen- Marshaler

5 Kap OHO-Workshop: MTS - COMs 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(); }

6 Kap OHO-Workshop: MTS - COMs 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 account_from; account_from.CoCreateInstance(OLESTR("Transfer.Account")); hr = account_from->Debit(1000, (double)23.75);

7 Kap OHO-Workshop: MTS - COMs 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

8 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Laufzeitumgebung Wir verwenden wieder unser Transfer(Debit-Credit)-Beispiel Server AServer B Client.exe Remote Proxy Account Service Control Manager Accounts.exe OLE32.dll Local Proxy Account Extern Object Account IAccount Accounts.dll IAccount Local Object Account IAccount RPC Accounts.exe OLE32.dll Local Proxy Account IAccount RPC Service Control Manager RPC

9 Kap OHO-Workshop: MTS - COMs OTM T. Grabs In-Process Creation Client Process Client COM Runtime 1 SCM 2 Registry {CLSID} Server.DLL Component 3 5 object 4

10 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Remote Creation Surrogate Process Component 5 ISurrogate Client COM Runtime 1 SCM 2 Registry {AppID}RemoteServerName 3 4 SCM 7 {CLSID} Server.DLL Registry {AppID}DllSurrogate object 6

11 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Methoden-Aufruf Client Process COM ClientApp In-ProcessServer In-ProcessObject RPC Local Server Process LocalObjectProxy Local Server LocalObject COM Stub Remote Server Machine RemoteObjectProxy RPC Remote Server Process Remote Server RemoteObject COM Stub

12 Kap OHO-Workshop: MTS - COMs 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

13 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Objekterzeugung mit MTS MTS Surrogate 3 MTS Executive 4 Client 7 Component 5 Contextwrapper Object context 8 9 COM Runtime 1 SCM 2 Registry {CLSID} MTX {package} Class factory wrapper 6Classobject

14 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Objekt-Kontexte MTS Surrogate MTS Executive Component Classobject Contextwrapper Class factory wrapper Object context MTS Catalog Creator ID Activity Transaction Security Properties

15 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Sub-Objekt bzw. Subtransaktion MTS Surrogate Process MTS Executive Sub Component Classobject Class factory wrapper Component Object Object Context 1 MTS Catalog 2 Contextwrapper Object context 3 4

16 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Methoden-Aufruf MTS Surrogate Process MTS Executive Component Classobject Contextwrapper Object context Client1 2 Object 3

17 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Code-Beispiel Transfer() try { HRESULT hr; CComPtr 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; }

18 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Demo

19 Kap OHO-Workshop: MTS - COMs OTM T. Grabs TUXEDO zum 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);

20 Kap OHO-Workshop: MTS - COMs OTM T. Grabs TUXEDO zum 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); }

21 Kap OHO-Workshop: MTS - COMs 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");

22 Kap OHO-Workshop: MTS - COMs OTM T. Grabs TUXEDO vs. MTS

23 Kap OHO-Workshop: MTS - COMs 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

24 Kap OHO-Workshop: MTS - COMs OTM T. Grabs Weitere Informationen zu COM, MTS und COM+ COM: DCOM: MTS: Applikationsentwicklung mit COM und MTS: COM+: (Stand: )


Herunterladen ppt "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:"

Ähnliche Präsentationen


Google-Anzeigen