9.3 COM und DCOM (Microsoft )

Ähnliche Dokumente
Einführung in COM Seite 1

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

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

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

Remote Method Invocation

Client/Server-Programmierung

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

I.2.3. DCOM Distributed Component Object Model. Dr. Welf Löwe und Markus Noga 1

7.1.1 Grundzüge der Fernaufruf-Implementierung

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

9.5 Microsoft.NET

Middleware, Verteilte Plattform (auch Verteilungsplattform*) bietet Verteilungsabstraktion für verteilte Anwendungsprogramme,

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

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

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

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Seminar Komponentenorientierte Softwareentwicklung

Einstieg in die Informatik mit Java

Java RMI Remote Method Invocation

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

Seite 1. Gliederung. Vereinfachtes Weltbild zu aktuellen Technologien. Kapitel 5 Komponententechnologien im Vergleich

Mobile und Verteilte Datenbanken

8.1.5 Java RMI Remote Method Invocation

Handbuch für die Erweiterbarkeit

Enterprise JavaBeans Überblick

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

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

Factory Method (Virtual Constructor)

Remote Method Invocation

Entwurfsmuster (Design Patterns)

Java-Programmierung. Remote Method Invocation - RMI

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1)

Programmieren in Java -Eingangstest-

Properties und Proxies

Interface. So werden Interfaces gemacht

Kap. 3 Verteilte Objektverwaltung

Entwurfsmuster und Frameworks Singleton

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Einstieg in die Informatik mit Java

Typumwandlungen bei Referenztypen

8.2 Mobile Objekte. (mobile objects, auch Objektmigration, object migration) Facetten der Verteilungsabstraktion

Client/Server-Programmierung

Client/Server-Programmierung

Das Component Object Model (COM)

Die Warenkorbfunktion (workbasket)

Szenario 3: Service mit erweiterter Schnittstelle

Office in Java. 2. Info-Point Urs Frei

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

Vortrag Grundlagen der COM-Programmierung

Anwendung eines Enterprise Java Beans

Einstieg in die Informatik mit Java

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Kommunikation. Björn und Georg

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase

KAPITEL. Ernst Pfannenschmidt und Paul Watzlaw

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Einstieg in die Informatik mit Java

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Einstieg in die Informatik mit Java

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Remote Methode Invocation (RMI) ETIS SS05

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

Client/Server-Systeme

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

Kapitel 8: Serialisierbarkeit

11. Komponenten Grundlagen der Programmierung 1 (Java)

Der lokale und verteilte Fall

Servlet-zentrierte Architektur von Web-Anwendungen mit Java Servlets, Java Server Pages (JSPs) und Java Beans

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

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

-Testen verteilter Anwendungen

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

Transkript:

9.3 COM und DCOM (Microsoft 1990-99) COM Component Object Model Binärcode-Konvention für Schnittstellen von Klassen (= Binärcode in DLL- oder EXE-Dateien), ansprechbar über lokale Fernaufrufe (in getrennten Prozessen oder in gleichem Prozess) gute Interoperabilität zwischen Programmiersprachen DCOM Distributed COM Architektur: Client/Server mit Fernaufrufen/erzeugung IDL: MIDL, Erweiterung der DCE IDL Dienste: Microsoft-spezifisch Anwendungen: Dienste vs9.3 1

9.3.1 Schnittstellen und Objekte Schnittstelle (interface) = (Schnittstellenbeschreibung) Menge von Operations-Signaturen, beschrieben mit MIDL für Dokumentation (und Stub-Erzeugung) (Schnittstellenimplementierung) Vektor von Adressen von Prozeduren ( vtable, binär, sprachunabhängig!) Objekt (object) = Menge von Schnittstellen gemäß Ein Objekt implementiert mehrere Schnittstellen vs9.3 2

Jede Schnittstelle trägt einen eindeutigen Bezeichner (interface identifier, IID, 128 bits). Jede Schnittstelle ist Erweiterung der Schnittstelle IUnknown. Jedes Objekt implementiert die Schnittstelle IUnknown : interface IUnknown // MIDL-Text { HRESULT QueryInterface([in] REFIID iid, [out]void** ppvobject); } // Adresse der Schnittstelle iid beschaffen ULONG AddRef(void); // Verweiszähler erhöhen ULONG Release(void); // Verweiszähler verringern vs9.3 3

Beispiel einer Schnittstellenbeschreibung mit Angabe eines IID: [ object, uuid(0000010c-0000-0000-c000-000000000046) ] // IID Interface ID interface Ipersist : IUnknown { typedef [unique] IPersist *LPPERSIST; } HRESULT GetClassID([out] CLSID *pclassid); vs9.3 4

Typische bildliche Darstellungen: Schnittstelle Ipersist vtable QueryInterface AddRef Release GetClassID Objekt mit diversen Schnittstellen IUnknown IPersist.... vs9.3 5

9.3.2 COM - Component Object Model http://msdn.microsoft.com/library Component Development Klasse (class) = Binärcode für Objekterzeugung und -operationen, identifiziert durch eindeutigen class identifier, CLSID Zuordnung zwischen CLSID und Code-Datei(en) - DLL oder EXE - ist im Windows Registry vermerkt. Eine Datei kann Code für mehrere Klassen enthalten. Class Object / Class Factory = Fabrikobjekt, das erzeugt werden muß, bevor mit seiner Hilfe Objekte der zugehörigen Klasse erzeugt werden können vs9.3 6

Standard-Schnittstelle einer Class Factory: interface IClassFactory : IUnknown { HRESULT CreateInstance([in] IUnknown *punkouter, // falls Aggregation [in] REFIID iid, // Schnittstellentyp [out]void** ppvobject); // erzeugtes Objekt, nicht initialisiert } HRESULT LockServer([in] boolean lock); // Erhöhung/Verringerung des Sperrzählers, // hält Fabrik-Programm im Speicher Implementierung einer Klasse muß auch eine Class Factory mit dieser Schnittstelle bereitstellen. vs9.3 7

Erzeugung eines privaten Objekts (!) über Class Factory: CoGetClassObject (clsid, context, NULL, IID_IClassFactory, (LPLPVOID)&factory); server bei DCOM factory->createinstance(outer, iid, (LPLPVOID)&object); object->init(...); Ort der Fabrik und Objekterzeugung wird durch Bits in context bestimmt: internal: local: remote:... DLL im gleichen Prozess/Adressraum EXE in anderem Prozess/Adressraum, aber auf gleicher Station DLL oder EXE auf anderer Station (DCOM) vs9.3 8

Fabrikobjekt erlaubt beliebig viele Objekterzeugungen, auch mit verschiedenen Schnittstellen (soweit unterstützt). Falls nur ein Objekt benötigt wird: CoCreateInstance(clsid, outer, context, IID_IClassFactory, (LPLPVOID)&object); beinhaltet CoGetClassObject(...); factory->createinstance(...); factory->release(); vs9.3 9

Realisierung von CoGetClassObject ist abhängig von context : COM sucht im Registry nach clsid und zugehörigen Einträgen für DLL- und EXE-Dateien: wenn internal und DLL vorhanden, DLL laden, benutzerdefinierte Prozedur aufrufen, die Fabrik liefert: DllGetClassObject(...); sonst: wenn local und EXE vorhanden, Server-Prozess starten; dieser erzeugt Fabrik und registriert sie mit CoRegisterClassObject(...); COM wartet die Registrierung ab und lädt dann beim Klienten die Proxy DLL für die Fabrik. sonst: wenn remote siehe 9.3.3 vs9.3 10

9.3.3 DCOM - Distributed COM = COM + echte Fernaufrufe + Sicherheit + Threading ( NT Servers) MIDL Compiler = Vertreter-Erzeuger, erzeugt C/C++ Code für Vertreter ( proxies ) und Treiber ( stubs ) Fernaufrufe: - benutzen DCE RPC, - at-most-once-fehlersemantik, - Orphan Detection Fernerzeugung einer Objektfabrik ist möglich, wenn im lokalen Registry unter der clsid ein entsprechender Eintrag steht, mit Daten RemoteServerName = Stationsname oder adresse ActivateAtStorage = "Y" oder "N" (für Aktivierung persistenter Obj.) Codes von Klassen vs9.3 und Klienten sind ortstransparent! 11

Benennung einer Station im Klienten-Programm: Wähle als 3. Argument von CoGetClassObject(clsid, context, server,..) einen Verweis auf Verbund vom Typ COSERVERINFO (reserviert, Stationsname oder adresse, Autorisierung, reserviert)! Code kann auch DLL statt EXE sein - dann wird spezielles Standard-EXE ( surrogate ) geladen, welches DLL lädt. vs9.3 12

Objektifizieren von Daten*: CoGetInstanceFromFile(server, // or NULL (local) clsid, punkouter, context, filemode, filename, lengthof, &resultsarray); // contains interfaces CoGetInstanceFromIStorage(...); *ähnlich in Java: ClassLoader.defineClass(byte[],...) vs9.3 13

9.3.4 Monikers und Running Object Table Moniker ( Spitzname ) = Verweisobjekt/Aktivator, z.b. File Moniker: Objekt mit Bezug auf Datei = persistentes Objekt, implementiert IMoniker mit Operation BindToObject, die das persistente Objekt aktiviert falls nicht bereits aktiv. Erzeugung: Benutzung: CreateFileMoniker(LPSTR pathname, LPMONIKER *pmk) BindToObject(.,., REFIID iid, void **ppvobject) beschafft CLSID aus Dateityp (Registry!), macht damit CoCreateInstance (falls nicht aktiv!), lädt die Daten aus der Datei und beschafft ppvobject mittels QueryInterface vs9.3 14

Aktive Objekte werden in der Running Object Table (ROT) registriert, werden ggfls. von mehreren Prozessen gemeinsam benutzt. Schnittstelle für ROT wird erhalten mit GetRunningObjectTable und hat Operationen Register - macht Eintrag (Moniker, Objekt), liefert Kennung GetObject - liefert Objekt für Moniker Revoke... - entfernt Eintrag mit Kennung vs9.3 15

9.3.5 Visual J++ mit DCOM Alternative zu RMI, gute Abstraktion von DCOM s technischen Details MIDL beschreibt Schnittstelle IAccount für Beispiel Konto-Objekte MIDL-Java-Übersetzer erzeugt Package Schnittstelle Proxy account mit account.iaccount und account.account implements IAccount Server: import com.ms.com.*; import account.*; class Account implements IAccount { public int deposit(int a) throws ComException {...}... } vs9.3 16

Werkzeug javareg übernimmt Generierung und Registrierung der zugehörigen COM-Komponente Klient: import com.ms.com.*; import account.*;...... IAccount acc = (IAccount)new Account(no,bal);... acc.deposit(amount); // may throw ComException... new veranlasst: Erzeugung eines Vertreterobjekts, dabei Auffinden der Komponente (Registry!) und dort Erzeugung des Originalobjekts vs9.3 17

9.3.6 COM+ Sprachunabhängiges Verbergen der meisten COM/DCOM-Details: Class Factory Reference Counting Query Interface IDL!..... durch Werkzeuge zur automatischen Generierung von Fabriken,..... sowie erweiterte Laufzeitunterstützung. vs9.3 18