i.2.3. dcom distributed component object model
TRANSCRIPT
Dr. Welf Löwe und Markus Noga 2
Literatur
Es scheint keine guten COM Bücher zu geben.
Don Box. Essential COM. Addison-Wesley. 1998. Viel zu detailliert, zu wenig abstrakte Konzepte. Eher ein HackerBuch. Plasil, F, Stal, M. An architectural view of distributed objects and components in CORBA, Java RMI, and COM/DCOM. Software - Concepts and Tools, 19: 14-28. Technischer Überblick. Recht knapp und gut. Empfohlen zur Prüfungsvorbereitung.
Dr. Welf Löwe und Markus Noga 3
DCOM-Entwicklung
DCE (distributed computing environment)OLE (object linking and embedding) - ActiveX: OLE-Erweiterung COM (component object model) DCOM (distributed COM)
Grenzen fließend!
Dr. Welf Löwe und Markus Noga 4
DCE
OSF (open software foundation) ähnlich Corba OMGNicht Microsoft standardVerteiltes BetriebssystemPlattformunabhängigBasiskommunikation RPCKonzept von IDL, mit generierten Client-Server-Stubs etc.
Dr. Welf Löwe und Markus Noga 5
OLE -ActiveX
OLE (object linking and embedding)Ende der 80er für Microsoft Office. Ermöglicht Verbunddokumente (Spreadsheets undGraphiken in Texten, von den jeweiligen Werkzeugen bearbeitet), Entspricht also OpenDoc (Apple)
Dr. Welf Löwe und Markus Noga 6
COM
COM (component object model) Komponentenarchitektur für Microsoft Windows 1993Schnittstellenbeschreibungen mit MIDL (Microsoft IDL), – aus DCE (distributed computing environment) abgeleitet – ähnlich CORBA IDL
Dr. Welf Löwe und Markus Noga 7
Ursprüngliche Trennung OLE und COM
OLEapplication
services
Basis
COM ist Basiskomponentenarchitektur für aufgesetzte Dienste
Dr. Welf Löwe und Markus Noga 8
Wiederverwendete Technologie
Component Object Model (COM)
Object-Oriented
Model
Client/ServerModel
Dynamic Linking
Dr. Welf Löwe und Markus Noga 9
(D)COM
Binärstandard Interoperabilität zwischen Komponenten– Sprachunabhängig– Über Prozessgrenzen– Über Rechnergrenzen
Reflexion und Dynamisches Nachladen von KomponentenVersionierung von Komponenten und Schnittstellen
Dr. Welf Löwe und Markus Noga 10
Komponentenmodell
MyComponent (DLL or EXE)
IUnknown
IViewer(COM Interface)
CoViewer(COM Object)
IUnknown
ISecure CoSecureIPersist
IUnknown
ILoveComCoPersonality
IHateCom
Dr. Welf Löwe und Markus Noga 11
Grundfunktionalität
Binärstandard für Aufrufe zwischen KomponentenGruppierung (schwach) typisierter Funktionen zu Schnittstellen (interfaces)Basisschnittstelle (IUnknown)– Reflektion über Interfaces anderer Komponenten– Reference counting zur Verwaltung von Lebenszyklen
Eindeutige Identifikation von Komponenten und Schnittstellen (GUID) Komponentenfabrik transparent über– Sprache– Prozess– Rechner
Dr. Welf Löwe und Markus Noga 12
Binärer Aufrufstandard
Entsprechend C Standard:– Layout von virtuellen Funktionstabellen (vtables)– Aufruf der Funktionen über vtables
Klient kennt vtable Aufruf möglich in allen Sprachen, die Funktionen über Zeiger aufrufen können (C, C++, SmallTalk, Ada, Basic, ...)
Dr. Welf Löwe und Markus Noga 13
Schnittstelle und Implementierung
Komponente kann mehreren Schnittstellen genügenKomponentenreferenz ist immer Referenz auf eine Schnittstelle
COMCOMObjectObject
IUnknown
ClientClient
Dr. Welf Löwe und Markus Noga 14
Schnittstelle
Sammlung von Funktionen, die eine Komponente anbietetSignatur ist Vertrag – Schwach typisiert bzgl. Werten und Schnittstellen
Eindeutige Namen– Weltweit eindeutig– Unveränderlich – Vertrag für die Ewigkeit
Vererbung auf Schnittstellen– Mehrfach– Jedes Interface muss (transitiv) von IUnknown erben
Konventionen für die Benennung der Methoden zur DokumentationUnterschiedlich zu– Klassen (Implementierung von Schnittstellen)– Komponenten
Dr. Welf Löwe und Markus Noga 15
Beispiel
interface ILookup : public IUnknown{
public:virtual HRESULT __stdcall LookupByName
(LPTSTR lpName,TCHAR **lplpNumber) = 0;
virtual HRESULT __stdcall LookupByNumber(LPTSTR lpNumber, TCHAR **lplpName) = 0;
};
COMCOMObjectObject
IUnknown
ILookup
Dr. Welf Löwe und Markus Noga 16
Identifikation (GUID)
Global und zeitlos eindeutig (general unique id)128-bit Name (enthält Zeit und Boardid)Automatische VersionierungVerhindert NamenskonflikteLesbare Namen müssen explizit zugeordnet werden– nur für Dokumentation und Bequemlichkeit– Lokaler Gültigkeitsbereich
Alias für DCE RPC Universal Unique ID (UUID)
0xc4910d2
COMCOMObjectObject
0xc4910d1
CLSIDs - GUIDs für COM Klassen
IIDs - GUIDs für Schnittstellen
Dr. Welf Löwe und Markus Noga 17
Identifikatoren
Automatisch generiert– uuidgen.exe Microsoft Programm– CoCreateGuid aus der COM API
Im Binärcode enthalten und dynamisch getestetReferiert über lokale Namen
DEFINE_GUID(CLSID_PHONEBOOK, 0xc4910d70, 0xba7d, 0x11cd, 0x94, 0xe8, 0x08, 0x00, 0x17, 0x01, 0xa8, 0xa3);
DEFINE_GUID(IID_ILOOKUP, 0xc4910d71, 0xba7d, 0x11cd, 0x94, 0xe8, 0x08, 0x00, 0x17, 0x01, 0xa8, 0xa3);
Dr. Welf Löwe und Markus Noga 18
Eindeutige Identifikatoren
Wie wird die Evolution von Software unterstützt
IUnknown: QueryInterface - Abfragen, Aufruf neuer Funktionen ohne Übersetzung
Interfaces unveränderlich- Komponenten unterstützen alte Schnittstellen- Versionierung von Hand
- Rückwärtskompatibilität
Wie wird Interaktion von Komponenten unterstützt
- Performance-Verlust bei Kommunikation mit einem COM Objekt im selben Prozess kann vernachlässigt werden
Indirekte Funktionsaufrufe(doppelte Indirektion, vtables)
Dr. Welf Löwe und Markus Noga 19
Vorteile-Nachteile der GUIDs
Vorteile– Wiederverwendung, Wiedererkennung– Schnittstellen Vererbung eindeutig– Transprarenz
• In-process, cross-process, remote• Programmiersprache
Nachteile– Viele ähnliche Interfaces– Keine Möglichkeit, Entwicklungen zusammenzuführen
Dr. Welf Löwe und Markus Noga 20
Interface IUnknown
Unterstützt von allen COM ObjektenBasisfunktionalität:
Dynamically discover other interfaces supported by an object
1 QueryInterface
2 AddRef Management of an object´s life cycle3 Release
Dr. Welf Löwe und Markus Noga 21
IUnknown in MIDL
interface IUnknown {
virtual HRESULT QueryInterface(IID& iid, void** ppvObj) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
}
Dr. Welf Löwe und Markus Noga 22
Abfrageschnittstelle
Laufzeittest, ob eine Schnittstelle unterstützt wirdMechanismus, um tatsächlich einen Zeiger auf ein Schnittstellenobjekt zu bekommen– Client: Anfrage auf das Schnittstellenobjekt, das eine Funktion
unterstützt– Server:
• kennt er die entsprechende Schnittstelle, wird der Zeiger zurückgegeben und Erfolg gemeldet
• Kennt er sie nicht, Fehlermeldung
Dadurch schwache Typisierung
Dr. Welf Löwe und Markus Noga 23
Lebenszyklus
Referenzzähler– AddRef: Aufgerufen bei Referenzierung oder Kopieren der Referenz– Release: Aufgerufen, wenn Referenz nicht mehr benötigt– Löschen des Objektes, wenn keine Referenz vorhanden
Extrem Fehlerträchtig aber Sehr einfach zu implementierenAddRef:
reference counter = reference counter + 1
Release:
reference counter = reference counter - 1
if reference counter == 0: delete component object, release resources
Dr. Welf Löwe und Markus Noga 24
BeispielLPLOOKUP *pLookup;TCHAR szNumber[64];HRESULT hRes;
// Call QueryInterface on the component object // PhoneBook, asking for a pointer to the ILookup // interface identified by a unique interface ID.
hRes = pPhoneBook->QueryInterface(IID_ILOOKUP, &pLookup);
if( SUCCEEDED( hRes ) ) {// use Ilookup interface pointerpLookup->LookupByName("Daffy Duck", &szNumber); // finished using the IPhoneBook interface pointerpLookup->Release();
}
else { // Failed to acquire Ilookup interface pointer.
}
Dr. Welf Löwe und Markus Noga 25
Ergebnis der Anfrage
HRESULT - 32-bit long Integer
1 bit 2 bits 13 bits 16 bits
SeverityField
For futureuse
Facility Reason
ErfolgFehler
Null FehlerklasseVordefiniert von COMZentral herausgegeben
Fehlerverursacher
FehlerwertFrei programmierbar
Dr. Welf Löwe und Markus Noga 26
COM Bibliothek
Implementierung der Standard API Funktionen für KommunikationSelbst eine (System-)Komponente– Laufzeitunterstützung von COM– Dynamische Bibliotheken– COMPOBJ.DLL, OLE32.DLL
Verantwortlich– Objekterzeugung– Verbindungen zwischen Objekten herzustellen und zu koordinieren
Dr. Welf Löwe und Markus Noga 27
Zugriff einer Komponente
CLSID ServerCode
(1) Anfrage mitCLSID
COMBibliothek
ClientApplication
Object
ServerClient(5) Aufruf
(3)
Registry
(4)Objekt InterfaceZeiger an Klienten
Object Interface
Finde (Objekt-) Implementierung,Lade server code
(2) Nachschlagen in der Registry
Dr. Welf Löwe und Markus Noga 28
Registrierdatenbank (registry)
Übernommen aus COMVerwaltet Schnittstellen, Implementierungen von Klassen – registry in NT 4.0: hierarchisch, auf Verzeichnisse im Dateisystem
abgebildet– entsprechen den CORBA interface/implementation repositories– Schlüssel: CLSID
Service Control Manager (SCM) kapselt registry– findet Klassen und ihren Code in der Registrierdatenbank– aktiviert ihn in einem Fabrikprozess – erzeugen Objekte bereits aktiver Fabrikprozesse– dazu: Klassen müssen registriert werden
Dr. Welf Löwe und Markus Noga 29
Einträge
CLSID12345678-ABCD-1234-5678-9ABCDEF00000
12345678-ABCD-1234-5678-9ABCDEF00012
Server Code
LocalServer32 = C:\MyDir\MyServer.exe
InprocServer32 = C:\object\textrend.dll
Pathname of server DLL(in-process)
Pathname of server EXE(local, out-of-process)
Servertyp
Dr. Welf Löwe und Markus Noga 30
Erzeugen des Objekts
(1) CoCreateInstance
SCM
ClientApplication
Client
(4)
Server
(5) Erzeuge Objekt
Fabrik
Object(7)
(6) IClassFactory
Registry
(3)
(2)
Dr. Welf Löwe und Markus Noga 31
Erzeugen der Fabrik
SCM
ClientApplication
Object
Client
(1) CoGetClassObject(4)
(6)
(5) CreateInstance
Server
Registry
(5‘) Erzeuge Objekt
Fabrik
Object
IClassFactory
(3)
(2)
Dr. Welf Löwe und Markus Noga 32
Finden der Komponente
Server ist ein ausführbares Programm– COM ruft Programm auf– Implementiert eine Klassenfabrik um Instanzen zu erzeugen– Server registriert diese Fabrik CoRegisterClassFactory()– COM wartet darauf, um Erzeugung von Objekte auszuführen
Server ist eine Dynamische Bibliothek (DLL)– COM lädt DLL– Aufruf DLLGetClassFactory()
Dr. Welf Löwe und Markus Noga 33
Reihenfolge der Suche
Client SCM
COM Cache...
Registry
InprocServerLocalServiceLocalServer
1
3
245
Dr. Welf Löwe und Markus Noga 34
Reihenfolge der Anfragen
1. Zur Aktivierung eines Fabrikprozesses zu einer CLSID2. Ob im aktuellen Prozess bereits ein entsprechender
Fabrikprozess existiert3. Ob ein anderer Prozess eine entsprechende Fabrik
installiert (und registriert) hat4. Ob ein NT Service die Klasse implementiert5. An lokale Server, ihre unterstützten Fabriken zu
registrieren. Server werden gestartet.
Dr. Welf Löwe und Markus Noga 35
COM nach DCOM
COM DCOM
Standard fürInteroperabität zwischen
Adressräumen aufeinem Rechner
Standard fürInteroperabität zwischen
Rechnern
Lokale TransparenzFernaktivierungFernaufrufManagement für NebenläufigkeitManagement für SicherheitAlles bereits im Design von COM vorbereitet
Dr. Welf Löwe und Markus Noga 36
Transparenz
ClientClientGleicher Gleicher Prozess ComponentComponentProzess
ClientClient ComponentComponentCOMCOM
Client ProcessClient Process Server ProcessServer ProcessGleicheGleicheMaschineMaschine
COMCOMDCERPC
ClientClient
Server MachineServer MachineClient MachineClient MachineÜberÜberRechnerRechner--grenzegrenze COMCOM ComponentComponent
Dr. Welf Löwe und Markus Noga 37
DCOM Aufruf
Basiert auf DCE (RPC)Objektorientierter RPC (ORPC) – RPC + Dispatch
Plattformneutral, integriert in Windows
COMDistributed COM
DCE RPC
Machine A
COMDistributed COM
DCE RPC
Machine BORPC
RPC
Dr. Welf Löwe und Markus Noga 38
Distributed Computing Environment (DCE)
Thread Service
Remote Procedure Call
TimeService
DisklessSupport
Distri-butedFileSystem
Cell /GlobalDirectoryService
SecurityService
Distributed Applications
Local OS and Transportation Services
Dr. Welf Löwe und Markus Noga 39
Communikation in DCE
C lie nt S erver
R P C R un tim eS erv ices
T ran s portS erv ices
R P C R u n tim eS erv ices
T ran s portS erv ices
virtual Connection (Application
program)(Application
program)
ClientStub
ServerStub
RPC - Interface
RuntimeInterface
TransportInterface Remote Call
Return
Dr. Welf Löwe und Markus Noga 40
Kommt bekannt vor...
IDL-File
idl
Link
Client Server
RPC Runtime
RPC RuntimeClient Appl. Server Appl.
#include
Link
Server StubHeader FileClient Stub
Dr. Welf Löwe und Markus Noga 41
Interface Definition
Microsoft Interface Definition Language (MIDL)Erweiterung von DCE IDLErzeugung von nutzerdefinierten SchnittstellenNichts neues aber anders!
Dr. Welf Löwe und Markus Noga 42
Transparenz
COMCOMInIn--ProcessProcessServerServer
ClientClientAppApp
LocalLocalObjectObjectProxyProxy
RemoteRemoteObjectObjectProxyProxy
InIn--ProcessProcessObjectObject StubStub
LocalLocalObjectObject
Local Local ServerServer
Local Server ProcessLocal Server Process
COMCOM
StubStubRemoteRemoteObjectObject
Remote Remote ServerServer
Remote Server Remote Server ProcessProcess
Remote Server Remote Server MachineMachine
lightweightRPC
(local)
DLLEXE
(network)RPC RPC
Client Client ProcessProcess
COMCOM
Dr. Welf Löwe und Markus Noga 43
Fernzugriff in DCOM
Client SCM
COM Cache...
Registry
InprocServerNTServiceLocalServerRemoteServer
1
2456
3
SCM
COM Cache...
Registry
NTServiceLocalServerRemoteServerDLLSurrogate
1
2456
3
7
Dr. Welf Löwe und Markus Noga 44
Wie CORBA
Marshalling – automatische Übermittlung von Daten in verteilten Systemen– generiert aus IDL-Spezifikationen
Statischer und dynamischer, vermittelter Aufruf möglichObjekte auf dem Server können sequentiell oder gefädelt realisiert sein – ein Faden im Adressraum (Apartment, apartment model) – vielfädiger Adressraum (free threading model)
Jedes Objekt unterstützt die Schnittstelle zur Reflektion IUnknownJedes Objekt trägt eindeutigen Identifikator OBJREF mit:– OXID (Object Exporter Identifier), Bezeicher für Adressraum (Apartment)– OID (Object Identifier), Objekt global im Netzwerk– IPID (Interface Pointer Identifier), Interface in einem Adressraum
Persistenzdienste
Dr. Welf Löwe und Markus Noga 45
Persistente Objekte
Moniker (dt. Spitzname) kapseln Persistenz von Objektenentsprechen CORBA-Objektadaptern (BOAs) auf Serverseite Wie Stellvertreterobjekte– Einer pro Objekt – Nicht einer pro Servicekomponente
Namensraum beliebig (meist URL)können hierarchisch strukturiert sein
Dr. Welf Löwe und Markus Noga 46
Speziell in DCOM
GUID (Global Unique Identifier) – Eindeutiger Name für Klassen (CLSID) und Schnittstellen (IID) – vererbt aus DCEs UUIDs (universally unique identifiers) – BDA4A270-A1BA-11d0-8C2C-0080C73925BA– Durch IDL-Spezifkation der Komponente zur Schnittstelle bzw.
Klasse assoziiert– CoCreateGuid() global eindeutige Name
Keinen zentralen Broker (ORB) sondern ProxiesFassadenkomponentenKomponentenkategorie
Dr. Welf Löwe und Markus Noga 47
Vermitteln in DCOM (broking)
Broker nicht explizit ansprechbar (kein ORB-Konzept)– Statt dessen werden Stellvertreterobjekte, die das entfernte Objekt in der
eigenen Komponente vertreten (proxy-Objekte), angesprochen. Standardfall: dynamischer Aufruf flüchtiger, nicht-persistenter Objekte– Klasse finden und aktivieren, dann Objekte erzeugt– Allokation von Objekten mit abstrakter Fabrik auf Server, die die Verteilung
verbirgt (Schnittstelle IClassFactory ist Objektfabrik)– Stellvertreter in der eigenen Komponente vertreten (proxy-Muster). – CORBA fasst der ORB alle Stellvertreterobjekte zusammen– Ansprache der entfernten Objekte per OBJREF oder per Stellvertreter– Entferntes, dynamisch aufgerufenes Objekt muss IDispatch erfüllen
(indirekte Aufrufschnittstelle invoke(method,args))Statischer Aufruf möglich, wenn Stellvertreter und Objekt identisch
Dr. Welf Löwe und Markus Noga 48
Fassadenkomponenten
Zusammengesetzte Komponenten, die Fassadenobjekte enthalten– Mehrere Schnittstellen pro Komponente werden auf verschiedene
interne Objekte mithilfe eines Fassadenobjektes delegiert– Mächtiger aber langsamer als Mehrfachvererbung, denn
• Mehrfachvererbung ersetzt Delegation durch zusammenhängendes Speicherlayout eines Objektes
• Delegation und Aggregation: Indirektion aber keine Layout und Namenskonflikte
Menge der unterstützten Schnittstellen ab Allokation fest– Hängt von der Zusammensetzung der Komponente ab und muss
nicht statisch sichtbar sein, da ein Objekt rekursive angelegt wird.– Fassadenkomponenten kann man nicht dynamisch um neue
Dienste erweitern
Dr. Welf Löwe und Markus Noga 49
Komponentenkategorien
Ersatz für Vererbung von EigenschaftsschnittstellenEine Kategorie kann Eigenschaften / Merkmale ausdrücken Klassen, die die gleiche Menge von Schnittstellen erfüllen gehören zu einer Kategorie (Schlüssel CATID)Verwaltet durch den Kategorie Manager CLSID_StdComponentCategoriesMgr
Registrierung und Abmeldung von Kategorien in der Registrierdatenbank
Dr. Welf Löwe und Markus Noga 50
Dienste in DCOM
Vorhandene Dienste: (services)– Alle Microsoft-Werkzeuge sind als Dienste verfügbar (Spreadsheet,
Powerpoint, Datenbank, ODBC Datenbankverbindung, …), aber nicht standardisiert!
– Referenzzählende Abfallsammlung– Microsoft Transaction Server (MTS) ermöglicht flache und geschachtelte
Transaktionen– Ereignisdienst (publisher/subscriber pattern):
• Schnittstelle registrieren, • Bei Auslösung des Ereignisses wird sie aufgerufen (outgoing interface). • Schnittstelle durch connection point Objekt (IConnectionPoint) repräsentiert.• Publisher erfüllen IconnectionPointContainer und haben ein IconnectionPoint• Keine eigentständigen Ereignisobjekte.
Fehlende Dienste– Makler– Lizensierung
Dr. Welf Löwe und Markus Noga 51
Diskussion
Kein offizieller, kein offener, sondern proprietärer Standard– Änderungen jederzeit möglich und schon öfters durchgeführt
Keine standardisierten Dienste, nur proprietäre– DCOM ist ein hauptsächlich ein proprietärer Verdrahtungsstandard
Eingeschränkte Platformabhängikeit– DCOM war stark auf C++ orientiert, obwohl es jetzt andere Brücken für
andere Sprachen gibt (VisualBasic, Microsoft Java). Man muss aber dasbinäre Aufrufformat des Microsoft C++-Übersetzers erzeugen!
– DCOM war PC-gebunden, – Software AG stellt DCOM-Portierungen auf Unix her - EntireX
http://www.softwareag.com/corporat/solutions/entirex/entirex.htmProbleme mit der Sicherheit– DCOM ist binärer Standard - Binärcodes (Viren)– I love you virus: ein VDB script wird ausgeführt und wirft die
Mailerkomponente an, die lawinenartig Mails verschickt
Dr. Welf Löwe und Markus Noga 52
Wie die Zukunft aussehen wird
DCOM ist wegen der Marktdominanz von Microsoft nicht mehr aus dem Komponentenmarkt wegzudenken.Es gibt Brücken – von Corba nach DCOM, – von Java nach DCOM, – von Java nach Corba, – Nebeneinander der Ansätze möglich.
Java (EJB) - härtester DCOM-Konkurrent. Prognose der Gartner Group (Information week 10/99):– 75% aller Großunternehmen setzen bereits heute Java ein– Microsoft wird es nicht gelingen, Java an den Rand zu drängen.– Im Jahr 2002 wird Java die wichtigste Technologie für
Netzwerkapplikationen sein (bei mehr als 60% der Unternehmen)– Geschwindigkeit von Java spielt in 95% aller Anwendungen keine Rolle– JINI, die Java Technik für Netzdienste, wird 2003 de-facto Standard sein