9.3 COM und DCOM (Microsoft ) COM – Component Object Model

Slides:



Advertisements
Ähnliche Präsentationen
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Advertisements

COM-Programmierung mit Visual Basic 6
COM-Schnittstellen optimal einsetzen
DI Christian Donner cd (at) donners.com
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Referenzen und Zeichenketten
Sebastian Grahn Sebastian Kühn
DbjFileManager Paul Fruntzek Michael Stanek. Überblick Unterste Ebene im Schichtenmodell Schnittstelle zum BS (Low-Level) Aufgabenbereich: Persistente.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
JAVA RMI.
COM (Component Object Model) / DCOM (Distributed COM)
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Overwiew COM.
Remote Methode Invocation (RMI)
Einführung in Visual C++
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Erstellen von OLE-Servern
UML Begleitdokumentation des Projekts
Common Object Request Broker anhand eines Beispiels Aufgabestellung ( Ein Konto wird von einem Server verwaltet. Der Stand des Kontos wird.
Dr. Welf Löwe und Markus Noga1 I.2.3. DCOM Distributed Component Object Model.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Distributed Programming in.NET. Inhaltsverzeichnis 1) Einführung 2).NET Remoting 3) Web-Services 4) Vergleich.NET Remoting und Web- Services 5) Fazit.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
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:
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Welchen Problemen ist man bei heterogener, verteilter Programmierung ausgesetzt? Hardware: nicht einheitliche, inkompatible Systeme, verschiedene Leistungsfähigkeit.
Beschreiben Sie das Szenario wenn ein ORB einen Server aktiviert und eine Objektimplementation aufruft. Activate Server impl_is_ready Activate Object (GetID.
CGI (Common Gateway Interface)
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
7.1.5 Java RMI – Remote Method Invocation
Prof. Dr.-Ing. Franz-Josef Behr
Reinhard Stumptner Seminar Softwareentwicklung Dynamisches Laden und Binden in Java.
EPROG Tutorium #6 Philipp Effenberger
MTS Microsoft Transaction Server Martin Basziszta
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Vs Grundzüge der Fernaufruf-Implementierung = tatsächliche Aufrufbeziehungen Netz Fernaufrufdienst Transportdienst Hardware BS aus Bibl. Vertreter.
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
Persistenz: Objekt-Lebensdauer In RDBMS wird Lebensdauer von Werten durch ihren Typ festgelegt: Instanzen von Relationstypen sind persistent, alle anderen.
RelationentheorieObjektorientierte Datenbanken  AIFB SS C++-ODL (1/6) Erweiterung des deklarativen Teils einer C++-Klasse Datentypen d_String,
8.4 Microsoft.NET Framework =  CLR – Common Language Runtime ist objektorientierte virtuelle Maschine für Ausführung.
7.5.5 Namensdienste (bereits erwähnte Beispiele: Rmiregistry, Portmapper)  dienen der Abbildung von „Namen“ auf Verweise, Nummern,...  sollten ihre Information.
2 Datenabstraktion Geheimnisprinzip:
Vs Verteilte Verzeichnisse können ein verteiltes Betriebssystem unterstützen dienen der Abbildung von „Namen“ auf „Daten“ aller Art sollten ihre.
Java-Kurs Übung Besprechung der Hausaufgabe
Vs91 9 Middleware. vs92 Middleware, Verteilte Plattform (auch Verteilungsplattform*) bietet Verteilungsabstraktion für verteilte Anwendungsprogramme,
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von.
MD 4/02 CORBA Static/Dynamic Invocation Interface (SII/DII), Interface Repository.
2.6 Erinnerung: Programmverwaltung Quellencode (getrennt übersetzbare Programmteile) (source code) Übersetzer (compiler, assembler) Objektcode
9.5 Microsoft .NET Architektur: objektorientiert/Fernaufrufe (8.1.6 )
 Präsentation 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

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

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

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

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

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

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 } Implementierung einer Klasse muß auch eine Class Factory mit dieser Schnittstelle bereitstellen. vs9.3

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

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

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

= COM + echte Fernaufrufe + Sicherheit + Threading ( NT Servers) 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 und Klienten sind ortstransparent! vs9.3

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

Objektifizieren von Daten: CoGetInstanceFromFile(server, // or NULL (local) clsid, pUnkOuter, context, fileMode, fileName, lengthOf, &resultsArray); // contains interfaces CoGetInstanceFromIStorage(...); vs9.3

9.3.4 Monikers und Running Object Table Moniker („Spitzname“) = Verweisobjekt, 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: CreateFileMoniker(LPSTR pathname, LPMONIKER *pmk) Benutzung: 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

werden in der Running Object Table (ROT) registriert, 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

MIDL beschreibt Schnittstelle IAccount für Beispiel Konto-Objekte 9.3.5 Visual J++ mit DCOM leistet gute Abstraktion von DCOM‘s technischen Details – besser als RMI MIDL beschreibt Schnittstelle IAccount für Beispiel Konto-Objekte MIDL-Java-Übersetzer erzeugt Package account mit Schnittstelle account.IAccount und Proxy account.Account implements IAccount Server: import com.ms.com.*; import account.*; class Account implements IAccount { public int deposit(int a) throws ComException { .....} ..... } ! Original und Proxy tragen gleichen Namen – können nicht im gleichen Prozess verwendet werden vs9.3

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

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