Seminar-Layout
Download
Report
Transcript Seminar-Layout
COM (Component Object Model) /
DCOM (Distributed COM)
Evgenij Kuznecov
Gliederung
Einführung
Entwicklungsziele
COM
Binäre Interoperabilität
COM- Objekte
Interfaces / Schnittstellen
Klassen
Registry
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–2
Gliederung (2)
DCOM
Serverarten
Sicherheitsmechanismen
Kommunikationsaufbau
Wiederverwendung von Objekten
Automation
Threads von DCOM
Ausblick auf COM+
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–3
Einführung
komponentenbasierte Softwareentwicklung in Windows-Umgebungen
Basistechnologie für verteilte Systeme
ActiveX, DNA(Dynamic InterNet Applications ) oder OLE(Object
Linking & Embedding) basieren letztendlich auf COM
1996 ein verteiltes Komponenten-Modell entwickelt. Um dies
auszudrücken wurde COM um den Buchstaben D für distributed
erweitert und hieß damit DCOM.
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–4
Entwicklungsziele
• Interoperabilität
• Zusammenarbeit zwischen Applikationen in verschienenen
Programmiersprachen
• Skalierbarkeit
•
Keine Beschränkung hinsichtlich der Zahl von Kommunikationspartnern
oder ihrer Größe
• Sprachenunabhängigkeit
• Unterstützung beliebiger Programmiersprachen
• Verteilungstransparenz
• Für einen Client bleibt verborgen, wo die verwendete Komponente liegt
• Robustheit gegenüber Weiterentwicklung
• Änderung von Komponenten soll keine Auswirkung auf existierende Clients
haben
• COM verwendet als architekturelles Prinzip das Broker-Pattern.
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–5
Broker-Pattern Struktur
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–6
COM
Zusammenarbeit verschiedener Applikationen
Client / Server - Prinzip.
Einem Client zu ermöglichen, auf die Dienste eines Servers
zugreifen
binäres Format
wie die auszutauschenden Objekte im Speicher abzulegen sind
Dienste durch Interfaces
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–7
Binäre Interoperabilität
Motivation
unabhängige binäre Anwendungen
Lösung
virtuelle Tabellen (VTBL)
einheitliche Position von Methoden aus Interface in jeder VTable
(Handle)
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–8
COM - Objekte
Bei COM - Objekten handelt es sich um die Instanzen zuvor definierter
Klassen
eindeutiger Identifikator (Class Identifier CLSID)
Vermeindung der Namenskonflikte
Festlegung noch vor der Entwicklung einer Klasse
Binärer Format
API mit der Bezeichnung "CoCreateGuid„
GUIDGEN.EXE oder UUIDGEN.EXE
erstellten CLSID's werden in den Headerdateien abgelegt
Werden nur von Entwickler des jeweiligen COM- Objektes benötigt
oder von Entwicklern die dieses Objekt in einem Ihrer Projekte
weiterverwenden
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–9
Guid
48 Bits = Rechnerspezifisch
60 Bits = Zeitstempel (100Nanosekunden-Intervalle
seit dem 15.10.1582)
Überlauf ca. im Jahr 3400
4 Bits = GUID-Versionsnummer
16 Bits = aus Systemzeit und
Adresse der Netzwerkkarte
berechnet
Universität Bonn, Institut für Informatik III
Typedef struct GUID
{
DWORD Data1;
// 32 Bit
WORD Data2;
// 16 Bit
WORD Data3;
// 16 Bit
Byte Data4[8];
// 64 Bit
}
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–10
Interfaces
Zugriff auf die Funktionalität von Komponenten
Mehrere Interfaces sind erlaubt
semantisch zusammengehörige Gruppe von Methoden
Facette eines Objekts
Erzeugen: Interface Definition Language (IDL)
[Attributes] Elementname Typename {memberdescriptions}
Kontrakt zwischen dem Anbieter und dem Nutzer
zum Beispiel Methoden wie save() zum Datensichern und nicht
etwa zum Löschen zu verwenden.
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–11
Beispiel
erzeugeST
löscheSt
bearbeiteSt
IStudenten
IProfessoren
erzeugePr
löschePr
bearbeitePr
Das COM - Objekt in der Abbildung besitzt zwei Interfaces:
IStudenten und IProfessoren
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–12
Beispiel
Microsoft Interface Definition Language MIDL
[Attributes] Elementname Typename {memberdescriptions}
// interface IStudenten
[
object,
uuid(12345678-1a2b-3d4e-1111-123456789abc),
helpstring(“Studenten")
]
interface IStudenten : IUnknown
{
HRESULT erzeugeST([in] LPSTR eStudent);
HRESULT löscheST([in] LPSTR lStudent);
HRESULT bearbeiteST( [in] LPSTR bStudentAlt,
[in] LPSTR bStudentNeu);
};
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–13
Interfaces (2)
Der Zugriff über Schnittstellenzeiger (Handles)
Der Wechsel des Zugriffes von einem Interface auf ein anderes wird
als "interface navigation" bezeichnet
Interface Iunknown
QueryInterface:
AddRef:
Release:
liefert "Handle" auf gewünschtes Interface
explizite Speicherverwaltung
explizite Speicherverwaltung
interface Iunknown
{
virtual HRESULT QueryInterface(IID& iid, void **ppv) = 0;
virtual ULONG AddRef() = 0;
virtual ULONG Release() = 0;
}
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–14
Beispiel
Addref wird automatisch bei der Erzeugung eines Objektes aufgerufen
Release wird automatisch bei der Löschung eines Objektes aufgerufen
class CBeispielObjekt : Iunknown
{ private:
ULONG cRef;}
CBeispielObjekt::AddRef(void){ //AddRefULONG
return ++cRef;
}
CBeispielObjekt::Release(void){ //ReleaseULONG
cRef--; if (cRef == 0)
{
delete this; }
return cRef;
}
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–15
Klassen
Klassen sind von einer oder mehreren Schnittstellen abgeleitet
Aufgaben:
Interfaces implementieren
Memberfunktionen implementieren
eindeutige GUID - „Class Identifier" (CLSID)
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–16
Registry
alle wichtigen Informationen zu den COM- Klassen
friendly name, in diesem Fall “Tail Rotor Simulator”
Servertype, hier InprocServer32
Ort des Servers: „C:\Helicopter\TailRotor.dll“
Welche Threads unterstützt werden, hier „Apartment Threads“
ProgID: ist nicht eindeutig ist
TypeLib: Die TypeLibraries enthalten Typinformationen über die
Komponente, ihre Interfaces, ihre Methoden. Sie liegen als Binärfile vor
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–17
DCOM
Erweiterung des COMs
Bearbeitung der Objekte,die sich auf verschiedenen Rechnern befinden
Aufsetzt auf RPC(Remote Procedure Call) – Verfahren
unterstützt
TCP : Transmission Control Protocol
UDP : User Data Protocol
IPX : Internetwork Packet Exchange
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–18
Serverarten
Klasse jedes COM – Objektes liegt in binärer Form (entweder EXE
oder DLL) vor und wird als COM-Server bezeichnet
in-process-server
Server die als DLL ( Dynamic-Linked-Library ) vorliegen
werden direkt in den Adressraum des Clients geladen
hohe Geschwindigkeit
out-process-server (.EXE : Programm)
ein eigener Adressraum
Die reservierten Ressourcen werden zwischen den die Dienste des
Servers in Anspruch nehmenden Clients aufgeteilt
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–19
Ablauf de Kommunikation
Proxy
exakt dieselben Schnittstellen wie das ihm zugeordnete COM- Objekt
Clients verweisen auf die Schnittstellenimplementierung des Proxy
Einrichtung eines Kommunikationskanals
Konvertierung der Parameter (Marshaling)
Weiterleitung der Anfrage
Rückmeldung der Ergebnisse
Stub
Verbindungsaufbau mit dem Client
Empfang von Aufrufen
Entpacken von Parametern (Demarshaling)
Aufruf des COM- Objekts (Dispatching).
LPCs (Local Procedure Calls) - Kommunikation von Proxies und Stubs auf
derselben Maschine
RPCs (Remote Procedure Calls ) - Kommunikation über
Maschinengrenzen
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–20
Ablauf der Kommunikation(2)
Client Process
In Proc
Object
LPC
Local
Object
Local Server
Com
Local Server Process
RPC
Remote
Object
Remote Server
Com
Remote Server Process
Stub
In-Proc-Server
Client
Application
Local
Object
Proxy
Stub
COM
Remote
Object
Proxy
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–21
Imoniker
Es gibt keine Möglichkeit eine unterbrochene Verbindung wieder
herzustellen
Zuweisung eines symbolischen Name
Eine eindeutige Objektidentifikation
Speichern und Laden eines Zustands eines Objekts
ein neues Objekt erzeugen
Vorgang der Erzeugung muss explizit durch den Client erfolgen
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–22
Sicherheitsmechanismen
activation security legt fest (und überwacht) wer beispielsweise COM
Server starten darf
call security dient der Regulierung des Zugriffs auf die Funktionen des
Interfaces eines COM – Objektes
Um überhaut Zugriff auf die benötigten Dienste zu bekommen muss
sich der Benutzer erst authentifizieren
6 Authentifizierungsebenen
z.B. RPC_C_AUTHN_LEVEL_NONE Keine Authentifizierung nötig
Festlegung der Zugriffsrechte auf Schnittstellen
Festlegung der Zugriffsrechte auf Ressourcen
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–23
Kommunikationsaufbau
Informationen über einen "entfernten" COM - Server
Struktur COSERVERINFO
typedef struct _COSERVERINFO
{
DWORD dwReserved1;
LPWSTR pwszName;
COAUTHINFO *pAuthInfo; Authentication - Einstellungen
DWORD dwReserved2;
} COSERVERINFO;
pwszName : zeigt auf den Namen des zu benutzenden Computers
pAuthInfo : Zeiger auf eine COAUTHINFO - Struktur, legt activation
security fest
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–24
Kommunikation
Erzeugen der Objekte
CoGetClassObject – finden des Objektes
CoCreateInstance - erzeugen des Objektes
Aktivierung des Objektes durch Service Control Manager.
CoCreateInstanceEx mehrere Schnittstellenzeiger auf dasselbe Objekt
Server, der Objekte nach außen zur Verfügung stellt, bezeichnet
DCOM als Objektexporteur
Client
Server (Objekt)
Proxy
Stub
Service Control Manager
Service Control Manager
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–25
Kommunikation (2)
1 CoCreateInstance() aufrufen
2 in Registry nachschauen (lokal)
3 in Registry nachschauen und Objekt aktivieren (entfernter Rechner)
4 Schnittstellenzeiger zurückliefern
5 Schnittstellenzeiger benutzen
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–26
Wiederverwendung von Objekten
keine Implementationsvererbung sondern Interfacevererbung
zwei Arten von Wiederverwendung in DCOM
Containment/Delegation
Aggregation
Es gibt jeweils ein inneres und ein äußeres Objekt
Gemeinsam ist beiden, Sprachunabhängigkeit, da die
wiederverwendeten Objekte als Binärcode vorliegen können
IUnknown
Äußeres Objekt
A
IUnknown
A
Äußeres Objekt
B
B
B
B
C
C
C
C
Containment/Delegation
Universität Bonn, Institut für Informatik III
Aggregation
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–27
Containment / Delegation
die Interfaces des inneren Objektes werden vom äußeren Objekt neu
implementiert
Innerhalb dieser Neuimplementierung werden dann die Interfaces des
inneren Objektes aufgerufen
Somit greift der Client nicht direkt auf das wiederverwendete Interface
zu
die Möglichkeit neue Funktionalität dem Interface hinzuzufügen
Das Verhältnis entspricht einem Client-Server-Verhältnis
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–28
Aggregation
Direkter Zugriff auf die Interfaces des inneren Objekts
Problem:
Memberfunktion Queryinterface des inneren Objektes kennt die
Interfaces des äußeren Objektes nicht
Lösung
Einführung Zweier IUnknown Interfaces
Delegating Iunknown
– IUnkown- Interface des inneren Objektes
– eine Referenz auf das IUnknown- Interface des äußeren Objektes
Nondelegating Iunknown
– Das Nondelegating IUnknown wird benötigt, wenn nicht über ein
äußeres Objekt auf das innere Objekt zugegriffen wird. In diesem
Fall werden Anfragen von dem inneren Objekt selbst bearbeitet.
ein Objekt muss schon bei der Implementierung auf Aggregation
ausgelegt werden (Implementierung von Delegating und
Nondelegating IUnknown).
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–29
Aggregation
IUnknown
A
Äußeres Objekt
IUnknown
B
B
C
C
Aggregation
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–30
Automation
dynamische Methodenaufrufe
es wird erst zur Laufzeit bestimmt, welche Methode aufgerufen wird
Interface IDispatch
für Interpretative Umgebungen und Scriptsprachen
Schnittstelle zu mehreren eigentlichen DCOM- Interfaces
interface
HRESULT
HRESULT
HRESULT
HRESULT
};
IDispatch
{
getTypeInfoCount(/*
getTypeInfo(/*
getIDsOfNames(/*
invoke(/*
:
IUnknown
...
...
...
...
*/);
*/);
*/);
*/);
getTypeInfo() textuelle Darstellung der Methoden
Mit invoke() teilt der Client mit, welche Methode er mit welchen
Parametern aufrufen möchte
getIDsOfNames Abbildung von Strings auf Zahlenwerte
Möglichkeit, Interfaces als ein Dual Interface zu implementieren
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–31
Threads in DCOM
Apartment Thread
Free Thread
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–32
Apartment Thread
Apartment Thread
single- threaded
ein Objekt gehört im Prinzip dem erzeugenden Thread
alle Zugriffe auf das Objekt müssen über den erzeugenden Thread
erfolgen
DCOM- Klassen müssen nicht thread- safe implementiert werden
Ap. Thread
Client
Appl.
bel. Thread
Client
Appl.
Objekt
Stub
Universität Bonn, Institut für Informatik III
Proxy
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–33
Free Threads
Free Thread
multi- threaded
erzeugten Objekte gehören nicht mehr nur dem erzeugenden Prozess
alle Prozesse können beliebig auf das Objekt zugreifen
Klassen müssen thread- safe implementiert weden
Implementierung von Marshalling und Unmarshalling
Client
Appl.
Client
Appl.
Objekt
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–34
Ausblick auf COM+
Weiterentwicklung von DCOM
Wegfallen des Programmier-Overheades (z.B. Referenzzähler,
Implementierung von IUnknown usw.)
GUIDs - interne Verwendung
Konstruktoren und Destruktoren (Objekte initialisieren)
Kontrolle des Lebensdauers von Objekten
Implementationsvererbung
jede maschinenspezifische Datenbank statt Registry
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–35
Fragen?
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–36
Vielen Dank
Universität Bonn, Institut für Informatik III
Vorlesung Softwaretechnologie, Wintersemester 2003-2004
1–37