1 / 24

Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM

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. Was ist COM/DCOM ?.

thu
Télécharger la présentation

Kap. 3.4 Microsoft Transaction Server als Beispiel eines OTM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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()

  3. 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); }; IAccount Remote ProxyAccount

  4. 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. 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. 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);

  7. 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. Laufzeitumgebung Server A Server B Client.exe Accounts.exe IAccount IAccount Remote ProxyAccount Local ProxyAccount • Wir verwenden wieder unser Transfer(Debit-Credit)-Beispiel RPC Accounts.exe IAccount IAccount Local ProxyAccount Extern ObjectAccount RPC OLE32.dll IAccount Accounts.dll Local ObjectAccount OLE32.dll OLE32.dll Service Control Manager Service Control Manager RPC

  9. In-Process Creation Component object 4 1 5 COM Runtime 3 Registry 2 SCM {CLSID} Server.DLL Client Process Client

  10. Remote Creation Surrogate Process ISurrogate Component object 6 1 7 5 COM Runtime COM Runtime SCM SCM 2 4 3 Registry Registry {AppID} DllSurrogate {AppID} RemoteServerName {CLSID} Server.DLL Client

  11. Methoden-Aufruf In-Process Server Local Server Process In-Process Object Local Server COM Remote Object Local Object Stub RPC Local Object Proxy Remote Server Machine Remote Server Process Remote Object Proxy Remote Server COM Stub RPC Client Process Client App COM

  12. 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. Objekterzeugungmit MTS MTS Surrogate 5 4 Class object MTS Executive Component 9 Context wrapper Object context 1 8 6 Class factory wrapper 7 Registry 3 {CLSID} MTX {package} SCM 2 Client COM Runtime

  14. Objekt-Kontexte Class object Context wrapper Object context Object context MTS Surrogate Creator ID MTS Executive Component Activity Transaction Security Properties Class factory wrapper MTS Catalog

  15. Sub-Objekt bzw.Subtransaktion Class object MTS Executive Sub Component Object Context wrapper 4 Object context 1 3 2 Class factory wrapper MTS Catalog MTS Surrogate Process Component Object Context

  16. Methoden-Aufruf Class object Object 1 Context wrapper 3 2 MTS Surrogate Process Client MTS Executive Component Object context

  17. 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; }

  18. Demo

  19. 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);

  20. 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); }

  21. 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. TUXEDO vs. MTS

  23. 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. 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)

More Related