4.4 COM+ mit Transaction Services als Beispiel eines OTM

Ähnliche Dokumente
4.4 COM+ mit Transaction Services als Beispiel eines OTM

8.3 COM und DCOM (Microsoft)

9.3 COM und DCOM (Microsoft )

Client/Server-Programmierung

Kap. 3 Verteilte Objektverwaltung

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

5.2 Workshop EJB. Entwicklung von EJB-Anwendungen. Das JOnAS-System

Application Frameworks and Componentware Wintersemester 2002/03. COM+ Entwicklungsschritte. In-Place Activation OSF DCE RPC 1992 DCOM 1996

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Software Reuse Sommer OLE, DCOM und COM Die frühen. Komponentenmodelle der Firma Microsoft. Object Linking and Embedding (Compound Documents)

Kap. 3 Verteilte Objektverwaltung

Andreas Kosch. Software & Support $ > Verlag GmbH

Inhalt. 1. Motivation. 2. COM Architektur. 3. COM Implementierung. 4. Zusammenhang zu ATL. 5. Beispiel COM Client/ Server. 6..

3.3 Das Orbix CORBA-System

IUG DRESDEN ERSTELLUNG VON ROBUSTEN NATURAL SERVICES Software AG. All rights reserved. For internal use only

Einführung in COM Seite 1

Komponentenorientierte Software-Entwicklung. Seite 1 / 44

Einführung: Verteilte Systeme - Remote Method Invocation -

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

3.2 Der CORBA-Standard Common Object Request Broker Architecture

Zwischenbericht Diplomarbeit

Kommunikation. Björn und Georg

DCOM und.net. B. Sc. Tobias Buchloh. Seminar Software-Entwurf Fachgebiet Software Engineering, Institut für Angewandte Informatik Universität Hannover

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

Remote Method Invocation

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

Remote Method Invocation

Janeva:.NET meets J2EE

Vorbereitungen Download. AVO-Übung 6. Beispiel. Slice. Varianten u.a. für Linux, Windows, OS X ICE-Dokumentation ICE-Binaries (inkl.

Kap. 3 Evolution von TP-Monitoren zu Objekt-Monitoren

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Mobile und Verteilte Datenbanken

Internetanwendungstechnik (Übung)

Programmierkurs C++ Abstrakte Klassen und Methoden

9.5 Microsoft.NET

Inhaltsverzeichnis. Teil I Grundlagen der Programmarchitektur Vorwort... XIII XV XVI XVI

Persistenz unter Kontrolle mit JDBI für Java

Typsystem Plattform- und Sprachenunabhängigkeit in.net

Parallele und Verteilte Systeme

Praktikum Verteilte Anwendungen

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

H.1 FORMI: An RMI Extension for Adaptive Applications H.1 FORMI: An RMI Extension for Adaptive Applications

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Softwareentwicklung mit Komponenten

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Enterprise JavaBeans Überblick

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Client/Server-Programmierung

Einstieg in die Informatik mit Java

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

Einstieg in die Informatik mit Java

8.4 Microsoft.NET. .NET Framework = 1 CLR Common Language Runtime ist objektorientierte virtuelle Maschine für Ausführung von managed cod

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Factory Method (Virtual Constructor)

CORBA Lebensdauer von Objekten, Transaktionen MD 5/02

Einstieg in die Informatik mit Java

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Programmieren 2 Java Überblick

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

Konzepte von Betriebssystem-Komponenten Middleware RMI

Java Beans ( )

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

J2EE-Praktikum. Enterprise JavaBeans Patterns. Peter Thiemann. J2EE-Praktikum, WS2005/2006. Universität Freiburg

Vergleich.Net und COM

Vorkurs Informatik WiSe 15/16

Programmierkurs Java

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Komponentenmodelle II

Kommunikation in verteilten Anwendungen

Connection Pooling. Was ist das?? Unter Connection Pooling versteht man generell die Wiederverwendung physischer Datenbankverbindungen.

Component Object Model. Detlef Streitferdt Technische Universität Ilmenau. TU-Ilmenau, Softwaresysteme / Prozessinformatik, KBSE Komponentenmodelle 1

Objektorientierte Datenbanken

Enterprise JavaBeans Überblick

Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object

Einführung in die Programmiersprache Java II

Einführung in C# Teil 1. Matthias Nübling

C# im Vergleich zu Java

Inhalt I. Blick in die Geschichte. .NET für kleine und grosse Applikationen

Themen. Web Service - Clients. Kommunikation zw. Web Services

Verteilte Systeme Übung

Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.

Programmiermethodik 3. Klausur Lösung

Weitere aus Schnittstelle generierte Dateien (Java-Mapping)

Die Klasse Vertiefung

Web Services. Web Services in the News. Vision: Web of Services. Learning for Results. DECUS Symposium 2002, Vortrag 1K07,

Android Processes & Services

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Objektorientierte Programmierung und Klassen

Transkript:

4.4 COM+ mit Transaction Services als Beispiel eines OTM Was ist COM/COM+? COM+ Transaction Services Entwickeln von COM+-Applikationen Vergleich TUXEDO vs. COM+ Kapitel 4: Workshop COM+ 1

Was ist COM+? COM+ = COM + MTS + MSMQ + Component Services + anderes Component Services Asynchronous Non-blocking calls Queued Components (MSMQ) Events Pipes Light-weight handlers andere Erweiterungen Kapitel 4: Workshop COM+ 2

Was ist COM? COM - Component Object Model DCOM - Distributed COM Komponente: Binärcode, der eine Funktionalität erbringt, die über ein Interface zugänglich gemacht wird 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 IAccount vptr Debit() Account Credit() Kapitel 4: Workshop COM+ 3

Interfaces COM ist schnittstellenorientiert 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 s. CORBA Kapitel 4: Workshop COM+ 4

Bsp.: Interface für eine Account-Komponente Beispiel einer IDL-Deklaration (vgl. CORBA-IDL) interface IAccount { [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); Host 1 Host 2 Finance Client IAccount Remote Proxy Account IAccount Account Kapitel 4: Workshop COM+ 5

IDL-Compiler IDL-Definition aus dem Account- Beispiel Account.idl Typen und Schnittstellen Microsoft IDL Compiler 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 Automatisch generierter Code Kapitel 4: Workshop COM+ 6

Laufzeitumgebung - Container 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. DLLHOST.EXE COM+ Application unter Windows 2000 Prozessexterne Server unterstützen auch Remote Zugriffe Kapitel 4: Workshop COM+ 7

Laufzeitumgebung und Methoden-Aufruf Client Process In-Process Object Local Server Process Client App In-Process Server Local Object Proxy RPC Stub COM Local Object Local Server Remote Object Proxy Remote Server Machine Remote Server Process COM RPC Stub Remote Object COM Remote Server Kapitel 4: Workshop COM+ 8

Transaktionssemantik herstellen Transaction Coordinator Client IFinance COM Finance Zürich 2 Phasen-Commit Credit Debit IAccount Account IAccount Account Bern Basel DBMS DBMS Kapitel 4: Workshop COM+ 9

Transaktionssteuerung Transaktionen im Client mittels des ITransaction-Interfaces automatisch und deklarativ auf Komponentenebene durch den Container Transaktionsattribute für Methoden Disabled: nicht in einem Transaktionskontext ausgeführt Not Supported: ohne Transaktionskontext ausgeführt Supported: in einem Transaktionskontext ausgeführt, falls bei Aufruf einer existiert; sonst ohne Transaktionskontext Required: immer in einem Transaktionskontext ausgeführt, der ggf. auch neu erzeugt wird, falls noch nicht existent Requires New: immer in einer neu erzeugten, eigenständigen Transaktion ausgeführt Implementierung: Zwei-Phasen-Commit bei verteilten Transaktionen Kapitel 4: Workshop COM+ 10

COM mit Transaktionen Man kann COM-Komponenten transaktionelle Eigenschaften zuordnen (z.b. deklarativ über Component Services Admin.) (Fast) jede COM-Komponente eignet sich dafür Transaction Services: Transaktionsprimitive (Commit, Abort) Objektkontexte (mehr dazu unten) Anbindung an Resource-Manager (Datenbanken) bspw. via XA auch an Oracle 2PC-Koordination für verteilte Transaktionen Objektkontext für transaktionelle Objekte transparent vom Container verwaltet mittels Interception (s.f. Folie) 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 Kapitel 4: Workshop COM+ 11

Das Prinzip der Interception Objekte laufen in Containern ab. Mit dem Einspielen eines neuen Objektes in einen Container wird die Schnittstelle dieses neuen Objektes dem Container bekannt gemacht. Das ermöglicht für den Container: Container-generierte Objekte mit gleicher Schnittstelle zu definieren sogennante Wrapper; Methoden-Aufrufe nicht direkt an die Objekte zu senden, sondern vorher über die eigenen Wrapper-Implementierungen umzuleiten; in den Wrappern nützliche Informationen über die Methodenaufrufe festzuhalten, etwa um Transaktionseigenschaften herzustellen; und schliesslich den Methodenaufruf vom Wrapper an das eigentliche Objekt weiterzureichen. Voraussetzung für just-in-time Objekterzeugung Kapitel 4: Workshop COM+ 12

Objekterzeugung mit Interception Client 8 COM+ Surrogate 3 COM+ Executive Context wrapper 4 Component 1 6 7 5 Class factory wrapper Object context Class object COM Runtime 2 Schritte 2 bis 8 sind für den Client transparent Kapitel 4: Workshop COM+ 13

Objekterzeugung mit Interception 1. Client ruft CoCreateInstance (COM Objekterzeugung) auf 2. Surrogat-Prozess wird von COM Runtime gestartet 3. COM+-Ausführungsumgebung wird geladen 4. Komponente (DLL) wird in das Surrogat geladen 5. Referenz auf Klassenobjekt-Wrapper (aka Factory) zurück 6. Objekt-Erzeugung via Klassenobjekt-Wrapper verlangen 7. Objekt-Kontext wird erzeugt 8. Zeiger auf Interface zurück an Client (Schaut für den Client wie richtiges Objekt aus) Anm.: Das Objekt selbst wurde noch nicht erzeugt. Dank COM+ just-in-time activation wird es erst beim ersten Methodenaufruf angelegt. Kapitel 4: Workshop COM+ 14

Objekt-Kontexte Object context COM+ Surrogate Creator ID Activity Transaction Security Properties COM+ Executive Context wrapper Class factory wrapper Object context Component Class object COM+ Catalog Transaktionsvorgaben für das Objekt aus dem Katalog entnehmen, um sie dann in den Kontext stellen zu können. Kapitel 4: Workshop COM+ 15

Transaktionaler Methoden-Aufruf Client 1 COM+ Surrogate Process COM+ Executive Context wrapper 3 Component Object Object context 2 Class object Schritte 2 und 3 sind für den Client transparent Kapitel 4: Workshop COM+ 16

Transaktionaler Methoden-Aufruf 1. Client ruft eine Interface-Methode auf 2. Beim ersten Methoden-Aufruf, verwendet der Kontext-Wrapper den Objektkontext um das richtige Objekt anzulegen 3. Nach internem COM+-housekeeping wird der Aufruf an die Methodenimplementierung im Objekt propagiert Kapitel 4: Workshop COM+ 17

Sub-Objekt bzw. Subtransaktion COM+ Surrogate Process Component Object 1 Object Context 4 2 zu 1 COM+ Executive 3 Context wrapper Object context Class factory wrapper zu 3 COM+ Catalog Sub Component Class object Schritte 2 bis 4 sind für den Client transparent Kapitel 4: Workshop COM+ 18

Sub-Objekt bzw. Subtransaktion 1. Objekt ruft IObjectContext::CreateInstance auf. Dies gibt Zeiger (s. zu 1 in der Folie) auf den Klassenobjekt-Wrapper zurück wie von den vorigen Folien bekannt 2. Objekt-Kontext fordert vom Klassenobjekt-Wrapper die Erzeugung des Objektes 3. Der Klassenobjekt-Wrapper verwendet die Information aus dem Kontext des Aufrufers und aus dem COM+-Katalog- Einträgen (s. zu 3 in der Folie), um den Kontext des neuen Objektes festzulegen 4. Ein Zeiger auf den Kontext-Wrapper wird an den Client zurückgeliefert Kapitel 4: Workshop COM+ 19

Code-Beispiel Transfer() 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; Kapitel 4: Workshop COM+ 20

Code-Beispiel Credit() STDMETHODIMP CAccount::Credit(int account, double amount) { _ConnectionPtr pconnection = NULL; try { char comm[256] = {0}; pconnection = _ConnectionPtr( uuidof(connection)); pconnection->open( BERN", ", ", NULL); // DB Verbindung sprintf(comm, _T("update account set balance = balance + %f where account_number = %d"), amount, account); // SQL Statement bearbeiten pconnection->execute(_bstr_t(comm), NULL, adcmdtext); } m_spobjectcontext->setcomplete(); // commit erlauben pconnection->close(); return S_OK; } catch(...) {... Kapitel 4: Workshop COM+ 21

Demo: Deployment Kapitel 4: Workshop COM+ 22

Weitere Informationen zu COM, MTS, COM+ und.net COM: http://www.microsoft.com/com/tech/com.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.net: http://www.microsoft.com/net/ (Stand: 19.2.2002) Kapitel 4: Workshop COM+ 23

IUnknown-Interface COM-Standard-Interface: Jedes COM-Objekt muss es unterstützen Schnittstellen-Navigation ermöglichen Referenzzählung auf Schnittstellen zwecks Garbage Collection 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(); } Kapitel 4: Workshop COM+ 24