Entwicklung verteilter Systeme mit CORBA

Werbung
Universität Hannover
Lehrgebiet Rechnernetze und Verteilte Systeme
Prof. Dr.-Ing. H. Pralle
Diplomarbeit
Entwicklung verteilter
Systeme mit CORBA
am Beispiel eines
Konferenz-Management-Systems
Verfasser:
Betreuer:
Erst-Prüfer:
Zweit-Prüfer:
Datum:
Bernd Böker
Dipl.-Ing. L. Grüneberg
Prof. Dr.-Ing. H. Pralle
Prof. Dr.-Ing. C.-E. Liedtke
17. Juni 1996
Hiermit versichere ich, daß ich diese Arbeit selbständig verfaßt habe und keine
anderen als die angegebenen Quellen und Hilfsmittel verwendet wurden.
Hannover, den 17. Juni 1996
Bernd Böker
Inhaltsverzeichnis
Inhaltsverzeichnis
i
Abbildungsverzeichnis
vii
Tabellenverzeichnis
x
1
Einleitung
1
2
Analyse eines Konferenz-Management-Systems
4
2.1
2.2
Funktionen des Konferenz-Management-Systems Confman . .
5
2.1.1
Arbeitsweise des Benachrichtigungssystems . . . . . .
5
2.1.2
Ermitteln eines Konferenz-Servers . . . . . . . . . . .
7
2.1.3
Unterstützung von Konferenzen mir mehreren Servern
7
2.1.4
Verwalten der Konfigurationsdateien . . . . . . . . . .
8
2.1.5
Einbinden eines Terminkalenders . . . . . . . . . . . .
8
Zusammenfassung der Analyse . . . . . . . . . . . . . . . . .
9
i
Inhaltsverzeichnis
3
ii
Klassische Mechanismen
3.1
3.2
3.3
4
Remote Procedure Call
10
. . . . . . . . . . . . . . . . . . . . .
10
3.1.1
Client-Server-Modell . . . . . . . . . . . . . . . . . . .
10
3.1.2
Funktionsweise des Remote Procedure Calls . . . . . .
11
3.1.3
ONC-RPC . . . . . . . . . . . . . . . . . . . . . . . .
12
3.1.4
Bewertung
. . . . . . . . . . . . . . . . . . . . . . . .
16
ToolTalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.2.1
Arbeitsprinzip . . . . . . . . . . . . . . . . . . . . . .
17
3.2.2
Prozeßorientierte Kommunikation . . . . . . . . . . . .
18
3.2.3
Objektorientierte Kommunikation . . . . . . . . . . .
19
3.2.4
ToolTalk-Architektur . . . . . . . . . . . . . . . . . . .
20
3.2.5
Bewertung
. . . . . . . . . . . . . . . . . . . . . . . .
21
Object Linking and Embedding . . . . . . . . . . . . . . . . .
22
3.3.1
Zusammengesetzte Dokumente mit OLE . . . . . . . .
22
3.3.2
Interprozeßkommunikation mit OLE . . . . . . . . . .
23
3.3.3
OLE/COM als Basis für verteilte Objekte . . . . . . .
23
3.3.4
Bewertung
24
. . . . . . . . . . . . . . . . . . . . . . . .
Common Object Request Broker Architecture
25
4.1
Object Management Architecture . . . . . . . . . . . . . . . .
26
4.2
Das OMG Objekt-Modell . . . . . . . . . . . . . . . . . . . .
27
4.3
Die Struktur eines Object Request Broker . . . . . . . . . . .
27
4.4
Interface Definition Language . . . . . . . . . . . . . . . . . .
30
Inhaltsverzeichnis
5
iii
4.4.1
Typenwerte . . . . . . . . . . . . . . . . . . . . . . . .
31
4.4.2
Module . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.4.3
Interface . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.4.4
Attribute . . . . . . . . . . . . . . . . . . . . . . . . .
32
4.4.5
Operationen . . . . . . . . . . . . . . . . . . . . . . . .
33
4.4.6
Vererbung . . . . . . . . . . . . . . . . . . . . . . . . .
33
4.5
Dynamic Invocation Interface . . . . . . . . . . . . . . . . . .
34
4.6
Basic Object Adapter . . . . . . . . . . . . . . . . . . . . . .
36
4.7
Object Services . . . . . . . . . . . . . . . . . . . . . . . . . .
37
4.8
Bereitstellen von Objekten . . . . . . . . . . . . . . . . . . . .
38
4.9
Interoperabilität . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.10 Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Eigenschaften von Solaris NEO
42
5.1
Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.2
Services und Name Space . . . . . . . . . . . . . . . . . . . .
44
5.3
Implementierung eines NEO-Objektes . . . . . . . . . . . . .
45
5.3.1
Erzeugen und Registrieren des Interfaces . . . . . . . .
45
5.3.2
Persistente Daten . . . . . . . . . . . . . . . . . . . . .
46
5.3.3
Erzeugen des Sample-Server-Codes . . . . . . . . . . .
47
5.3.4
Einfügen der Objekt-Funktionalität
. . . . . . . . . .
49
5.3.5
Erzeugen und Registrieren des Server-Objektes . . . .
50
5.4
Zugriff auf ORB Objekte
. . . . . . . . . . . . . . . . . . . .
51
Inhaltsverzeichnis
6
iv
5.4.1
Auffinden von Diensten . . . . . . . . . . . . . . . . .
51
5.4.2
Erzeugen des Client-Code . . . . . . . . . . . . . . . .
51
5.5
Dynamic Notification . . . . . . . . . . . . . . . . . . . . . . .
53
5.6
Probleme mit grafischen Benutzeroberflächen . . . . . . . . .
57
5.7
Bemerkungen . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
Java und CORBA
6.1
Die Entwicklung des World-Wide-Web . . . . . . . . . . . . .
60
6.1.1
Dynamisch generierte WWW-Seiten . . . . . . . . . .
61
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.2.1
Integration von Java ins WWW . . . . . . . . . . . . .
62
6.2.2
Java-Interpreter
. . . . . . . . . . . . . . . . . . . . .
63
6.2.3
Java – Die Sprache . . . . . . . . . . . . . . . . . . . .
63
6.3
Joe – Verbindung zwischen Java und CORBA . . . . . . . . .
65
6.4
Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
6.2
7
60
Entwurf einer CORBA-Erweiterung f ür Confman
69
7.1
Entwurfsziele und Rahmenbedingungen . . . . . . . . . . . .
69
7.2
Umgebungsmodell . . . . . . . . . . . . . . . . . . . . . . . .
70
7.3
Ereignistabelle . . . . . . . . . . . . . . . . . . . . . . . . . .
70
7.4
Datenmodell
. . . . . . . . . . . . . . . . . . . . . . . . . . .
71
7.5
Datenverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . .
72
7.5.1
Konferenzdaten . . . . . . . . . . . . . . . . . . . . . .
72
7.5.2
Konferenzteilnehmerdaten . . . . . . . . . . . . . . . .
74
Inhaltsverzeichnis
v
7.5.3
Konferenzwerkzeugdaten . . . . . . . . . . . . . . . . .
75
Partitionierung der Ereignisse . . . . . . . . . . . . . . . . . .
75
7.6.1
Auffinden von Teilnehmern . . . . . . . . . . . . . . .
76
7.6.2
Verwaltung der Daten . . . . . . . . . . . . . . . . . .
76
7.6.3
Erzeugen und Entfernen von Datenobjekten . . . . . .
78
7.6.4
Starten und Beenden einer Konferenz . . . . . . . . .
78
7.6.5
Starten einer zeitgesteuerten Konferenz . . . . . . . .
80
7.6.6
Beitreten und Verlassen einer Konferenz . . . . . . . .
80
7.7
Objektmodell nach der Object Modeling Technique . . . . . .
80
7.8
Ermitteln eines Konferenz-Servers
. . . . . . . . . . . . . . .
86
Wegefindung bei Konferenzen mit mehreren Servern .
87
Schnittstellen und Datenbeschreibungen . . . . . . . . . . . .
90
7.10 Design-Änderungen gegenüber Confman . . . . . . . . . . . .
94
7.6
7.8.1
7.9
7.10.1 Toolbutton-Leiste
8
. . . . . . . . . . . . . . . . . . . .
95
7.10.2 Quit-Funktionen . . . . . . . . . . . . . . . . . . . . .
95
7.10.3 Adreßeditor . . . . . . . . . . . . . . . . . . . . . . . .
95
Laufzeitverhalten von ConfmanNEO
96
8.1
Aktivierung und Deaktivierung von NEO Objekten . . . . . .
96
8.2
Programmstart von ConfmanNEO . . . . . . . . . . . . . . .
97
8.3
Auffinden von Objekt-Instanzen . . . . . . . . . . . . . . . .
98
8.4
Auswirkung der Dynamic Notification . . . . . . . . . . . . .
98
8.5
Reaktivierung nach längerer Pause . . . . . . . . . . . . . . .
99
Inhaltsverzeichnis
9
vi
8.6
Speicherbedarf . . . . . . . . . . . . . . . . . . . . . . . . . .
99
8.7
Weitere Optimierungsmethoden . . . . . . . . . . . . . . . . .
99
8.8
Vergleich Confman vs. ConfmanNEO . . . . . . . . . . . . . .
100
8.9
Zusammenfassung der Meßergebnisse . . . . . . . . . . . . . .
101
Ergebnisse und Ausblick
102
9.1
Entwicklung verteilter Systeme mit CORBA . . . . . . . . . .
102
9.2
Erfahrungen mit Solaris NEO . . . . . . . . . . . . . . . . . .
103
9.3
Weiterentwicklung der Produktionslinie ConfmanNEO . . . .
104
9.4
Übernahme der Entwicklungsergebnisse zu dem nicht auf
CORBA basierenden Confman . . . . . . . . . . . . . . . . .
104
9.4.1
Personenfindung . . . . . . . . . . . . . . . . . . . . .
104
9.4.2
Wegefindung bei Serverkonferenzen . . . . . . . . . . .
106
10 Zusammenfassung
107
Glossar
109
Literaturverzeichnis
112
Index
117
Abbildungsverzeichnis
3.1
Das Client-Server-Modell
. . . . . . . . . . . . . . . . . . . .
10
3.2
Netzwerkverbindung mit RPC . . . . . . . . . . . . . . . . . .
11
3.3
Funktionweise des RPC . . . . . . . . . . . . . . . . . . . . .
12
3.4
Erzeugen RPC-basierter Systeme . . . . . . . . . . . . . . . .
16
3.5
Nachrichtenübertragung mit ToolTalk . . . . . . . . . . . . .
17
3.6
ToolTalk-Objekt-Daten
. . . . . . . . . . . . . . . . . . . . .
20
3.7
ToolTalk-Service Architektur . . . . . . . . . . . . . . . . . .
21
4.1
OMA-Referenzarchitektur . . . . . . . . . . . . . . . . . . . .
26
4.2
Eine Anfrage an ein Objekt durchläuft den ORB . . . . . . .
28
4.3
Schnittstellen des Object Request Broker . . . . . . . . . . .
29
4.4
Anfragemöglichkeiten eines Client . . . . . . . . . . . . . . . .
30
4.5
Eine Objektimplementierung empfängt eine Anfrage . . . . .
31
4.6
In IDL definierte Werte . . . . . . . . . . . . . . . . . . . . .
31
4.7
Beispiel zur Mehrfachvererbung . . . . . . . . . . . . . . . . .
34
vii
Abbildungsverzeichnis
viii
4.8
Kommunikation über In Line Bridges . . . . . . . . . . . . . .
39
4.9
Kommunikation über Request Level Bridges . . . . . . . . . .
40
5.1
Name Space: Namensraum von NEO-Objekten . . . . . . . .
45
5.2
Generierung des IDL-Stubs . . . . . . . . . . . . . . . . . . .
46
5.3
Registrierung des Interfaces . . . . . . . . . . . . . . . . . . .
47
5.4
Erzeugen des Sample-Server-Codes . . . . . . . . . . . . . . .
49
5.5
Registrieren des Server-Objektes . . . . . . . . . . . . . . . .
51
5.6
Erzeugen des Clients . . . . . . . . . . . . . . . . . . . . . . .
53
5.7
Dynamic Notification: Methodenaufruf von Client-Objekten
über Objektreferenzen . . . . . . . . . . . . . . . . . . . . . .
54
6.1
Der Weg eines Java-Applets . . . . . . . . . . . . . . . . . . .
62
6.2
Kommunikation zwischen Java-Applet und NEO-Objekten . .
65
6.3
Entwicklung eines CORBA-Objektes mit Joe . . . . . . . . .
66
7.1
Kontextdiagramm der Netzwerkerweiterung . . . . . . . . . .
70
7.2
ER-Diagramm Konferenzteilnehmer/Konferenz . . . . . . . .
71
7.3
ER-Diagramm Konferenz/Konferenzwerkzeug . . . . . . . . .
72
7.4
Objektmodell ConfmanClient . . . . . . . . . . . . . . . . . .
76
7.5
Datenobjekte . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
7.6
Objekt-Instanzen im NEO-Namensraum . . . . . . . . . . . .
78
7.7
Instanzendiagramm zum Konferenz-Start . . . . . . . . . . .
79
7.8
Einladen der Konferenzteilnehmer . . . . . . . . . . . . . . .
79
7.9
OMT-Diagramm: ConfMember . . . . . . . . . . . . . . . . .
81
Abbildungsverzeichnis
ix
7.10 OMT-Diagramm: Referenzieren des ConfMember-Objektes .
82
7.11 OMT-Diagramm: ConfMemberClientCallBack . . . . . . . . .
82
7.12 OMT-Diagramm: Callback-Funktion . . . . . . . . . . . . . .
83
7.13 OMT-Diagramm: ConfmanClient . . . . . . . . . . . . . . . .
84
7.14 Konferenz-Server-Objekte . . . . . . . . . . . . . . . . . . . .
84
7.15 Start einer Server-Konferenz . . . . . . . . . . . . . . . . . . .
85
7.16 Datenverteilung einer Server-Konferenz mit mehreren Servern
87
7.17 Verteilungsstruktur nach Zeitmessungen mit UDP-Paketen
91
.
Tabellenverzeichnis
7.1
Datenverzeichnis der Konferenzdaten . . . . . . . . . . . . . .
73
7.2
Datenverzeichnis der Konferenzteilnehmerdaten . . . . . . . .
74
7.3
Datenverzeichnis der Konferenztooldaten . . . . . . . . . . . .
75
7.4
Beispielwerte zur Berechnung des Qualitätswertes . . . . . . .
86
7.5
Versuch: Zeitmessungen mit UDP-Paketen . . . . . . . . . . .
90
8.1
Programmstartzeiten bei lokalem Server . . . . . . . . . . . .
97
8.2
Programmstartzeiten bei Server über NFS . . . . . . . . . . .
98
8.3
Zeiten zum Öffnen des Adreßbuches . . . . . . . . . . . . . .
98
8.4
Zeit für dynamische Benachrichtigung . . . . . . . . . . . . .
98
8.5
Wartezeiten bei Confman . . . . . . . . . . . . . . . . . . . .
101
x
Kapitel 1
Einleitung
The CPU as an island, contained and valuable in
”
itself, is dying in the nineties. The next paradigm of
computing is distributed. This is driven by the very
real demands of corporations recognizing information
as an asset, perhaps their most important asset.
To make use of information effectivly, it must be accurate and accessible across the department, even across
the world. This means that CPUs must be intimately
linked to the networks of the world and be capable of
freely passing and receiving information, not hidden
behind glass and cooling ducts or the complexities of
the software that drives them.“
Object Management Group: Object Management Architecture Guide.
Revision 2.0, September 1992 [OMG92]
Durch die zunehmende Bedeutung von Rechnernetzen steigt auch die Anzahl
verteilter Systeme stetig an. Dabei basiert der klassische Ansatz zur Entwicklung verteilter Systeme auf dem Client-Server-Modell. Eines der bekanntesten
Mechanismen, das auf diesem Modell aufsetzt, ist der Remote Procedure Call
(RPC).
Mit den weiter steigenden Anforderungen an diese Systeme zeichnet sich jedoch ab, daß die klassischen Mechanismen den heutigen Ansprüchen nicht
mehr gerecht werden. Daher gibt es Bestrebungen, modernere Mechanismen
zu etablieren.
1
Einleitung
2
Zu den wichtigsten Zielen moderner Mechanismen gehört die Interoperabilität
zwischen verschiedenen Anwendungen in einer heterogenen Umwelt. Darüber
hinaus ist es von großen Interesse, die Wiederverwendbarkeit und Portabilität
von Programmsegmenten zu fördern.
Eine standardisierte Schnittstelle zur Kommunikation zwischen Prozessen hat
die Firma SunSoft mit dem ToolTalk-Service bereitgestellt, mit der Applikationen in lokalen Netzwerken Nachrichten austauschen können. Dabei werden
die Nachrichten gewöhnlich innerhalb einer Sitzung weitergereicht, d. h. an
die Prozesse, die der Benutzer1 auf dem Bildschirm dargestellt bekommt.
ToolTalk bietet außerdem die Möglichkeit, Nachrichten an Objekte zu verschicken. Dabei hat das System jedoch ein eigenes Verständnis von Objekten
und der Zusammenarbeit zwischen Anwendungen.
Mit dem Zusammenschluß verschiedener Software-Firmen zur Object Management Group (OMG) und der Veröffentlichung der Object Management
Architecture (OMA) ist die Grundlage für eine Infrastruktur verteilter, objektorientierter Systeme gelegt worden, deren Schwerpunkte in der Interoperabilität, Wiederverwendbarkeit und Portabilität von Software-Komponenten
liegen. Zu den Besonderheiten dieser Architektur gehört, daß Objekte in Anwendungen eingebunden werden können, ohne über deren Aufenthaltsort im
Netzwerk oder deren Realisierung – wie z. B. in einer spezifischen Programmiersprache – Kenntnis zu haben.
Kernstück dieser Architektur ist der Object Request Broker (ORB), der als
Vermittlungszentrale zwischen den Objekten dient. Er nimmt die Anfrage an
ein Objekt entgegen, lokalisiert das Objekt und übermittelt die Anfrage sowie
das Ergebnis der Operation.
Der ORB ist standardisiert worden unter dem Namen Common Object Request Broker Architecture (CORBA). Mit der zuletzt vorgestellten Spezifikation CORBA 2.0 ist es gelungen, einen Standard für die Kommunikation
zwischen Systemen verschiedener Hersteller auf heterogenen Plattformen zu
finden. Damit ist es erstmals möglich, daß Anwendungen auf Server-Dienste
fremder Software-Hersteller zugreifen, die unter unterschiedlichen Betriebssystemen arbeiten.
Ein weiterer Vorteil dieser Architektur ist, daß Anwendungen, die einen Service in Anspruch nehmen, auch gleichzeitig Dienste für andere Anwendungen
bereitstellen können. Somit ist die klassische Client-Server-Architektur durchbrochen; der Client wird gleichzeitig zum Server.
1
Alle Personenbezeichnungen sind geschlechtsneutral zu verstehen, auch wenn in dieser
Arbeit in der Regel die männliche Bezeichnung verwandt wird. Die Leserinnen mögen mir
dies verzeihen. Bitte lesen Sie die Benutzerin oder der Benutzer“.
”
Einleitung
3
Am Beispiel des in vorangegangenen Studienarbeiten entwickelten KonferenzManagement-Systems Confman2 sollen die Fähigkeiten der Common Object
Request Broker Architecture im Rahmen einer Technologiestudie herausgestellt und bewertet werden. Es wird eine Netzwerkerweiterung für Confman
entworfen, die auf die Dienste von CORBA aufbaut. Dazu ist eine Analyse
des Konferenz-Management-System notwendig.
Um die theoretischen Grundlagen von Netzwerkdiensten verständlicher zu
machen, wird eine kurze Einführung in die Mechanismen des Remote Procedure Call sowie ToolTalk gegeben. Auch das von Microsoft entwickelte Object
Linking and Embedding (OLE) wird kurz betrachtet, da es Ansätze für ein
verteiltes Objekt-Modell enthält. Anschließend werden die Fähigkeiten von
CORBA sowie des CORBA-basierten Entwicklungssystems Solaris NEO von
SunSoft vorgestellt.
Durch die momentan große Beliebtheit der Programmiersprache Java gewinnt eine weitere Entwicklung an Bedeutung, die die Verbindung zwischen
Java und CORBA-Objekten herstellt. Unter dem Namen Joe ist eine Erweiterung der Sprache Java angekündigt, die eine vollständige CORBAImplementierung beinhaltet. Auch diese Erweiterung wird kurz vorgestellt,
es können allerdings noch keine praktischen Erfahrungen festgehalten werden.
Im weiteren wird der Entwurf der CORBA-Erweiterung für Confman beschrieben, die in einem Prototypen realisiert worden ist. Den Abschluß dieser
Arbeit bildet eine Versuchsreihe mit Meßergebnissen, die das Zeitverhalten
des Prototypen der Confman-Erweiterung beschreiben.
2
Vergl. [Fri96] und [Ber94].
Kapitel 2
Analyse eines
Konferenz-Management-Systems
Am Lehrgebiet Rechnernetze und Verteilte Systeme (RVS) ist ein KonferenzManagement-System entwickelt worden, mit dessen Hilfe das Planen und Initiieren multimedialer Online-Konferenzen über das Internet sowie das Steuern laufender Konferenzen vereinfacht wird. 1 Im Vordergrund steht dabei die
Benutzerführung. Der Austausch der multimedialen Daten erfolgt über externe Werkzeuge.
Das im Rahmen von zwei Studienarbeiten enstandene System ist unter dem
Namen Confman veröffentlicht worden und wird z. Z. in der Version 1.1 distributiert.
Dieses System wird als Beispielanwendung für eine CORBA-Erweiterung vorhandener Software herangezogen. Dazu ist eine nähere Betrachtung des Systems erforderlich, bei der im besonderen die Punkte herausgestellt werden,
die in der erweiterten Fassung verbessert werden sollen.
Grundlage dieser Analyse ist das Produkt Confman, wie es zu Beginn dieser
Arbeit vorgelegen hat.2
1
2
Siehe hierzu die Arbeiten [Ber94] und [Fri96].
Confman Version 1.0 Beta Patchlevel 1.
4
Analyse eines Konferenz-Management-Systems
2.1
5
Funktionen des Konferenz-Management-Systems
Confman
Die wesentlichste Funktion von Confman ist, dem Benutzer an seinem Arbeitsplatz ein Hilfsmittel für die rechnergestützte, multimediale Kommunikation bereitzustellen, das den Komfort eines modernen Telefons bietet. 3
Die Kommunikation selbst findet über MBone-Tools4 statt. Confman übernimmt lediglich die Steuerung der Tools in einer laufenden Konferenz, ebenso
bietet es Hilfestellung bei der Planung einer Konferenz.
Die Planung von Konferenzen umfaßt das Festlegen der Start- und Stopzeit,
der zu benutzenden Tools und die Auswahl der Teilnehmer. Diese Daten
werden nach Abschluß der Planungsphase an alle Teilnehmer verteilt. Zur
Steuerung der Konferenz gehört das Starten und Beenden der MultimediaTools sowie das Einladen weiterer Teilnehmer.
Aus der Benutzung von Confman ergeben sich fünf Punkte, die in der Weiterentwicklung verbessert oder hinzugefügt werden sollen. Dabei handelt es
sich um
• die Arbeitsweise des Benachrichtigungssystems,
• das Ermitteln eines Konferenz-Servers,
• die Unterstützung von Konferenzen mir mehreren Servern,
• das Verwalten der Konfigurationsdateien sowie
• die Einbindung eines Terminkalenders.
Diese Punkte werden im folgenden näher betrachtet und daraus Ansätze für
die Erweiterung entwickelt.
2.1.1
Arbeitsweise des Benachrichtigungssystems
Finden des Kommunikationspartners
Im Gegensatz zum Telefon verbindet Confman Personen, nicht Nummern.
Alle Personen, die über Confman erreichbar sind, werden in Adreßbüchern“
”
3
4
Vergl. [Grü96].
Vergl. [Fro94].
Analyse eines Konferenz-Management-Systems
6
gespeichert, in denen neben dem Namen auch die Mail-Adresse festgehalten
wird sowie eine Liste der Rechner, an denen die Person häufig tätig ist.
Beim Anrufen einer Person bzw. beim Aufnehmen der Person in die Teilnehmerliste einer Konferenz werden alle Rechner in der Host-Liste abgefragt, ob
auf ihnen Confman mit der Kennung des Benutzers gestartet wurde. Wenn
ein Teilnehmer nicht gefunden werden kann, wird er über Mail eingeladen
und dazu aufgefordert, Confman zu starten.
In der Regel wird bei diesem Verfahren gewünschte der Kommunikationspartner mit großer Wahrscheinlichkeit gefunden. Es hat sich jedoch gezeigt, daß
das Verfahren dann nicht mehr handhabbar ist, wenn ein Benutzer an häufig
wechselnden Arbeitsplätzen arbeitet oder seinen Arbeitzplatz wechselt, ohne
dies vorher bekanntgegeben zu haben. In diesen Fällen geht Confman davon
aus, daß der Benutzer z. Z. nicht erreichbar ist.
Es erscheint daher sinnvoll, Personen auffinden zu können, ohne über deren Arbeitsplatz oder den Rechner, an dem sie arbeiten, Kenntnis haben zu
müssen.
Austausch von Konferenzdaten
Confman unterscheidet zwischen spontanen und zeitgesteuerten Konferenzen.
Eine zeitgesteuerte Konferenz zeichnet sich dadurch aus, daß ihr Startzeitpunkt in der Zukunft liegt und die Konferenzdauer festgelegt wird. Spontane
Konferenzen werden unmittelbar nach ihrer Einrichtung gestartet, ein vorzeitiger Austausch der Konferenzdaten ist hier nicht möglich.
Bei der Einrichtung einer zeitgesteuerten Konferenz ist es notwendig, die Konferenzdaten an alle Teilnehmer zu verteilen. Teilnehmer, die zu diesem Zeitpunkt nicht erreicht werden, werden über Mail benachrichtigt.
Da die Konferenzdaten bei den Benutzern lokal gehalten werden, sind Inkonsistenzen nicht auszuschließen. Die Teilnehmer können sich nur über Änderungen beim Konferenzleiter informieren, sofern dieser Confman gestartet
hat. Hier bietet es sich an, die Konferenzdaten zentral zu verwalten und
die Teilnehmer der Konferenzen über Änderungen direkt zu informieren. Bei
dem Programmstart von Confman ist so die Möglichkeit gegeben, sich über
zukünftige Konferenzen zu informieren, auch wenn der Konferenzleiter nicht
erreichbar ist.
Analyse eines Konferenz-Management-Systems
2.1.2
7
Ermitteln eines Konferenz-Servers
Eine Eigenschaft von Confman ist, geschlossene Konferenzen zu unterstützen.
Eine Konferenz wird als geschlossen bezeichnet, wenn die Daten nicht unmittelbar von Dritten empfangen werden können. Geschlossene Konferenzen mit
drei oder mehr Teilnehmern benötigen einen Konferenz-Server, der die Verteilung der Daten übernimmt.5
Ähnlich wie bei den Adreßbüchern wird eine Liste der Rechner geführt, die
als mögliche Konferenz-Server zur Verfügung stehen. Diese Liste wird von
Confman verwaltet und kann bei jedem Benutzer anders sein. Beim Start
einer Server-Konferenz wird anhand dieser Liste auf den Rechnern nach einem
geeigneten Konferenzraum“ 6 gesucht, der den entsprechenden Server startet.
”
Antwortet einer dieser Rechner nicht, so wird er als möglicher KonferenzServer übergangen. Wird kein Konferenzraum gefunden, kann die Konferenz
nicht gestartet werden.
In der Regel werden Konferenz-Server von Systemadministratoren eingerichtet, sie werden durch einen ständig aktiven UNIX-Prozeß repräsentiert. Damit
hat der Systemadministrator die Aufgabe, alle Benutzer über die Neueinrichtung bzw. die Deaktivierung von Konferenz-Servern zu informieren. Ohne
diese Information können Benutzer keine Server-Konferenzen starten. Auch
hier wäre eine Lösung sinnvoll, die das selbständige Auffinden von Servern
oder ggf. das Starten eines neuen Servers ermöglicht.
2.1.3
Unterstützung von Konferenzen mir mehreren Servern
In der vorliegenden Version bietet Confman nur die Möglichkeit, geschlossene
Konferenzen mit einem Server durchzuführen. Dies führt zu Problemen, wenn
mehrere Konferenzteilnehmer über eine Datenleitung mit geringer Bandbreite
oder hohen Paketverlusten angeschlossen sind.
Ein Beispiel für eine solche, ungünstige Situation ist eine Konferenz zwischen
zwei räumlich entfernten Institutionen, die jeweils mit mehreren Personen
an der Konferenz teilnehmen. Der Konferenz-Server kann nur in einer der
beiden Institutionen gestartet werden, somit werden alle Daten entsprechend
der Anzahl Teilnehmer der anderen Institution mehrfach übertragen.
5
An dieser Stelle wird davon ausgegangen, daß die Daten als Unicast-Pakete verteilt
werden. Eine Konferenz kann auch dann als geschlossen bezeichnet werden, wenn die Daten
per Multicast verteilt und verschlüsselt werden. Dies wird hier aber nicht berücksichtigt, da
bei Multicast-Konferenzen kein Server benötigt wird, Confman aber geschlossene UnicastKonferenzen unterstützen soll. Nähere Informationen hierzu in [Fri96].
6
Ein unter UNIX laufender Prozeß namens meetingroom, der den Konferenz-Server bei
Bedarf startet.
Analyse eines Konferenz-Management-Systems
8
Um die Übertragungswege nicht unnötig zu belasten, sollten die multimedialen Daten nur einmal zwischen den Institutionen ausgetauscht werden.
Die Verteilung der Daten an die Konferenzteilnehmer übernimmt jeweils ein
Konferenz-Server in jeder Institution. Daher sollte Confman in der Lage sein,
Konferenzen mit mehreren Servern zu unterstützen. Dabei sollte die günstigste Verteilungsstruktur von Confman selbständig ermittelt werden und die
Server entsprechend gestartet werden.
2.1.4
Verwalten der Konfigurationsdateien
Um die Nutzungsmöglichkeiten von Confman möglichst variabel zu halten, liest es viele Informationen aus Konfigurationsdateien, die zur Laufzeit
verändert werden können. Dies erweist sich nicht nur für die dynamische Konfiguration der Konferenz-Tools als sinnvoll, sondern es ermöglicht auch eine
reibungsfreie Anpassung an verschiedene Betriebssysteme und Administrationsstrategien.
Confman erlaubt es, mehrere Verzeichnisse anzugeben, aus denen die Konfigurationsdateien gelesen werden sollen. Dies ist für Mehrbenutzerumgebungen
sinnvoll, die eine systemweite Standardkonfiguration vorgeben, die von den
Benutzern individuell verändert werden kann. Dabei erhält der Benutzer für
die systemweiten Dateien nur Leserechte. Änderungen an der Konfiguration werden in einem benutzereigenen Verzeichnis - normalerweise unterhalb
seines Home-Verzeichnisses - abgelegt.
Wird dann die systemweite Konfiguration verändert, wirkt sich diese Änderung nicht auf die persönliche Konfiguration aus. Oft ist der Benutzer dann
genötigt, die eigenen Konfigurationsdateien zu löschen und somit die neue
Konfiguration zu laden. Die selbst eingebrachten Änderungen müssen dann
erneut eingegeben werden.
Hier bietet es sich an, die Daten in einem konsistenten Datensatz zu halten.
Werden an diesen Daten Änderungen vorgenommen, so werden alle Konferenzteilnehmer darüber automatisch informiert.
2.1.5
Einbinden eines Terminkalenders
Die Planung von Konferenzen erfordert Terminabsprachen mit allen Konferenzteilnehmern. Wenn nicht alle Teilnehmer erreichbar sind, kann die Planung umständlich werden. Dies kann durch die Einbindung eines Terminkalenders erleichtert werden.
Analyse eines Konferenz-Management-Systems
9
Der Terminkalender sollte die Möglichkeit unterstützen, Gruppen von Personen anzugeben, denen ein gemeinsamer Termin zugeordnet werden kann.
Außerdem sollte es möglich sein, bei einem persönlichen Termin einer Gruppe
mitzuteilen, welchen Zeitraum die Verhinderung in Anspruch nimmt. Dies ist
sinnvoll, um bei Abwesenheit eine Terminüberschneidung eines persönlichen
Termins mit einer Konferenz zu vermeiden. 7
Es muß eine Schnittstelle vorhanden sein, über die Confman mit dem Terminkalender in Kontakt treten kann.
2.2
Zusammenfassung der Analyse
Aus den oben angegebenen Betrachtungen ergibt sich das Ziel, von HostListen unabhängig zu sein. Benutzer und Konferenz-Server sollten in einem
Netzwerk selbständig gefunden werden, ohne Kenntnis über deren Aufenthaltsort zu haben. Dabei soll es möglich sein, die multimedialen Daten über
mehrere Server zu verteilen.
Weiter wird die Bereitstellung eines konsistenten Datenstammes angestrebt,
dessen Änderung allen Kommunikationspartnern mitgeteilt werden soll.
Durch die Einbindung eines Terminkalenders soll die Planung von Konferenzterminen vereinfacht werden, auch wenn nicht alle Konferenzteilnehmer in der
Terminfindungsphase erreichbar sind.
Da diese Ziele mit herkömmlicher Netzwerkprogrammierung nur unter
großem Aufwand zu erreichen sind, soll eine moderne Netzwerktechnologie
eingesetzt werden. Von besonderem Interesse ist hier das Konzept der Object
Management Group, die Object Management Architecture.
Um die Vor- und Nachteile dieser Architektur gegenüber herkömmlichen Konzepten abschätzen zu können, sollen zunächst der Remote Procedure Call,
sowie die Möglichkeiten vorgestellt werden, die sich aus dem Einsatz von
ToolTalk ergeben.
7
Dieses Thema wird auch ausführlich in der Literatur behandelt, die sich mit Groupware
beschäftigt. Vergl. [DiL94].
Kapitel 3
Klassische Mechanismen
Dieses Kapitel beschäftigt sich mit klassischen Methoden der Programmierung verteilter Systeme. Dabei wird zunächst der entfernte Prozeduraufruf
(Remote Procedure Call) betrachtet, der als Grundlage für verschiedene Netzwerkdienste dient und von einer großen Anzahl von Betriebssystemen und
Netzwerk-Produkten unterstützt wird.1 Ein weiterer Abschnitt beschäftigt
sich mit den Möglichkeiten zur Kommunikation mit Hilfe von ToolTalk, um
es für die Tauglichkeit der Einbindung eines Terminkalenders zu untersuchen.
3.1
3.1.1
Remote Procedure Call
Client-Server-Modell
Verteilte Systeme sind in der Regel unsymmetrisch. Es existiert ein Prozeß,
der Dienstleistungen anbietet (Server), und ein Prozeß, der eine Dienstleistung in Anspruch nimmt (Client). Der Client übermittelt an den Server eine
Anfrage, dieser antwortet mit den gewünschten Ergebnissen. Dieses Modell
wird Client-Server-Modell genannt (Abb. 3.1).
Anfrage
Client
Server
Ergebnisse
Abbildung 3.1: Das Client-Server-Modell
1
RPC ist als Transport-independent Remote Procedure Call (TI-RPC) in das Betriebssystem UNIX System V Release 4 (SVR4) eingegangen ist. Vergl. [SunS95k].
10
Klassische Mechanismen
11
Durch die Trennung von Client und Server auf verschiedene HardwareSysteme ist es somit möglich, zentrale Ressourcen zu verwalten. Dies wird
beispielsweise für Datei-Server-Dienste oder zentrale Namens- und Informationsdienste genutzt.2
3.1.2
Funktionsweise des Remote Procedure Calls
Nahezu alle Ansätze für die Entwicklung verteilter Client-Server-Systeme basieren auf der Aufteilung der Aufgaben auf verschiedene Module. Bei der
Behandlung von RPC werden sie auch Funktionen oder Prozeduren genannt.
Der Programmierer hat dabei zu entscheiden, welche der Prozeduren lokal
und welche auf einem entfernten System aufgerufen werden.
Das Ziel des Remote Procedure Calls ist es, einen entfernten Prozeduraufruf
so einfach wie einen lokalen zu gestalten. Für den Anwender bleibt dabei
verborgen, ob eine Funktion lokal oder auf einem anderen System ausgeführt
wird.
Zeit
Host A
Host B
Server
Prozess
Client
Programm
RPC Aufruf
Vorbereiten des
Funktionsaufrufes
Funktionsaufruf
Funktionsausführung
Ergebnis
Ende des
Requests
Rückgabe des Ergebnisses
Client setzt
Programmausführung fort
Abbildung 3.2: Netzwerkverbindung mit RPC
RPC ermöglicht den Aufruf von Funktionen auf entfernten Rechnern, wobei
die darunterliegenden Netzwerkmechanismen verborgen bleiben. Es stellt ein
logisches Client-Server Kommunikationssystem zur Verfügung, das speziell
2
Beispiele für diese Dienste sind das Network File System (NFS) oder das Network
Information System (NIS).
Klassische Mechanismen
12
Netzwerkanwendungen unterstützt. RPC ist unabhängig von der vorliegenden
Transportschicht. Obwohl hier in der Regel TCP/IP benutzt wird, sind auch
andere Protokolle nutzbar.
In Abb. 3.2 ruft der Client eine Funktion auf, die einen Request an den Server
sendet und den Client für weitere Programmabläufe blockiert. Wenn der Request den Server erreicht, führt dieser den Funktionsaufruf durch und wartet
das Ergebnis der Funktion ab. Dieses wird dann an den Client zurückgeschickt.
Client
Server
Anwendungsebene
Stub-Prozedur
Argumente
Stub-Prozedur
Ergebnis
Codieren
Ergebnis
RPC-Bibliothek
Argumente
Decodieren
Abbildung 3.3: Funktionweise des RPC
Die Transparenz der Netzwerkverbindung wird durch Bibliotheksfunktionen erreicht, die die Übertragung der Argumente über das Netzwerk, die
Ausführung der Prozedur und die Rückgabe des Ergebnisses übernehmen
(Abb. 3.3). Auf der Anwendungsebene erfolgt der Aufruf einer RPC-StubFunktion auf traditionelle Weise. Funktionen der RPC-Bibliothek sorgen für
die Konvertierung der Argumente in eine definierte Darstellungsform 3 und die
Übertragung der Daten auf den Server-Rechner. Dort wird die Konvertierung
in die lokale Darstellungsform durchgeführt und schließlich die gewünschte
Funktion aufgerufen. Entsprechend wird das Ergebnis zum Client zurückgeliefert. Die Erstellung von RPC-Funktionen wird in der Regel durch Entwicklungswerkzeuge unterstützt.4
3.1.3
ONC-RPC
Open Network Computing (ONC) ist der Ansatz der Firma Sun Microsystems,
Inc., für einen offenen Netzwerkstandard, der auf RPC aufbaut. ONC-RPC
3
Diese Darstellungsform ist architekturunabhängig und wird External Data Representation (XDR) bezeichnet. Vergl. [Sri95b].
4
So z. B. durch den RPC-Compiler rpcgen, wie weiter unten beschrieben.
Klassische Mechanismen
13
dient als Grundlage des Network File Systems (NFS) und Network Information Systems (NIS), es ist integraler Bestandteil der UNIX-Betriebssysteme,
die den Standard System V Release 4 erfüllen.5
RPC Programme folgen dem Client-Server-Modell. Sie bieten Netzwerkdienste ohne Kenntnisse über das darunterliegende Netzwerk an. Ein Beispiel ist
die Funktion rusers() aus der Bibliothek librpcsvc, die die Anzahl der
Benutzer auf entfernten Rechnern ermittelt. Dem Aufrufer der Funktion bleiben die Netzwerk-Aktivitäten weitgehend verborgen, er muß sich nicht mit
Transportmechanismen auseinandersetzen.
Im folgenden wird vorgestellt, wie die Programmierung eines verteilten Systems mit ONC-RPC erfolgt.6 Jede RPC-Funktion besitzt genau ein Argument und liefert genau ein Ergebnis. Wenn mehrere Argumente ausgetauscht
werden sollen, müssen sie zu Strukturen, Vektoren oder Feldern zusammengefaßt werden.
Für die Erstellung der Stub-Funktionen wird eine RPC-Protokolldefinitionsdatei benötigt. Sie enthält Informationen über die RPC-Funktionen und die
benutzten Datentypen.
/* Protokolldefinitionsdatei
*
* Author: Christrian Grimm <grimm@garfield>
*
* File:
rpc_demo.x
*
Fri Nov 19 1993
*
* (c) 1993 Lehrgebiet Rechnernetze und Verteilte Systeme
*
Universitaet Hannover, Germany
*/
struct pair {
int val1;
int val2;
};
program RPC_DEMO {
version FIRST {
int
REMOTE_ADD ( struct pair )
string REMOTE_DATE ( void ) = 2;
} = 1;
} = 0x31271966;
5
6
= 1;
/* Prozedurnummern */
/* Versionsnummer */
/* Protokollnummer */
Vergl. [SunS95k].
Das hier vorgestellte Beispiel ist [Gri94] ab Seite 111 entnommen.
Klassische Mechanismen
14
Durch den Aufruf des RPC-Compilers rpcgen werden die Dateien rpc demo.h,
rpc demo clnt.c, rpc demo svc.c und rpc demo xdr.c erzeugt. Sie beinhalten die Definitionen der Stub-Routinen, die Client-Stub-Routinen, die ServerStub-Routinen und die Wandlungsroutinen für das Netzwerk-Datenformat.
Eine Beispielimplementierung der Server-Prozeduren zeigt der folgende Quelltext. Er wird zusammen mit den Server-Stubfunktionen und der RPCLaufzeitbibliothek zum Serverprogramm gebunden.
/* RPC-Serverprozeduren
*
* Author: Christrian Grimm <grimm@garfield>
*
* File:
rpc_serv.c
*
Fri Nov 19 1993
*
* (c) 1993 Lehrgebiet Rechnernetze und Verteilte Systeme
*
Universitaet Hannover, Germany
*/
#include <rpc/rpc.h>
#include "rpc_demo.h"
/* Standard include-Datei von SUN RPC */
/* von RPCGEN erzeugt */
int *remote_add_1 ( value )
struct pair *value;
{
static int result;
result = value->val1 + value->val2;
return ( &result );
}
char **remote_date_1 ( )
{
long timeval;
char *ptr;
timeval = time ( ( long * ) 0 );
ptr = ctime ( &timeval );
return ( &ptr );
}
Das Clientprogramm ruft die Stub-Funktionen aus den oben erzeugten Dateien auf. Diese sind nicht von lokalen Funktionsaufrufen zu unterscheiden.
Zusätzlich werden einige RPC-Funktionen benötigt, die den Verbindungsaufbau realisieren. Eine grafische Übersicht über die Entwicklungsschritte zeigt
Abb. 3.4.
Klassische Mechanismen
15
/* RPC-Client
*
* Author: Christrian Grimm <grimm@garfield>
*
* File:
rpc_clie.c
*
Fri Nov 19 1993
*
* (c) 1993 Lehrgebiet Rechnernetze und Verteilte Systeme
*
Universitaet Hannover, Germany
*/
#include <stdio.h>
#include <rpc/rpc.h>
#include "rpc_demo.h"
int main ( argc, argv )
int argc;
char *argv[];
{
CLIENT
*cl;
char
*server;
struct pair
args;
int
*result;
char
**datum;
/* Standard include-Datei von SUN RPC */
/* von RPCGEN erzeugt */
/* RPC-Deskriptor */
/* Argument fuer remote_add_1 () */
/* Ergebnis von remote_add_1 () */
/* Ergebnis von remote_date_1 () */
if ( argc != 2 ) {
printf ( "Usage: %s hostname\n", argv [0] );
exit ( 1 );
}
server = argv [1];
if ( ( cl = clnt_create ( server, RPC_DEMO, FIRST, "udp" ) ) == NULL ) {
clnt_pcreateerror ( server );
exit ( 2 );
}
args.val1 = 12;
args.val2 = 7;
result = remote_add_1 ( &args, cl );
if ( result == NULL ) {
clnt_perror ( cl, server );
exit ( 3 );
}
printf ( "%s says: %d+%d=%d\n", server, args.val1, args.val2, *result );
datum = remote_date_1 ( NULL, cl );
if ( datum == NULL ) {
clnt_perror ( cl, server );
Klassische Mechanismen
16
exit ( 4 );
}
printf ( "Today’s date and time on host %s: %s", server, *datum );
}
Client
RPC-Stub
Server
rpc_demo.x
rpc_client.c
rpc_server.c
rpcgen
rpc_demo_svc.c
rpc_demo_clnt.c
rpc_demo_xdr.c
make
rpc_demo_.h
RPCLaufzeitbibliothek
rpc_client
make
rpc_server
Abbildung 3.4: Erzeugen RPC-basierter Systeme
3.1.4
Bewertung
Der Remote Procedure Call ist ein leistungsfähiges Werkzeug zur Programmierung verteilter Systeme, er setzt allerdings genaue Kenntnisse über die
Server voraus.
Bei Aufruf der RPC-Stub-Funktion wird der Name des Rechners benötigt,
der die Aufgabe des Servers übernehmen soll. Es besteht jedoch nicht die
Möglichkeit, nach Funktionen zu suchen oder Objekte in einem Netzwerk zu
lokalisieren. Damit bietet es nicht die Diensleistungen, die für die Erfüllung
der gestellten Aufgaben in der Analyse des Konferenz-Management-Systems
benötigt werden.
Klassische Mechanismen
3.2
17
ToolTalk
Zusammenarbeit zwischen verschiedenen Anwendungen ist für UNIX-Applikationen immer noch keine Selbstverständlichkeit. Konzepte wie der Remote
Procedure Call ermöglichen das Entwickeln verteilter Systeme, setzen aber
genaue Kenntnisse über den Server voraus. Mit dem ToolTalk-Service wird
eine standardisierte Schnittstelle angeboten, die die Kommunikation von Anwendungen untereinander ermöglichen soll.
Dabei dient der ToolTalk-Service als Vermittler zwischen den Anwendungen,
die auf dem Bildschirm des Benutzers dargestellt werden. Die Anwendungen
können auf unterschiedlichen Rechnern innerhalb eines Netzwerkes gestartet
werden.
Der ToolTalk-Service wurde von der Firma Sun entwickelt, wird aber zwischenzeitlich auch von anderen Herstellern UNIX-basierter Betriebssysteme
unterstützt.7
3.2.1
Arbeitsprinzip
Mit Hilfe des ToolTalk-Services können Anwendungen miteinander kommunizieren, ohne genauere Kenntnisse voneinander haben zu müssen. Grundlage
der Kommunikation sind Nachrichten, die von einer Anwendung erzeugt und
an den ToolTalk-Service gesandt werden. ToolTalk ermittelt den Empfänger
und liefert die Nachricht aus.
Anwendung
A
Anwendung
B
Anwendung
C
Anwendung
D
ToolTalk Service
Abbildung 3.5: Nachrichtenübertragung mit ToolTalk
ToolTalk-Nachrichten enthalten Attribute, anhand derer der Empfänger ermittelt werden kann, sowie der Empfänger erkennt, wie er auf diese Nachricht
7
So z. B. Hewlett-Packard, IBM und Silicon Graphics.
Klassische Mechanismen
18
reagieren soll.
Eine sendende Anwendung erzeugt eine neue Nachricht, füllt die Attribute mit
Werten und sendet sie dem ToolTalk-Service. Anwendungen, die Nachrichten
empfangen möchten, melden sich am ToolTalk-Service an und geben ein Muster vor, welche Arten von Nachrichten sie interessieren. Durch Vergleich der
Nachrichten-Attribute mit diesen Mustern entscheidet der ToolTalk-Service,
an wen diese Nachricht ausgeliefert wird.
ToolTalk unterstützt zwei Methoden zur Nachrichtenübermittlung: prozeßorientierte und objektorientierte Kommunikation. Bei der prozeßorientierten
Kommunikation werden Nachrichten an Prozesse adressiert. Anwendungen
können Nachrichten entweder an einen bestimmten Prozeß oder an einen bestimmten Typ von Prozessen senden. Somit besteht die Möglichkeit, daß existierende Anwendugen untereinander kommunizieren.
Mit der objektorientierten Kommunikation werden Nachrichten an Objekte,
die von Anwendungen verwaltet werden, übermittelt. Anwendungen können
Nachrichten erzeugen, die entweder an ein bestimmtes Objekt oder an einen
bestimmten Typ von Objekten gerichtet sind. Objektorientierte Kommunikation ist sinnvoll für Anwendungen, die ToolTalk-Objekte benutzen oder um
ToolTalk-Objekte herum entwickelt worden sind.
Im folgenden werden beide Kommunikationsarten detaillierter vorgestellt.
3.2.2
Prozeßorientierte Kommunikation
Bei der prozeßorientierten Kommunikation wird vom ToolTalk-Service ein
Nachrichtenkanal zur Verfügung gestellt, der Informationen oder Anfragen
für Funktionsaufrufe des empfangenden Prozesses übermittelt. Die prozeßorientierte Kommunikation stützt sich auf die Begriffe
• Prozesse
• Sitzungen
• Dateien
Ein Prozeß repräsentiert die Ausführung eines Programms, das ToolTalk benutzt. Dies entspricht einem UNIX-Prozeß, dem einige Zusatzinformationen
bekannt sind. Wenn eine Anwendung eine Verbindung zu ToolTalk aufbaut,
erhält es von diesem einen Prozeß-Identifikator (procid). Anwendungen, die
Klassische Mechanismen
19
eine Nachricht an einen bestimmte Prozeß senden möchten, benötigen dessen procid. Diese kann von einer vorher empfangenen Nachricht stammen, die
von ToolTalk automatisch mit dem Prozeß-Identifikator des Senders versehen
wird.
Um sich bei ToolTalk als möglicher Nachrichtenempfänger anzumelden, werden Nachrichtenmuster und Anleitungen zum Starten von Anwendungen in
einem Prozeßtyp (ptype) festgehalten. Die Prozeßtyp-Datei wird mit dem
ToolTalk type compiler (tt type comp) zum Zeitpunkt der Installation beim
ToolTalk-Service registriert.
Eine Gruppe von Prozessen, die auf dem gleichen Bildschirm des X-Window-Systems angezeigt werden, werden bei ToolTalk als Sitzung bezeichnet. Dazu gehört auch eine Instanz des ToolTalk-Kommunikationsprogramms
(ttsession).
Wenn ein Prozeß die Verbindung zum ToolTalk-Service aufnimmt, wird ihm
vom ToolTalk-Kommunikationsprogramm ein Prozeß-Identifikator zugewiesen. Die Sitzung, in der diese Zuweisung stattfindet, ist die voreingestellte
Sitzung für den Prozeß.
Das Konzept der Sitzung ist wichtig für die Nachrichtenübermittlung. Absender richten ihre Nachricht an eine Sitzung, und der ToolTalk-Service liefert
diese an alle Prozesse, deren Nachrichtenmuster in der aktuellen Sitzung angemeldet sind.
Eine Datei kann ebenso Empfänger einer Nachricht sein, so daß ToolTalk
sie an alle Prozesse ausliefert, die in ihrem Nachrichtenmuster Referenzen auf
diese Datei eingetragen haben, ohne dabei die Sitzung zu beachten.
3.2.3
Objektorientierte Kommunikation
Für das Verständnis von objektorientierter Kommunikation in ToolTalk ist
es notwendig, mit prozeßorientierter Kommunikation sowie dem Konzept von
ToolTalk-Objekten vertraut zu sein.
ToolTalk-Objekte
Ein ToolTalk-Objekt ist ein Teil von Daten einer Anwendung, für den eine ToolTalk-Objekt-Spezifikation erzeugt worden ist. Objekt-Daten werden
in zwei Teilen gespeichert, dem Objekt-Inhalt und der Objekt-Spezifikation
(Abb. 3.6). Der Objekt-Inhalt wird von der Anwendung verwaltet, die das
Klassische Mechanismen
20
Objekt erzeugt hat. Typischerweise handelt es sich dabei um einen oder mehrere Teile einer Datei, so z. B. einen Absatz, eine Funktion in einem Quellcode
oder einen Zellenbereich einer Tabellenkalkulation.
Objekt
Objekt Spez.
Datei
Objekt Inhalt
verwaltet vom ToolTalk-Service,
gespeichert in der ToolTalk-Datenbank
verwaltet von der Anwendung,
gespeichert in der Datei
Abbildung 3.6: ToolTalk-Objekt-Daten
Die Objekt-Spezifikationen werden ebenfalls von den Anwendungen erzeugt
und in einer Datenbank gespeichert, die von ToolTalk verwaltet wird. Dazu
wird das ToolTalk-Datenbank-Programm (rpc.ttdbserverd) benötigt.
Zur Objekt-Spezifikation gehören einige Standardeigenschaften, wie z. B. Objekttyp, Dateiname mit dem Objektinhalt und Objekteigentümer. Anwendungen können weitere Eigenschaften hinzufügen, wie z. B. die Position des
Objektes innerhalb der Datei. Somit können Objekte in Dateien identifiziert
werden, ohne das Dateiformat ändern zu müssen.
Wenn Nachrichten an Objekte adressiert werden, muß der ToolTalk-Service
wissen, an welche Anwendung die Nachricht ausgeliefert werden soll. Anwendungen unterstützen diese Informationen durch Objekttypen (otypes). Eine
Objekttyp-Datei enthält den Prozeßtyp der Anwendung, die dieses Objekt
verwaltet, und Nachrichtenmuster, die das Objekt betreffen. In diesem Nachrichtenmuster sind Anweisungen enthalten, wie der ToolTalk-Service bei Eintreffen einer Nachricht reagieren soll, wenn die Anwendung nicht gestartet ist.
ToolTalk kann dann die Anwendung starten oder die Nachricht verwerfen.
Die Objekttyp-Datei wird mit ToolTalk type compiler zur Anwendungsinstallation kompiliert, so daß die Informationen im ToolTalk-Service registriert
sind. Bei der Registrierung wird zunächst der Prozeßtyp benötigt, anschließend wird überprüft, ob der Objekttyp den Prozeßtyp beinhaltet.
3.2.4
ToolTalk-Architektur
Zur Kommunikation zwischen Anwendungen und der Verwaltung von Objektinformationen werden die folgenden ToolTalk-Komponenten benötigt:
Klassische Mechanismen
21
• ttsession ist der ToolTalk-Kommunikationsprozeß. Er wird auf jedem
Rechner gestartet und kommuniziert mit anderen ttsession-Prozessen,
wenn Nachrichten zu einer Anwendung einer anderen Sitzung übertragen werden müssen.
• rpc.ttdbserverd ist der ToolTalk-Datenbankserverprozeß. Er wird für
jede Festplattenpartition installiert, die Dateien von ToolTalk-Clients
oder ToolTalk-Objekte enthält.
• libtt ist die ToolTalk-Programmierschnittstelle, die von Anwendungen
benutzt wird, die ToolTalk-Funktionen benutzen.
Der ToolTalk-Service setzt auf SunSofts ONC-RPC für die Kommunikation
zwischen ToolTalk-Komponenten auf verschiedenen Rechnern auf.
Die Prozeß- und Objekttypen-Informationen werden in einer Classing
Engine8 gespeichert. Dateien und ToolTalk-Objektinformationen werden in
einer NetISAM-Datenbank gespeichert, die vom ToolTalk-Datenbankserverprozeß verwaltet wird. Die Classing Engine ist Bestandteil von OpenWindows, RPC und NetISAM werden vom Betriebssystem unterstützt. Abb. 3.7
zeigt eine grafische Darstellung der ToolTalk-Architektur.
Anwendung
libtt
Anwendung
Classing
Engine
libtt
Prozeß und
Objekttypen
ToolTalk Service
ttsession
rpc.ttdbserverd
Datei und
Objektdaten
ONC Remote Procedure Call
Abbildung 3.7: ToolTalk-Service Architektur
3.2.5
Bewertung
ToolTalk ist ein geeignetes Mittel zur Kommunikation zwischen Anwendungen, die in einer Arbeitssitzung“ zur Verfügung stehen. Es bietet die Basis,
”
die für die Einbindung eines Terminkalenders in das Konferenz-ManagementSystem benötigt wird.
8
Eine OpenWindows-Desktop-Datenbank.
Klassische Mechanismen
22
Mit dem Betriebssystem Solaris 2.5 und der grafischen Benutzeroberfläche
Common Desktop Environment (CDE) wird ein Kalender mitgeliefert, der auf
der Basis von ToolTalk Nachrichten empfangen und versenden kann. Er wird
jedoch nicht von allen Betriebssystemen unterstützt, so daß eine Integration
des Kalenders z. Z. nicht vorgesehen ist.
Für weitere Aufgaben – insbesondere bei der Lokalisation von Objekten –
scheidet ToolTalk jedoch aus. ToolTalk bietet zwar die Möglichkeit, Nachrichten an Objekte zu senden, jedoch versteht ToolTalk unter einem Objekt
stets den Inhalt einer Datei oder eines Teils davon. Damit ist es für die Erweiterung eines objektorientierten Systems ebenfalls ungeeignet.
3.3
Object Linking and Embedding
Object Linking and Embedding(OLE) ist als Standard für zusammengesetzte
Dokumente bekannt geworden, der von Microsoft entwickelt wurde. Während
sich die Version 1.0 auf das Zusammenfügen von Dokumenten aus Anwendungen unter Microsoft Windows beschränkte, zeigt die Version 2.0 Ansätze, die
auf ein verteiltes Objekt-Modell deuten.
Dieser Abschnitt beleuchtet die Fähigkeiten von OLE und stellt die Möglichkeiten dar, die es für die Entwicklung verteilter, objektorientierter Systeme
bietet.
3.3.1
Zusammengesetzte Dokumente mit OLE
OLE ist als Standard für zusammengesetzte Dokumente entwickelt worden.
Ein zusammengesetztes Dokument meint in diesem Zusammenhang, daß innerhalb einer Anwendung Dokumente einer anderen Anwendung integriert
werden können, ohne daß ein spezielles Format zum Austausch der DateiInformationen benötigt wird.
Ein Dokument kann in ein anderes eingebettet werden (embedding), es kann
aber auch über eine Referenz verbunden sein (linking). Ein zusammengesetztes Dokument wird als Container bezeichnet, das andere Objekte (auch Dokumente) beinhalten kann. Dabei kann ein eingebundenes Objekt wiederum
ein Container sein.
Mit OLE verfügen Anwendungen über die Fähigkeit, Dokumente verschiedenen Typs verwalten zu können. Microsoft bezeichnet diese Fähigkeit als
in-place activation, es können Änderungen an den Objekten einer anderen
Anwendung vorgenommen werden, ohne das Benutzer-Interface zu wechseln.
Klassische Mechanismen
23
Dabei paßt sich die Benutzerschnittstelle der Funktionalität des aktiven Objektes an, es ändert z. B. seine Menü- und Bildlaufleisten oder Stauszeilen.
Dahinter verbirgt sich die Integration von Teilen einer anderen Anwendung
in die bearbeitende Anwendung. Dies wird auch als application embedding
bezeichnet, eine Anwendung lädt Funktionen oder Objekte einer anderen Anwendungen und erweitert damit seine Funktionalitäten.
Die Basis von OLE ist das Component Object Model (COM). Es definiert die
Schnittstellen für den Zugriff auf OLE-Objekte. Damit ermöglicht es das Erzeugen von Software-Komponenten, die zwischen Anwendungen ausgetauscht
werden können.
Für die Definition der Schnittstellen existiert eine Beschreibungssprache, die
unabhängig von der Wahl der Programmiersprache ist.
3.3.2
Interprozeßkommunikation mit OLE
Für die Kommunikation zwischen Prozessen wird bei OLE auf den Remote
Procedure Call (RPC) zurückgegriffen. Microsoft setzt hier auf den Standard
des DCE-RPC, der um einige objektorientierte Fähigkeiten erweitert wurde. Die Interprozeßkommunikation ist z. Z. noch auf einen Rechner begrenzt,
die Kommunikation zwischen Rechnern ist erst für zukünftige Versionen angekündigt.9
Zu den weiteren Fähigkeiten des erweiterten Objekt-Modells gehört die
Transparenz, ob ein Objekt lokal oder auf einem entfernten Rechner gestartet wird. Ebenso sollen Multi-Threading und einfach zu erstellende ServerVerbindungen zu weiteren Objekten möglich werden.10
3.3.3
OLE/COM als Basis für verteilte Objekte
OLE/COM stellt die Nachfolge-Generation von OLE 2.0 dar, die Dienste wie
Namensdienst, Persistenzdienst und Datenübertragung zur Verfügung stellt.
COM ist in diesem Fall die Abkürzung für Common Object Model, das in
Zusammenarbeit mit Digital Equipment entstanden ist. Es ermöglicht die
Kommunikation zwischen dem Object Broker von Digital und OLE und stellt
damit die Verbindung zwischen Microsoft Windows und verschiedenen UNIXBetriebsystemen her.11
9
Vergl. [Mic95].
Vergl. [Mic96].
11
Vergl. [Dig94].
10
Klassische Mechanismen
24
Die Kommunikationsbasis zwischen OLE und Object Broker ist hier ebenfalls
der DCE-RPC. Der Object Broker wird einige Funktionen von OLE übernehemen, so daß das Referenzieren und Aktivieren von OLE-Objekten (und
damit von Anwendungen) möglich ist.
Digitals Object Broker basiert auf der Common Object Request Broker Architecture, so daß hiermit die Brücke zur Objekt-Welt der OMG geschlagen
wird.
Microsoft und Digital arbeiten daran, diese Technologie auf alle Betriebssystem-Plattformen zu portieren, die DCE-Dienste unterstützen.
3.3.4
Bewertung
OLE in der Version 2.0 ist nicht in der Lage, Objekte über die Rechnergrenze hinaus zu referenzieren. Dies wird erst mit zukünftigen Versionen von
OLE möglich sein. Die angekündigten Erweiterungen unterstützen eine objektorientierte, verteilte Umgebung. Diese beschränkt sich jedoch zunächst
auf Systeme, die als Plattformen für Microsoft Office dienen.12
Erst durch die Zusammenarbeit mit Digital Equipment und den Kommunikationsmöglichkeiten zwischen OLE und Digitals Object Broker werden
Systeme integriert, die nicht direkt von Microsoft unterstützt werden. Da
der Object Broker CORBA-basiert ist, lassen sich somit auch Brücken zu
CORBA-Objekten schlagen.
Die Haltung der Firma Microsoft ist hier ein wenig unklar, da sie sich als Mitglied der Object Management Group für eine Standardisierung von Objekten
in einer verteilten, heterogenen Umwelt einsetzt, andererseits mit OLE ein
eigenes Objekt-Modell vorantreibt, das in Konkurrenz zu den Bestrebungen
der OMG steht.
12
Vergl. [MoZ95].
Kapitel 4
Common Object Request Broker
Architecture
Im Jahre 1989 wurde von den Firmen 3Com Corporation, American Airlines,
Canon, Inc., Data General, Hewlett-Packard Company, Philips Telecommunication, Sun Microsystems und Unisys Corporation die Object Management
Group (OMG) ins Leben gerufen. Ziel dieses Konsortiums ist es, die Portabilität, Wiederverwendbarkeit und Interoperabilität von Software zu maximieren und eine Referenzarchitektur zu finden, auf der weitere Spezifikationen
aufsetzen können. Dabei sollen Objekte in Anwendungen integriert bzw. zur
Verfügung gestellt werden, unabhängig von ihrer Entwicklungsplattform und
-programmiersprache. Darüber hinaus soll für die Objekte verborgen sein, auf
welchen Netzknoten sich der Kommunikationspartner befindet.
So ist im darauffolgenden Jahr der Object Management Architecture Guide 1
veröffentlicht worden, der als Grundlage der weiteren Entwicklung gesehen
werden kann. Kern der Object Management Architecture (OMA) ist der Object Request Broker (ORB), der als erstes Element spezifiziert wurde. Seine zentrale Aufgabe ist die Übermittlung von Methodenaufrufen und deren Ergebnissen zwischen anfragendem und Zielobjekt. Er ist unter dem Namen Common Object Request Broker Architecture (CORBA) standardisiert
worden.2 Seitdem gibt es zahlreiche Entwicklungen, die auf der CORBASpezifikation aufsetzen.3 Die bekanntesten von ihnen sind SolarisNEO von
SunSoft, Inc., Hewlett-Packards Distributed Smalltalk, IBMs SOM/DSOM
und Ionas Orbix.4
1
Vergl.
Vergl.
3
Vergl.
4
Vergl.
2
[OMG92].
[OMG93].
[OMG95].
[SunS96a], [HP96], [IBM95] und [Ion96].
25
Common Object Request Broker Architecture
4.1
26
Object Management Architecture
Mit dem Referenzmodell der Object Management Architecture wird eine
Architektur zur Realisierung verteilter Anwendungen beschrieben. Wie in
Abb. 4.1 zu sehen ist, gliedert sich die OMA in vier Teile: den Object Request
Broker, Object Services, Common Facilities und Application Objects. Dabei
ist zu erkennen, daß der Object Request Broker die zentrale Rolle spielt.
Er bietet die Infrastruktur, die die Kommunikation zwischen Objekten unabhängig von deren Plattformen und Implementierungstechniken ermöglicht.
Mit den Object Services sind Komponenten zur Steuerung der Lebenszyklen
von Objekten standardisiert. Dazu gehören Schnittstellen zum Erzeugen, Kopieren, Verschieben und Zerstören von Objekten sowie zur Zugriffskontrolle.
Ebenso sind ein Persistenzdienst, der das Speichern von Objekten auf externen Speichermedien beschreibt, sowie ein Ereignismeldungsservice für die
asynchrone Meldung von Ereignissen definiert.
Die Common Facilities bieten allgemein nützliche Funktionen an, die in direkterem Bezug zum Benutzer stehen. Dazu gehören z. B. Drucken, Dokumentenverwaltung, Datenbanken und E-Mail-Funktionen. Sie sind allerdings
für ein CORBA-konformes Produkt – anders als bei den Object Services –
nicht unbedingt erforderlich.
Application Objects
Common Facilities
Object Request Broker
Object Services
Abbildung 4.1: OMA-Referenzarchitektur
Unter den Application Objects sind Anwendungen zu verstehen, die auf die
Funktionalitäten der Object Services und Common Facilities zurückgreifen.
Sie werden zur Zeit nicht von der OMG standardisiert.
Common Object Request Broker Architecture
4.2
27
Das OMG Objekt-Modell
Durch die Vielzahl der Entwickler in der OMG war es notwendig, eine gemeinsame Basis für Terminologien und das Verständnis von Objekten zu schaffen.
Aus diesem Grund definiert das OMG Objekt-Modell gemeinsame ObjektSemantiken, die die äußerlich sichtbaren Charakteristiken von Objekten in
einer standardisierten und implementierungsunabhängigen Weise spezifizieren.
Das OMG Objekt-Modell basiert auf den folgenden Grundbegriffen:
• Objekte
• Operationen
• Typen und Subtypen
Ein Objekt kann jede Art von Entität darstellen, so z. B. eine Person, ein Boot
oder ein Dokument. Operationen beziehen sich auf das Objekt und führen
bestimmte Aufgaben wie das Ermitteln des Geburtstages einer Person aus.
Alle Operationen, die mit einem Objekt verknüpft sind, charakterisieren die
Eigenschaften des Objekts.
Objekte werden als Instanzen von Typen erzeugt, so gesehen kann ein Typ als
ein Template für die Objekterzeugung angesehen werden. 5 Der Objekt-Typ
entspricht der Klasse in der Programmiersprache C++. Eine Instanz des Typs
Boot könnte sein: rotes Boot, 10 Meter lang, 6 Sitzplätze. Ein Typ charakterisiert die Eigenschaften seiner Instanz durch Beschreiben der Operationen,
die auf dieses Objekt angewandt werden können. Zwischen Typen können
Beziehungen bestehen: Ein Schnellboot kann aus der allgemeinen Form Boot
hergeleitet sein. Beziehungen werden durch Supertypen und Subtypen definiert. Dies entspricht den Basisklassen und abgeleiteten Klassen in C++.
Die Konzepte des OMG Objekt-Modells müssen von jedem System unterstützt werden, das auf CORBA aufsetzt. Dabei ist es möglich, das ObjektModell durch Erweiterungen um Funktionalitäten zu bereichern.6
4.3
Die Struktur eines Object Request Broker
Abb. 4.2 zeigt den Weg, den die Anfrage eines Clients an eine Objektimplementierung nimmt. Der Client ist hierbei die Entität, die eine Operation
5
6
Vergl. [Pra94b] für eine Definition des Begriffs Typ“.
”
Dieses wird ausführlich in [OMG92] beschrieben.
Common Object Request Broker Architecture
28
Client
Objektimplementierung
Anfrage
ORB
Abbildung 4.2: Eine Anfrage an ein Objekt durchläuft den ORB
eines Objektes ausführen möchte, die Objektimplementierung enthält den Code in Maschinensprache und die Daten für die Ausführung des Objekts. Der
Object Request Broker ist verantwortlich für das Auffinden der Objektimplementierung, die Vorbereitung zum Annehmen der Anfrage und den Datenaustausch zwischen Client und Objektimplementierung. Die Schnittstelle, die
dem Client bereitgestellt wird, ist dabei unabhängig von dem Aufenthaltsort
des Objekts, der Programmiersprache oder der Systemumgebung.
Die Struktur eines ORB wird in Abb.4.3 dargestellt. Die Schnittstellen zum
ORB sind durch die dunkler eingefärbten Boxen kenntlich gemacht, die Pfeile
zeigen an, ob eine Anfrage an den ORB herangetragen wird oder er selbst über
eine Up-Call“-Schnittstelle anfragt.
”
Schnittstellen zu Objekten können auf zwei Arten definiert werden. Zum einen
können sie in einer vorgegebenen Sprache statisch definiert werden, die als
Interface Definition Language (IDL) standardisiert worden ist. Sie beschreibt
Objekte und die Operationen, die mit diesem Objekt verknüpft sind.7
Die Definitionen einer Schnittstelle können in einem Interface Repository gespeichert werden, um so andere Komponenten auf dieses Objekt aufmerksam
zu machen. Damit kann zum andern realisiert werden, daß diese Komponenten auf das neue Objekt zugreifen können, ohne bei deren Entwicklung von
dem Objekt Kenntnis gehabt zu haben. Dies wird über den dynamischen
Aufruf realisiert.8
7
8
Siehe 4.4.
Siehe 4.5.
Common Object Request Broker Architecture
29
Client
dynamischer
Aufruf
IDL
Rumpf
Objektimplementierung
ORB
Schnittstelle
IDL
Skelett
Objekt
Adapter
ORB
Bei allen ORB-Implementierungen identische Schnittstelle
Normale Schnittstelle
Objekt Adapter sind mehrfach vorhanden
Rumpf und Skelett sind vom Objekt abhängig
Up-Call Schnittstelle
ORB abhängige Schnittstelle
Abbildung 4.3: Schnittstellen des Object Request Broker
Clients können für Anfragen den dynamischen Aufruf oder den IDL-Rumpf 9
verwenden. Die Schnittstelle für den dynamischen Aufruf ist für alle Objekte
identisch, der IDL-Rumpf stellt das spezielle Interface des Objektes dar. Für
bestimmte ORB-Funktionen benutzt der Client direkt die Schnittstelle des
ORB.
Die Objektimplementierung empfängt die Anfrage durch das aus der IDL
erzeugte Skelett10 . Während der Bearbeitung der Anfrage kann die Objektimplementierung Funktionen des Object Adapters oder des ORBs aufrufen.
Der Client benötigt für eine Anfrage den Zugriff auf eine Objektreferenz. Er
muß daher von der Art des Objektes sowie der Operation, die er ausführen
möchte, Kenntnis haben. Die Anfrage kann über den Aufruf der RumpfRoutinen ausgeführt werden, der Aufruf kann aber auch dynamisch konstruiert werden (Siehe Abb. 4.4).
Unter einem dynamischen Aufruf ist zu verstehen, daß der Client zur Laufzeit nach verfügbaren Objekten suchen kann und Operationen auf Objekte
ausführt, die zum Zeitpunkt der Entwicklung des Clients noch nicht verfügbar
waren. Der Aufruf über Stub-Routinen kann durchaus mit den Mechanismen
9
10
In der Literatur wird auch häufig der englische Begriff Stub verwendet.
Im englischen wird der Begriff Skeleton verwendet.
Common Object Request Broker Architecture
30
Client
Anfrage
dynamischer
Aufruf
IDL
Rumpf
ORB
Abbildung 4.4: Anfragemöglichkeiten eines Client
des Remote Procedure Call verglichen werden, nur wird hier nicht der Name
des Zielrechners benötigt.
Der ORB lokalisiert die Objektimplementierung und übermittelt ihr den Aufruf mit seinen Parametern über das IDL-Skelett (Siehe Abb. 4.5). Das IDLSkelett ist dabei abhängig vom Interface des Objektes sowie vom Object
Adapter. Für die Ausführung der Anfrage kann die Objektimplementierung
Funktionen des ORB über den Object Adapter in Anspruch nehmen. Nach
Beendigung der Operation werden Steuerdaten und Rückgabewerte an den
Client zurückgegeben.
Für die Objektimplementierung ist es unerheblich, ob die Operation aus einem dynamischen oder statischen Aufruf ausgeführt wurde, beide Aufrufmethoden bieten die gleiche Funktionalität.
4.4
Interface Definition Language
Ein wesentliches Ziel im Entwurf der CORBA-Architektur ist die Programmiersprachenunabhängigkeit von CORBA-Objekten und deren Clients. Daher
ist für die Definition von Schnittstellen eine eigene Sprache entwickelt worden,
die den Namen Interface Definition Language (IDL) erhalten hat. 11 Auffallend ist ihre Ähnlichkeit mit der verbreiteten Programmiersprache C++, al11
Da es mehrere Sprachen zur Beschreibung von Schnittstellen gibt, die den Namen Interface Definition Language tragen, sind hier leicht Verwechslungen möglich. In dieser Arbeit
ist aber immer die IDL gemeint, die von der OMG standardisiert wurde.
Common Object Request Broker Architecture
31
Objektimplementierung
Anfrage
IDL
Skelett
Object
Adapter
ORB
Abbildung 4.5: Eine Objektimplementierung empfängt eine Anfrage
lerdings enthält IDL ausschließlich Syntax zur Datenbeschreibung und keine
Anweisungskonstrukte. Sie ist detailliert in [OMG93] beschrieben, im folgenden sollen nur die wesentlichsten Merkmale der Sprache beschrieben werden.
4.4.1
Typenwerte
IDL unterscheidet Objekte und Werte anderen Typs. In Abb. 4.6 sind die
definierten Typenwerte aufgelistet. Any erlaubt das Verwenden typloser Argumente oder Resultate.
Value
Object Reference
Basic Value
Constructed Value
Struct
Short
Long
UShort
ULong
Float
Double
Char
String Boolean
Octet
Sequence
Enum
Abbildung 4.6: In IDL definierte Werte
Any
Union
Array
Common Object Request Broker Architecture
4.4.2
32
Module
Ein Modul kann mehrere Objekte zusammenfassen, aber selbst keine Operationen oder Attribute enthalten. Module werden über das Schlüsselwort
module definiert:
module DemoModule
{
interface a
{
...
};
interface b
{
...
};
};
4.4.3
Interface
Objekte werden über das Schlüsselwort interface definiert, sie können im
Gegensatz zu Modulen Attribute und Operationen enthalten.
interface demo
{
attribute Short value;
Short return_value();
};
4.4.4
Attribute
In Attributen können Daten eines Objektes gespeichert werden. Sie bezeichnen les- und schreibbare Werte. Attribute werden über das Schlüsselwort
attribute definiert. Sie können die oben angegebenen Werte annehmen. Einige Beispiele für Attribute sind:
interface attribute_demo
{
enum Colors {red, blue, green};
Common Object Request Broker Architecture
33
attribute String name;
attribute Colors pixelcolor;
};
4.4.5
Operationen
Operationen werden ähnlich wie in C++ definiert, allerdings muß bei Parametern angegeben werden, in welche Richtung sie gereicht werden sollen. Dafür
werden den Parametern die Schlüsselworte in, out oder inout vorangestellt.
interface a
{
attribute UShort value;
void set_value(in UShort new_value);
void get_value(out UShort output_value);
void add_to_value(inout UShort value_to_be_added);
};
In der Regel ist CORBA auf synchrone Nachrichtenübermittlung ausgerichtet. Dies bedeutet, der Aufrufer wartet immer solange, bis die Operation
vollständig abgeschlossen ist. Dies ist jedoch nicht immer sinnvoll, daher erlaubt die IDL-Notation durch das Voranstellen des Schlüsselwortes oneway
die asynchrone Bearbeitung der Operation:
oneway void perform_this_operation();
Voraussetzung für die Ausführung einer One-Way-Operation ist, daß die zugehörige Methode keine Werte zurückliefert.
4.4.6
Vererbung
Die IDL-Notation unterstützt auch einfache und mehrfache Vererbung, allerdings ist Implementierungsvererbung nicht möglich. Wird ein Interface von
einem anderen abgeleitet, so spricht man bei diesem vom Basis-Interface. In
dem folgenden Beispiel ist A das Basis-Interface von B und C, D ist ist wieder und C und hat somit auch A als Basis-Interface. Abb. 4.7
um abgeleitet von B
zeigt die Hierarchie grafisch.
interface A {...}
Common Object Request Broker Architecture
34
interface B: A {...}
interface C: A {...}
interface D: B, C {...}
A
B
C
D
Abbildung 4.7: Beispiel zur Mehrfachvererbung
4.5
Dynamic Invocation Interface
Das Dynamic Invocation Interface (DII) des ORB erlaubt das Erzeugen und
Aufrufen von Operationen von Objekten zur Laufzeit von Anwendungen, auch
wenn das Objekt zur Kompilierungszeit des Anwendungsprogramms noch
nicht existierte.
Dazu ist es notwendig, die IDL-Informationen der Objekte in einem Interface
Repository zu speichern. Dieses kann von Clients eingesehen werden, so daß
sie Informationen über alle verfügbaren Objekte erhalten.
Ein dynamischer Aufruf setzt sich zusammen aus einer Objektreferenz, einer
Operation und einer Liste von Parametern. Die implementierungsabhängigen
Aufruf-Prinzipien werden dabei vom ORB verdeckt. Die Parameter werden
an die Struktur NamedValue angepaßt, so daß sie unabhängig von ihrem Typ
werden. Die Struktur ist definiert als:
typedef unsigned long Flags;
struct NamedValue {
Identifier
name;
any
argument;
long
len;
Flags
arg_modes;
};
//
//
//
//
argument name
argument
length/count of argument value
argument mode flags
Sie ist Bestandteil des Moduls CORBA, so daß sie in IDL mit vorangestelltem
CORBA:: referenziert werden müssen.
Common Object Request Broker Architecture
35
In der Struktur NamedValue sind der Argumentname, der Argumentwert (als
Typ any), die Länge des Argumentes und eine Reihe von Argument-Flags.
Unter name wird der Parameter identifiziert, der Datentyp Identifier dient
zum Speichern alphanumerischer Zeichen. Mit dem Datentyp any können beliebige Datentypen gespeichert werden. Wegen der unterschiedlichen Längen
der Datentypen wird die Länge separat festgehalten. arg modes kann die
Werte CORBA::ARG IN, CORBA::ARG OUT oder CORBA::ARG INOUT annehmen,
je nachdem, in welche Richtung das Argument gereicht werden soll.
Für die Übergabe der Parameter wird die Referenz NVList benutzt, die als
Referenz auf NamedValue definiert ist. In der Programmiersprache C wird
NVList definiert als:
CORBA_NamedValue *CORBA_NVList;
Das vorangestellte CORBA symbolisiert das Modul CORBA.
Für den Aufruf einer Operation dient das Pseudo-Objekt Request aus dem
Modul CORBA, das wie folgt definiert ist:
module CORBA {
interface Request {
Status add_arg (
in Identifier
name,
in TypeCode
arg_type,
in void
*value,
in long
len,
in Flags
arg_flags
);
Status invoke (
in Flags
invoke_flags
);
Status delete();
Status send (
in Flags
invoke_flags
);
Status get_response (
in Flags
response_flags
);
};
};
//
//
//
//
//
argument name
argument datatype
argument value to be added
length/count of argument value
argument flags
// invocation flags
// invocation flags
// response flags
Common Object Request Broker Architecture
36
Zusätzlich zu den hier definierten Funktionen wird noch die Operation
create request benötigt, die auf jedes Objekt angewendet werden kann:
Status create_request (
in Context
ctx,
in Identifier
operation,
in NVList
arg_list,
inout NamedValue
result,
out Request
request,
in Flags
req_flags
);
//
//
//
//
//
//
context object for operation
intended operation on object
args to operation
operation result
newly created request
request flags
Mit dieser Funktion wird eine ORB-Anfrage erzeugt. Die Parameter für den
Operationsaufruf können über arg list angegeben werden, sie können aber
auch mit der Funktion add arg hinzugefügt werden.
Der Methodenaufruf erfolgt dann über die Funktion invoke. Mit delete wird
die ORB-Anfrage gelöscht und alle benutzten Speicherbereiche freigegeben.
Soll der Methodenaufruf nicht synchron ablaufen, kann er statt mit invoke
mit der Funktion send einberufen werden. send kehrt sofort zurück, ohne das
Ergebnis der aufgerufenen Funktion abzuwarten. Das Ergebnis kann später
mit get response nachgefragt werden. 12
4.6
Basic Object Adapter
Objektadapter dienen als Schnittstelle zwischen Objektimplementierungen
und Object Request Broker. Grundsätzlich sind verschiedene Implementierungen von Objektadaptern denkbar, sie müssen aber mindestens dem Standard des Basic Object Adapter (BOA) entsprechen.
Der BOA dient hauptsächlich dazu, Objekte administrativ ins CORBARahmenwerk zu integrieren. Im einzelnen bietet er folgende Funktionen:
• Erzeugung und Interpretation von Objektreferenzen
• Identifizierung und Authentisierung des jeweilig aufrufenden Client
• Aktivierung und Deaktivierung der Implementierung
• Methodenaufruf mit Hilfe des generierten Rumpfes
12
Weitere Information können [OMG93] entnommen werden.
Common Object Request Broker Architecture
37
Innerhalb eines CORBA-Rahmenwerkes werden Objekte mit einer eindeutigen Objektreferenz identifiziert. Der BOA erzeugt und verwaltet diese Referenzen.
Zur Aktivierung und Deaktivierung persistenter Objekte gehört, daß Daten
bei der Deaktivierung dauerhaft gespeichert werden müssen, z. B. auf Festplatten. Bei der Aktivierung müssen diese Daten wieder greifbar gemacht
werden.
Bei der Methodenaktivierung gibt es mehrere Varianten. Es ist möglich, jede
Methode eines Objektes mit einem eigenen Programm zu realisieren (Server per method), das dann vom BOA gestartet werden kann. Eine andere
Möglichkeit ist, jedes Objekt durch ein Programm zu implementieren (Unshared Server). Ein Programm kann aber auch ein Object und alle seine
Instanzen repräsentieren (Shared Server). Die Wahl dieser Mechanismen ist
in der CORBA-Spezifikation nicht näher aufgeführt, da sie stark von der jeweiligen Implementierung und dem Betriebssystem abhängig sind.
4.7
Object Services
Mit den Object Services sind eine Reihe verschiedener Dienste standardisiert
worden, die an dieser Stelle kurz vorgestellt werden:
• Naming Service: Objekte können beim Naming Service angemeldet
werden, so daß sie anhand ihres Namens lokalisiert werden können. Der
Naming Service ermittelt zu Objekten die zugehörige Objektreferenz.
• Event Service: CORBA stellt die Möglichkeit zur Übermittlung von
Ereignissen zwischen Erzeugern und Konsumenten zur Verfügung. Die
Übertragung findet asynchron über Ereigniskanäle statt.
• Life Cycle Service: Mit dem Life Cycle Service werden die Funktionen zur Erzeugung sowie zum Kopieren, Bewegen und Löschen von
Objekten bereitgestellt.
• Property Service: Dieser Service erlaubt das dynamische Verknüpfen
von Eigenschaften zu Objekten unabhängig von ihrer Schnittstellendefinition.
• Relationship Service: Hierüber können Beziehungen zwischen Objekten nach dem Entity-Relationship-Modell definiert werden.
• Persistence Service: Er dient zum dauerhaften Speichern und Laden
von Objekten auf bzw. von externen Speichermedien.
Common Object Request Broker Architecture
38
• Concurrency Service: Paralleler Zugriff auf Objekte wird durch Standardmechanismen (Semaphoren und Locks) gesichert.
• Externalization Service: Er realisiert den Datenaustausch von Objekten nach Dateien außerhalb des Objektsystems.
• Transaction Service: Er enthält Techniken zur Durchführung transaktionsgesteuerter Abläufe unter Implementierung eines zweistufigen
Commit.
• Time Service: Der Time Service dient der Synchronisation von Uhren
in einer verteilten Umgebung.
• Security Service: Autorisierungs- und Überwachungsfunktionen auf
Objektebene werden hier zur Verfügung gestellt.
• Licensing Service: Hierin findet sich ein Rahmenwerk für die Spezifikation und das Management von Lizenzierungsdiensten und Benutzerüberwachung.
• Query Service: Hierunter verstehen sich Operationen auf Objektmengen, die eine prädikatenbasierte und deklarative Spezifikation besitzen.
Queries können als Ergebnis Objektmengen zurückliefern.
4.8
Bereitstellen von Objekten
Objektimplementierungen werden bei ihrer Installation am lokalen ORB angemeldet. Dabei werden Informationen über das Object in einem Implementation Repository gespeichert. Dieses wird benötigt zum Auffinden und Aktivieren der Implementierung bei Methodenaufrufen und zum Speichern zusätzlicher Informationen.
4.9
Interoperabilität
Mit der Verabschiedung der CORBA Spezifikation 2.0 im Dezember 1994 ist
die Grundlage für die Interoperabilität von Object Request Brokern verschiedener Hersteller gelegt. Dabei spielt die Fähigkeit von ORBs, auf CORBAObjekte zuzugreifen, die von anderen ORBs verwaltet werden, eine große
Rolle.
Um die Interoperalität zu gewährleisten, werden folgende Fähigkeiten
benötigt:
Common Object Request Broker Architecture
39
• die Möglichkeit, mit ORBs anderer Hersteller zusammenzuarbeiten, ohne deren Implementiertung zu kennen,
• die Unterstützung aller ORB Funktionalitäten und
• die Erhaltung von Inhalt und Semantik ORB-spezifischer Informationen
über ORB-Grenzen hinaus (z. B. Sicherheitsmechanismen).
Dieses bedeutet, daß ein Aufruf zwischen Client- und Server-Objekten davon unabhängig sein muß, ob sie bei einem oder bei verschiedenen ORBs
angemeldet sind.
Der Ansatz der Universal Networked Objects (UNO) 13 unterscheidet zwischen
Stand-Alone-ORBs und Networked-ORBs. Stand-Alone-ORBs entsprechen
den bisherigen CORBA-1.x-Implementierungen, die eine gemeinsame Umgebung für Objekte verwalten, aber nicht mit Produkten anderer Hersteller
zusammenarbeiten können. Networked-ORBs verfügen über Bridges, über die
nach definierten Kommunikationsprotokollen mit anderen ORBs Datenaustausch stattfinden kann. Die Aufgabe der Bridge besteht darin, den Aufruf
in das Format des Aufgerufenen zu konvertieren.
Dabei sind zwei Arten von Bridges definiert, die einen sind innerhalb des ORB
implementiert und werden In Line Bridges bezeichnet, die anderen entsprechen Erweiterungen außerhalb des ORB und heißen Request Level Bridges.
logische Client-Server Verbindung
Client
Server
(DII)
ORB Services
ORB Services
Kernel ORB
Kernel ORB
Abbildung 4.8: Kommunikation über In Line Bridges
In Line Bridges bieten eine direktere Möglichkeit, zwischen ORBS zu vermitteln (Abb. 4.8). Sie nutzen die speziellen Funktionen des ORB.
Eine Request Level Bridge benötigt keinen Zugriff auf ORB-interne Funktionen und bietet daher flexiblere Einsatzmöglichkeiten. Sie besteht aus
13
Vergl. [SunS94].
Common Object Request Broker Architecture
40
zwei Teilen, den Half-Bridges, die über CORBA-Schnittstellen angesprochen werden können (Abb. 4.9). Der Datenaustauch zwischen den HalfBridges erfolgt im General Inter-ORB Protocol (GIOP) oder im EnvironmentSpecific Inter-ORB Protocol (ESIOP). GIOP ist Bestandteil jeder CORBA2-Implementierung, ESIOP optional. In TCP/IP-Netzen wird das Internet
Inter-ORB Protocol (IIOP) verwendet, welches vom GIOP abgeleitet ist.
Sobald ein ORB mit einem anderen in Verbindung tritt, erzeugt die HalfBridge des aufrufenden stellvertretend für das aufrufende Objekt ein ProxyObjekt.
logische Client-Server Verbindung
Client
Server
Bridge
(DII)
DSI
(DII)
ORB Services
ORB Services
Kernel ORB
Kernel ORB
Abbildung 4.9: Kommunikation über Request Level Bridges
Auf der Empfängerseite wird ebenfalls ein Proxy-Objekt erzeugt. Diese steuern den Datenaustausch. Zum Ansteuern der Half-Bridge verwendet der Aufrufer das Dynamic Invocation Interface, auf Empfängerseite existiert eine
neue Komponente: das Dynamic Skeleton Interface (DSI). Dies erlaubt in
Analogie zum DII einem Server-Objekt das Empfangen von Nachrichten, ohne von dem aufrufenden Objekt Kenntnis zu haben.
Der ORB auf der Empfängerseite startet das Server-Objekt und sorgt für den
Aufruf der gewünschten Methode. Das Operationsergebnis wird dann über die
Bridge an den Client zurückgegeben.
Die CORBA-2-Spezifikation wird z. Z. nur von wenigen Anbietern CORBAkonformer Produkte unterstützt, so daß die Zusammenarbeit verschiedener
ORBs erst bei zukünftigen Implementierungen realisiert werden kann.
Common Object Request Broker Architecture
4.10
41
Bewertung
Mit der Common Object Request Broker Architecture wird eine Infrastruktur
für verteilte, objektorientierte Systeme angeboten, die das Lokalisieren von
Objekten im Netzwerk realisiert. Sie bietet Schnittstellen an, die Objekte
unabhängig von ihrer Implementierung zur Verfügung stellt.
Damit sind die Objekte, die einmal im Netzwerk bereitgestellt sind, für alle
Anwendungen erreichbar unabhängig von ihrer Implementierung, ihrer Lokalität im Netzwerk und des Betriebssystems, unter dem sie arbeiten.
CORBA bietet alle Funktionalitäten, die für die Lösung der Aufgaben in
Kapitel 2 benötigt werden. Damit wird es als Basis für die Erweiterung des
Konferenz-Management-Systems herangezogen.
Kapitel 5
Eigenschaften von Solaris NEO
Solaris NEO1 bietet eine Infrastruktur, die auf das Objekt Modell der Object Management Group aufbaut. Es stellt einen CORBA-konformen Object
Request Broker zur Verfügung und realisiert so das Auffinden und Aktivieren von Objekten in einem Netzwerk. Es unterstützt die folgenden CORBA
Services:
• Naming Service
• Event Service
• Life Cycle Service
• Property Service
• Relationship Service
Die Objektdaten werden in Solaris NEO bei einer Objektdeaktivierung in
einem Data Store Management“ gespeichert und bei der Aktivierung wie”
der eingelesen. Administrationswerkzeuge erlauben die Verwaltung der NEOUmgebung über Rechnergrenzen hinaus. Objekte und die dahinter stehenden
Objekt-Server-Prozesse lassen sich zur Laufzeit lokalisieren und verwalten.
Solaris NEO ist eine Weiterentwicklung des Sun-internen Projektes DOE
(Distributed Objects Everywhere/Distributed Objects Environment), es handelt sich dabei um eine Erweiterung des Betriebssystems Solaris 2.4. NEO
1
Entgegen manchen Vermutungen handelt es sich bei der Bezeichnung NEO nicht um
eine Abkürzung.
42
Eigenschaften von Solaris NEO
43
1.0 beinhaltet nur die Infrastruktur für verteilte Objekte, die Integration von
OpenStep Desktop mit seinen Objekt-Klassen ist für eine spätere Version
angekündigt.
Die Entwicklungsumgebung für NEO-Objekte wird unter dem Namen
Workshop NEO angeboten und beinhaltet einen IDL-Compiler, der IDLSchnittstellen in Quelltext der Sprachen C und C++ umsetzt sowie
einen DDL-Compiler, der die Beschreibung von persistenten Daten in
NEO-Objekten unterstützt. Beide entsprechen den CORBA-Spezifikationen.
Darüber hinaus bietet es Entwicklungswerkzeuge zur Vereinfachung der Implementierung von NEO-Objekten. Workshop NEO basiert auf den Entwicklungsumgebungen für C und C++ von SunSoft.
Da die Erweiterung des Konferenz-Management-Systems Confman auf der
Basis von Solaris NEO vorgenommen worden ist, beschäftigt sich dieses Kapitel mit dessen Eigenschaften. Dadurch soll das Verständnis für die Programmierung mit NEO vermittelt werden. Anhand eines Beispiels wird erläutert,
wie auf NEO-Objekte zugegriffen werden kann, wie sie selbst implementiert
und installiert werden und wie Objekte in einem Netzwerk lokalisiert werden.
Als Beispiel dient ein HelloWorld-Objekt, das eine Methode zum Ausgeben
einer Zeichenkette enthält, gleichzeitig einen Zähler verwaltet, der die Anzahl
der Aufrufe dieser Methode mitzählt. Der Zählerstand kann über eine zweite
Methode abgerufen werden.
5.1
Begriffe
Zunächst ist die Klärung einiger Begriffe erforderlich, die im folgenden als
bekannt vorausgesetzt werden. Die Begriffe werden im englischen Original
verwandt, da sie auch im Umgang mit Solaris NEO wieder anzutreffen sind
und daher eine Übersetzung nicht sinnvoll ist.2
Naming Context: NEO-Objekte können in einem Naming Context zusammengefaßt werden. Dadurch werden logische Gruppierungen von Objekten realisiert, Objekte können jederzeit eingefügt oder gelöscht werden.
Dies ermöglicht das Auffinden von Objekten, die erst zur Laufzeit erzeugt werden.
Name Space: Bezeichnet eine Gruppierung von Naming Contexts.
Service: Ein NEO-Objekt, das Dienstleistungen anbietet, wird als Service
bezeichnet. Es wird im Naming Context /machine/services initiali2
Detaillierte Beschreibungen zu den Begriffen können [SunS95e] und [SunS95i] entnommen werden.
Eigenschaften von Solaris NEO
44
siert, wenn es Dienste für den lokalen Rechner anbietet. Im Naming
Context /workgroup/services kann der Dienst von allen Rechnern
der Arbeitsgruppe in Anspruch genommen werden.
Factory Object: Hiermit wird ein Objekt bezeichnet, das andere NEOObjekte eines bestimmten Typs erzeugt. Die Factory selbst wird bei
der Installation erzeugt.
User Program: Hierunter ist eine Anwendung zu verstehen, die mit Objekten über NEO kommuniziert und nicht von diesem gestartet wurde. In
der Regel wird sie von Anwendern oder aus einer anderen Anwendung
heraus gestartet.
User-Started Server: Ein Anwendungsprogramm, das von einem Benutzer oder aus einer anderen Anwendung heraus gestartet wurde, selbst
aber Objekte bereitstellt, die von anderen NEO-Objekten oder Anwendungsprogrammen referenziert werden können. Dies wird für die Dynamic Notification benötigt.3
Workgroup: Verschiedene Rechner werden in einer Arbeitsgruppe zusammengefaßt. Innerhalb der Workgroup können Objekte gemeinsam genutzt werden.
5.2
Services und Name Space
NEO-Objekte, die Dienste anbieten, werden durch ihren Namen identifiziert.
Dieser Name und die dazugehörige Objektreferenz werden in einem gemeinsamen Namensraum festgehalten, dem Name Space. Äußerlich betrachtet
gleicht der Name Space einem Verzeichnisbaum, Abb. 5.1 zeigt eine typische
Struktur.
In der Abbildung ist der Namensraum einer Arbeitsgruppe mit zwei Computern dargestellt. So kann z. B. das Object EventFactory als /machine/services/EventFactory angesprochen werden, wobei /machine/services als Naming Context bezeichnet wird. In einem Naming Context können alle Arten
von NEO-Objekten abgelegt werden, so auch Services. Services werden üblicherweise im Kontext services abgelegt, so daß sie bei der Suche auffindbar
sind.
3
Siehe 5.5.
Eigenschaften von Solaris NEO
45
/ (root)
machine
services
Instanzenname
EventFactory
InterfaceRepository
NamingFactory
NodeFactory
PropertySetFactory
ReferencedByRoleFactory
ReferencesRoleFactory
ReportingCurrencyFactory
ServerAdminFactory
workgroup
admin
machines
services
Objektreferenz
<reference1>
<reference2>
<reference3>
<reference4>
<reference5>
<reference6>
<reference7>
<reference9>
<reference10>
servers
computer1
computer2
Confman
entspricht /machine
auf computer1
ConferenceMembers
Instanzenname
[email protected]
[email protected]
[email protected]
[email protected]
Conferences
Objektreferenz
<reference1>
<reference2>
<reference3>
<reference4>
Abbildung 5.1: Name Space: Namensraum von NEO-Objekten
5.3
Implementierung eines NEO-Objektes
Für die Entwicklung von NEO-Objekten ist es sinnvoll, Interface, Objektimplementierung und Client in verschiedenen Verzeichnissen zu entwickeln.
Im folgenden Beispiel wird das Interface im Verzeichnis ./include abgelegt,
die Objektimplementierung im Verzeichnis ./src/HelloWorldObject. Der
Client befindet sich im Verzeichnis ./src/helloworld.
5.3.1
Erzeugen und Registrieren des Interfaces
Um ein neues ORB-Objekt zu erzeugen, wird zunächst das Interface
benötigt. Das folgende Code-Segment enthält das in IDL geschriebene Interface des HelloWorld-Objektes, das hier und in den weiteren Schritten implementiert und ergänzt werden soll. Es ist unter dem Namen
./include/HelloWorld.idl abgelegt.
module HelloWorlds{
interface HelloWorld
{
string get_string();
short get_number_of_calls();
};
};
Eigenschaften von Solaris NEO
46
Das für die Registrierung des Objektes benötigte Imakefile sieht wie folgt aus.
Es befindet sich ebenfalls im Verzeichnis ./include.
PARAM_ODF_DIR=/opt/SUNWdoe/include/odf
/* Use ODF rules, targets and environment variables for building
programs */
include $(PARAM_ODF_DIR)/Makefiles/Makefile.odf
IDL_Library(HelloWorld)
Interface
Imakefile
HelloWorld.idl
odf
imake
Makefile
make
libHelloWorld.so
HelloWorld.ifr
internal files
odf_ouput/
HelloWorld.hh
Abbildung 5.2: Generierung des IDL-Stubs
Aus dem Imakefile wird mit dem Befehl odfimake das Makefile erzeugt, anschließend mit make die Übersetzung des IDL-Files in C und C++-HeaderFiles sowie die Generierung der dynamischen Bibliotheken vorgenommen.
Diese bilden den IDL-Stub und ermöglichen dem Client den Zugriff auf das
zu erzeugende Objekt. Der Befehl make register sorgt für die Registrierung
des Interfaces im Interface Repository und ist notwendig für die weitere Implementierung des Objektes. Eine grafische Übersicht der Schritte ist in den
Abb. 5.2 und 5.3 zu sehen.
5.3.2
Persistente Daten
Die oben angesprochene Zählervariable soll als persistentes Datum abgelegt werden, daher wird eine Datei zur Datenbeschreibung benötigt, die als
Eigenschaften von Solaris NEO
47
Interface
make
libHelloWorld.so
HelloWorld.ifr
internal files
odf_ouput/
HelloWorld.hh
make
register
IDL ist im
IFR registriert
Abbildung 5.3: Registrierung des Interfaces
./src/HelloWorldObject/HelloWorld.ddl gespeichert wird:
module HelloWorldDDL {
interface HelloWorldData {
attribute short count;
};
};
5.3.3
Erzeugen des Sample-Server-Codes
Für die weitere Implementierung des Server-Objektes ist es sinnvoll,
sich vom ODF-Compiler ein Quelltextgerüst erzeugen zu lassen, das
dann von Hand mit der gewünschten Funktionalität gefüllt wird. Dazu wird ein Implementation-File angelegt. In diesem Beispiel wird es als
./src/HelloWorldObject/HelloWorld.impl abgelegt und sieht wie folgt
aus:
import "HelloWorld.idl";
import "HelloWorld.ddl";
implementation HelloWorldImpl : HelloWorlds::HelloWorld {
persistence = HelloWorldDDL::HelloWorldData;
creator new_object();
Eigenschaften von Solaris NEO
48
service = "HelloWorldObject";
};
Das für die weitere Entwicklung benötigte Imakefile enthält die Angaben für
die Erzeugung der persistenten Daten sowie des Quelltextgerüstes. Es muß
auch der Pfad angegeben werden, in dem die aus dem Interface erzeugten
Header-Files und die dynamischen Bibliotheken zu finden sind.
/* This Imakefile builds the HelloWorldObject server */
PARAM_ODF_DIR=/opt/SUNWdoe/include/odf
/* Use ODF rules, targets and environment variables for building
programs */
include $(PARAM_ODF_DIR)/Makefiles/Makefile.odf
/* This program depends on the following IDL */
SERVER_HelloWorld_LIBS = Cos HelloWorld
/* The include files for the IDL */
INCLUDES += -I../../include -I../../include/odf_output
/* The development libraries for that IDL are found in ../include */
SERVER_HelloWorld_LIBPATH = $(PWD)/../../include
SERVER_HelloWorld_RUNPATH = $(PWD)/../../include
/* Generate code for the HelloWorld’s persistent data, according to
the DDL found in HelloWorld.ddl
*/
DDL_Schema(HelloWorld)
SERVER_HelloWorld_OBJECTS = DDL_Objects(HelloWorld)
/* Name the server program "HelloWorldObject" */
SERVER_HelloWorld_PROGRAM = HelloWorldObject
/* Build the HelloWorldObject program */
BasicServerProgram(HelloWorld)
Auch hier wird mit den Befehl odfimake das Makefile erzeugt, anschließend
mit make copy samples das Quelltextgerüst (C++-Quelltext), die Dateien
HelloWorldImpl.hh und HelloWorldImpl.cc, sowie einige interne Dateien
und Verzeichnisse generiert (Siehe Abb. 5.4).
Eigenschaften von Solaris NEO
Interface
HelloWorld.idl
49
Object Server
HelloWorld.ddl
HelloWorld.impl
Imakefile
odf
imake
Makefile
make
copy_samples
HelloWorldImpl.hh
HelloWorldImpl.cc
interne Dateien
odf_ouput/
HelloWorldImpl.hh
HelloWorldImpl.cc
Abbildung 5.4: Erzeugen des Sample-Server-Codes
5.3.4
Einfügen der Objekt-Funktionalität
Das oben erstellte Quelltextgerüst enthält alle Funktionen, die im IDLFile definiert worden sind, allerdings erzeugen sie die Fehlermeldung
NO IMPLEMENT. Daher ist es vor dem Ausführen weiterer Schritte notwendig, die C++-Quelltextdatei in einem Editor zu bearbeiten. In unserem
Beispiel kann die gewünschte Funktionalität durch Edieren der Funktionen
HelloWorldImpl::get string(), HelloWorldImpl::get number of calls(),
HelloWorldImpl:: initialize new object(), erreicht werden. Die folgende Quelltext-Datei ./src/HelloWorldObject/HelloWorldImpl.cc dient als
Beispiel für eine mögliche Implementierung.
//
// Sample C++ implementation for HelloWorld.impl
// Generated by odfcc version ODFBE_0.25 (version date: 18 Sep 1995)
//
#include "HelloWorldImpl.hh"
#include "odf_output/OdfHelloWorldImpl.hh"
#include "query_registration.hh"
//
// Member functions for HelloWorldImpl class
//
Eigenschaften von Solaris NEO
50
/******************************************************************/
// HelloWorldImpl::get_string
/******************************************************************/
CORBA::String
HelloWorldImpl::get_string(
)
throw(::CORBA::SystemException)
{
::CORBA::String function_result = "Hello World!\n";
// increase count variable
count += 1;
// return the hello string
return function_result;
}
/******************************************************************/
// HelloWorldImpl::get_number_of_calls
/******************************************************************/
CORBA::Short
HelloWorldImpl::get_number_of_calls(
)
throw(::CORBA::SystemException)
{
// return count variable
return count;
}
/******************************************************************/
// HelloWorldImpl::_initialize_new_object
/******************************************************************/
// Called from creator OdfHelloWorldImpl::new_object
void
HelloWorldImpl::_initialize_new_object()
{
count = 0;
}
5.3.5
Erzeugen und Registrieren des Server-Objektes
Nachdem die Quelltextdateien des Server-Objektes um die gewünschte Funktionalität erweitert worden sind, wird mit dem Befehl make das Server-Objekt
erzeugt. make register sorgt für die Registrierung als NEO Objekt und die
Bereitstellung in der Arbeitsgruppe. Abb. 5.5 zeigt die Schritte grafisch.
Eigenschaften von Solaris NEO
51
Interface
libHelloWorld.so
HelloWorld.idl
Object Server
HelloWorld.ddl
HelloWorld.impl
HelloWorldImpl.hh
Makefile
HelloWorldImpl.cc
make
HelloWorldClient
interne Dateien
und
Verzeichnisse
make
register
Server ist beim
ORB registriert
weitere
interne Dateien
Abbildung 5.5: Registrieren des Server-Objektes
5.4
5.4.1
Zugriff auf ORB Objekte
Auffinden von Diensten
Die Funktion ODF find bietet die Möglichkeit, NEO-Objekte innerhalb einer
Arbeitsgruppe von mehreren Rechnern zu lokalisieren. Dazu ist es notwendig,
den Namen zu kennen, unter dem das Objekt registriert wurde. ODF find
liefert die Referenz auf das Objekt zurück, damit kann es wie andere C++Objekte angesprochen werden. Für den Programmierer ist damit transparent,
wo sich das Objekt befindet und wie die Kommunikation über das Netzwerk
stattfindet.
5.4.2
Erzeugen des Client-Code
Das folgende Programm lokalisiert mit Hilfe der Funktion ODF find das NEOObjekt HelloWorld und benutzt dessen Methoden. Wenn bei der Lokalisierung des Objektes Fehler auftreten, so werden sie über die Exception abgefangen. Die Methodenaufrufe unterscheiden sich nicht von denen bekannter
C++-Objekte. Über die include-Direktive werden die Dateien odf.hh und das
vom IDL-Compiler erzeugte Headerfile HelloWorld.hh eingelesen. Das Programm wird unter dem Namen ./src/helloworld/HelloWorldClient.cc
gespeichert.
Eigenschaften von Solaris NEO
#include
#include
#include
#include
52
<stdio.h>
<iostream.h>
<odf/odf.hh>
"HelloWorld.hh"
int
ODF::application_main(int argc, char **argv, char **envp)
{
ODF_ObjRef<HelloWorld> hello;
try {
ODF_find(hello, "HelloWorld");
} catch (ODF::Service::Exception &exc) {
fprintf(stderr, "Cannot find HelloWorld\n");
return 1;
}
cout << hello->get_hello();
cout << "The get_hello function has been called for " <<
hello->get_number_of_calls() << " times.\n";
return 0;
}
Das Client-Programm wird mit dem Befehl make erzeugt. Dafür wird das
folgende Imakefile benötigt. Den grafischen Ablauf zeigt Abb. 5.6.
/* This Imakefile builds the helloworld client. */
PARAM_ODF_DIR=/opt/SUNWdoe/include/odf
/* Use ODF rules, targets and environment variables for building
programs */
include $(PARAM_ODF_DIR)/Makefiles/Makefile.odf
/* Also search ../include and ../include/odf_output for header
files. */
INCLUDES += -I../../include -I../../include/odf_output
/* This program depends on the following IDL */
CLIENT_helloworld_LIBS = HelloWorld
/* The libraries for development mode IDL are found in ../include */
CLIENT_helloworld_LIBPATH = $(PWD)/../../include
CLIENT_helloworld_RUNPATH = $(PWD)/../../include
/* .o files used in this program */
CLIENT_helloworld_OBJECTS = \
Eigenschaften von Solaris NEO
53
Obj/HelloWorldClient.o
/* Suppress inclusion of this directory’s binaries -- only the ones in
* DynamicNotification get packaged. */
CLIENT_helloworld_PACKAGE_OVERRIDE=1
PARAM_PACKAGING_DIR =
$(PWD)/../../packages
/* Build the helloworld program */
BasicClientProgram(helloworld)
Client
Interface
HelloWorldClient.cc
Imakefile
odf
imake
Makefile
libHelloWorld.so
interne Dateien
odf_ouput/
HelloWorld.hh
make
HelloWorldClient
interne Dateien
und
Verzeichnisse
Abbildung 5.6: Erzeugen des Clients
5.5
Dynamic Notification
Das oben erläuterte Beispiel beschreibt einen klassischen Fall eines ClientServer-Modells auf der Basis von Solaris NEO. NEO bietet jedoch auch die
Möglichkeit, Objekte von vom Benutzer gestarteten Anwendungsprogrammen
so bereitzustellen, daß sie von anderen Objekten, so auch von Objekt-Servern,
referenziert werden können. Die Anwendungsprogramme werden dann als
User-Started-Server“ bezeichnet.
”
Die Objekte der User-Started-Server werden nach ihrer Initialisierung bei
einem Server-Objekt in einer Liste mit ihren Referenzen angemeldet, so daß
sie dynamisch zur Laufzeit verfügbar sind. Andere Objekte können durch
Abfragen der Liste die Referenzen auf diese Objekte ermitteln.
Eigenschaften von Solaris NEO
54
Dies soll anhand eines Beispiels aus der CORBA-Erweiterung für Confman
verdeutlicht werden. In Abb. 5.7 ist das NEO-Objekt ConfmanClientObject
abgebildet, das die Liste mit den Referenzen verwaltet. Das Anwendungsprogramm ConfmanNEO, das auf beliebigen Rechnern gestartet werden kann,
erzeugt jeweils ein Callback-Objekt und meldet es bei ConfmanClients an. Die
Auszüge aus den Quelltexten sind dabei auf die für dieses Beispiel wichtigen
Funktionen reduziert worden.
ConfmanNEO
auf Host java.rvs.uni-hannover.de
ConfmanClientCallBack
hostname=java
ConfmanClientObject
auf Host borneo.rvs.uni-hannover.de
ConfmanClients
num_confman_clients = 3
confman_client[1] =
confman_client[2] =
confman_client[3] =
confman_client[4] = 0
confman_client[5] = 0
.
.
.
ConfmanNEO
auf Host molokai.rvs.uni-hannover.de
ConfmanClientCallBack
ConfmanNEO
auf Host kauai.rvs.uni-hannover.de
hostname=molokai
ConfmanClientCallBack
hostname=kauai
Abbildung 5.7: Dynamic Notification: Methodenaufruf von Client-Objekten
über Objektreferenzen
Die folgende Schnittstellenbeschreibung definiert das NEO-Objekt ConfmanClient, das die Liste der Callback-Objekte ConfmanClientCallBack verwaltet. Über die Methoden add confman client und remove confman client
können Callback-Objekte in die Liste aufgenommen bzw. gelöscht werden. Die
Methoden get num confman clients und get confman client callback
dienen zum Auslesen der Objektreferenzen aus der Liste.
#ifndef _CONFMANCLIENT_IDL
#define _CONFMANCLIENT_IDL
#include "ConfmanClientCallBack.idl"
module ConfmanClients{
exception TooMuchInterest{};
exception UnknownId{};
Eigenschaften von Solaris NEO
55
exception AlreadyExists{};
interface ConfmanClient {
// set the reference to the own ConfmanClientCallBack
unsigned long add_confman_client(in ConfmanClientCallBack confman_client)
raises(TooMuchInterest);
// delete ConfmanClientCallBack reference
void remove_confman_client(in ConfmanClientCallBack confman_client)
raises(UnknownId);
// return the number of Confman clienst
unsigned short get_num_confman_clients();
// return the ConfmanClientCallBack reference
ConfmanClientCallBack get_confman_client_callback(in unsigned long id);
};
};
#endif // !defined _CONFMANCLIENT_IDL
Die Liste, in der die Callback-Referenzen gespeichert werden, ist als Sequence 4
realisiert. Das Attribut num confman clients enthält die Anzahl der aktuell eingetragenen Referenzen. Die Liste sowie die Anzahl werden persistent
gespeichert und im folgenden Data-Definition-Language-File definiert.
#ifndef _CONFMANCLIENT_DDL
#define _CONFMANCLIENT_DDL
#include <Cos/Naming.idl>
#include "ConfmanClientCallBack.idl"
module ConfmanClientDDL {
const short max_clients = 128;
typedef sequence<ConfmanClientCallBack, max_clients> ConfmanClientCallBacks;
interface ConfmanClientData {
// list of users confman client callbacks,
// one for every confman he has started,
// and the number of clients
attribute ConfmanClientCallBacks confman_clients;
4
Eine Sequence ist ein IDL-Typenwert, siehe 4.4.1.
Eigenschaften von Solaris NEO
56
attribute unsigned short num_confman_clients;
};
};
#endif // !defined _CONFMANCLIENT_DDL
Die Callback-Objekte werden vom User-Started-Server“ erzeugt und beim
”
Server-Objekt angemeldet. Das ConfmanClientCallBack-Objekt enthält zwei
Methoden, die den Rechnernamen des Client-Hosts und den Benutzernamen
zurückgeben. Die Methode remove dient zum Entfernen des Objektes.
#ifndef _CONFMANCLIENTCALLBACK_IDL
#define _CONFMANCLIENTCALLBACK_IDL
interface ConfmanClientCallBack {
// return the users hostname
string get_hostname();
// return the user name
string get_username();
// remove the callback
void remove();
};
#endif // !defined _CONFMANCLIENTCALLBACK_IDL
Um eine Liste aller Callback-Objekte zu erhalten, kann mit der Funktion
ODF find die Referenz des Server-Objektes ConfmanClients ermittelt werden. Anschließend wird über die Methode get num confman clients die Anzahl der eingetragenen Callback-Objekte angefordert. Diese lassen sich somit
über die Methode get confman client referenzieren. Mit Hilfe des folgenden Programm-Segmentes lassen sich der Benutzer- und Rechnername aller
angemeldeten ConfmanClient-Callback-Objekte ausgeben. 5
void
get_all_confmanclients()
{
ConfmanClients::ConfmanClientRef confmanclient_ref;
ConfmanClientCallBackRef callback_ref = ConfmanClientCallBack::_null();
::CORBA::UShort number_of_callbacks;
5
Eine vertiefende Einführung bietet das NEO Tutorial [SunS95i].
Eigenschaften von Solaris NEO
57
// locate the ConfmanClient object
try {
ODF_find(confmanclient_ref, "ConfmanClients",
ODF::Service::WORKGROUP);
} catch (ODF::Service::Exception) {
cerr << "Unable to find ConfmanClients.\n";
confmanclient_ref = ConfmanClients::ConfmanClient::_null();
return;
}
// try to get the number of callback objects
try {
number_of_callbacks = confmanclient_ref->get_num_confman_clients();
} catch (CORBA::Exception) {
cerr << "Unable to get the number of callback references.\n";
return;
}
for (int i = 0; i < number_of_callbacks; i++) {
try {
callback_ref = confmanclient_ref->get_confman_client(i);
cerr << "ConfmanClientCallBack " << i << " created by "
<< callback_ref->get_username() << " at host "
<< callback_ref->get_hostname() << ".\n";
} catch (CORBA::Exception) {
cerr << "Callback reference " << i << " is not accessible.\n";
}
}
}
5.6
Probleme mit grafischen Benutzeroberflächen
NEO-Applikationen sind multi-threaded-Programme, d. h. die Programme
laufen in mehreren konkurrierenden Ebenen parallel ab. Multi-threadedProgramme benötigen multi-threaded-sichere (MT-sichere) Bibliotheken.
Viele Bibliotheken bieten diese Funktionalität jedoch nicht. Zu den MTunsicheren Bibliotheken gehört auch Motif, so daß dessen Benutzung undefinierte Zustände während der Programmausführung hervorrufen kann.
Um Motif in einer MT-Umgebung einsetzen zu können, müssen folgende
Punkte beachtet werden:
• Synchronisation: Das Hauptproblem MT-unsicherer Bibliotheken ist,
Eigenschaften von Solaris NEO
58
daß sie keine Mechanismen zur Synchronisation 6 von Funktionsaufrufen
besitzen. Es muß daher sichergestellt werden, daß keine zwei Aufrufe aus
diesen Bibliotheken parallel stattfinden. Dies kann über Semaphoren7
realisiert werden, die vor dem Aufruf der Bibliotheksfunktion angefordert und nach dem Beenden wieder freigegeben werden.
• Event Loop: Ein weiteres Problem mit grafischen Benutzeroberflächen
ergibt sich dadurch, daß das Programm sich ständig innerhalb einer
Schleife befindet, die die Event Loop genannt wird. Auch sie ist eine Bibliotheksfunktion, somit wäre der Zugriff auf weitere Bibliotheksfunktionen während der gesamten Laufzeits des Programms blockiert. Daher
ist eine eigene Event Loop notwendig, die den Zugriff freigibt, während
sie auf Ereignisse wartet.
• Deadlocks: Motif-Funktionen werden in der Regel zum einen direkt
aufgerufen, zum anderen aus Callback-Funktionen heraus. In beiden
Fällen ist das Sichern des exklusiven Zugriffs erforderlich. Bei gegenseitigem Aufruf der Funktionen muß deshalb vermieden werden, daß
die Semaphore innerhalb eines Threads mehrfach angefordert wird.
Dies würde zur vollständigen Blockierung des Programms, zu einem
Deadlock8 führen.
Eine Lösung dieser Probleme wird über die Klasse Baton9 angeboten. Sie
bietet über die Methoden grab und ungrab das Sichern des exklusiven Zugriffs
unter Vermeidung von Deadlocks sowie eine eigene Event Loop an.
Innerhalb der Event Loop wird über die Systemfunktionpoll auf Ereignisse
aus der X11-Umgebung gewartet. Damit können allerdings keine TimeOutCallback-Funktionen aus der Xt-Bibliothek benutzt werden, so daß eine
Umwandlung der Funktionalität in eigene Threads erforderlich ist. In der
Confman-Erweiterung ist dies beispielsweise für die Animation im Hauptfenster sowie die Uhr im Conferencemanager notwendig.
5.7
Bemerkungen
Solaris NEO in der vorliegenden Version entspricht der CORBA-Spezifikation
1.2. Es bietet ein Entwicklungssystem für CORBA-basierte Anwendungen,
das Multithreading unterstützt und somit dynamische Rückmeldungen von
Server-Objekten beim Anwendungsprogramm ermöglicht.
6
Vergl.
Vergl.
8
Vergl.
9
Vergl.
7
[Pra94a].
[Par93].
[Pra94a] und [Par93].
[SunS96b]. Baton heißt übersetzt: Taktstock.
Eigenschaften von Solaris NEO
59
In der Version 1.0 werden keine grafischen Benutzeroberflächen unterstützt,
was die Entwicklung von Anwendungen für das X-Window-System kompliziert.
Auch bei der Installation von Solaris NEO gibt es kleinere Schwierigkeiten.
Somit bleiben Wünsche offen, die hoffentlich im nächsten Release erfüllt werden.
Kapitel 6
Java und CORBA
Dieses Kapitel bietet einen kleinen Exkurs in die Welt des World-Wide-Web,
da sich hier einige Neuerungen zeigen, die für CORBA von größerer Bedeutung sein können. Im März 1996 hat die Firma SunSoft, Inc. ein Produkt
angekündigt, das die Verbindung zwischen Solaris NEO und Java herstellen
soll.
Dieses Produkt hat den Namen Joe erhalten, es befindet sich noch in der
Entwicklung. Eine frei verfügbare Beta-Version ist für Juni dieses Jahres angekündigt.1
Dieses Kapitel beschäftigt sich kurz mit der Entwicklung des World-WideWeb, mit der Sprache Java und der Integration von Java im WWW. Anschließend wird Joe vorgestellt.
6.1
Die Entwicklung des World-Wide-Web
In den vergangenen zwei Jahren hat sich das World-Wide-Web (WWW) als
bekanntester Dienst im Internet etabliert. Es stellt ein Informationsmedium
zur Verfügung, das dem Benutzer ein sehr weit gefächertes Angebot an Informationen bietet. Gleichzeitig wird dem Benutzer freigestellt, wann und wie
lange er welche Informationen erhalten möchte.
Aus dem Informationsmedium hat sich mit der Zeit ein Dienstleistungsangebot entwickelt, das sowohl Kundendienstleistungen (z. B. Aktualisierung von
Treibersoftware) als auch Bestellmöglichkeiten über das Internet realisiert.
1
Vergl. [SunS96d].
60
Java und CORBA
61
Durch die Verfügbarkeit grafischer Benutzeroberflächen, die das Heranholen
von Informationen mit einem einfachen Mausklick“ ermöglichen, ist die Be”
liebtheit dieses Dienstes explosionsartig gestiegen.
Die verfügbaren Informationen werden in Seiten gespeichert, die in der HyperText Markup Language (HTML)2 geschrieben sind. Diese werden über das
HyperText Transfer Protokoll (HTTP) 3 über das Netzwerk übertragen und
mit einem speziellen Programm am Arbeitsplatz des Benutzers aufbereitet.
Das derzeit am weitesten verbreitete Programm zum Aufbereiten von HTMLSeiten ist Netscape.4
6.1.1
Dynamisch generierte WWW-Seiten
Die ersten Versionen der Sprache HTML sahen nur vor, statische Seiten bereitzustellen. Eine Seite konnte nicht interaktiv vom Benutzer erzeugt oder
verändert werden. Mit der Einführung von HTML-Forms und CGI-Skripten 5
gab es die ersten Möglichkeiten, interaktive Elemente in WWW-Seiten zu
integrieren. Somit ist es möglich, Formulare zu erstellen, die Eingaben des
Benutzers erwarten, oder aus Datenbankabfragen neue Seiten zu generieren.
Für jede neue Seite ist hierbei ein HTTP-Request erforderlich, d. h. jede Seite
wird über das Netzwerk übertragen.
Mit der Entwicklung von Java und der Integration in das WWW ist es möglich
geworden, eigenständige Programme innerhalb des Benutzerprogramms ablaufen zu lassen, die unabhängig von dem Betriebssystem und der Architektur des Benutzer-Rechners sind. Die mit Java erstellten Programme (auch
Applets genannt) werden ebenfalls vom HTTP-Server übertragen. Sie reservieren sich einen bestimmten Bereich innerhalb des Fensters des Benutzerprogramms, den sie verändern können, ohne Daten über das Netzwerk zu
übertragen. Ein bekanntes Beispiel ist der winkende Duke, das Maskottchen
von Java.6
6.2
Java
Hinter dem Begriff Java verbirgt sich eine Programmiersprache, die für verschiedene Probleme moderner Programmierpraktiken entworfen wurde. Sie
2
Vergl. [BeL95b] und [RRZN95].
Vergl. [BeL95a].
4
Vergl. [Net96].
5
CGI ist die Abkürzung für Common Gateway Interface. Vergl. [Lem95].
6
Siehe Java-Homepage http://java.sun.com.
3
Java und CORBA
62
ist als Teil eines größeren Projektes entstanden, das ursprünglich in dem Bereich Consumer Elektronics“ angesiedelt war. Es verfolgte das Ziel, kleine,
”
zuverlässige, portable, verteilte Echtzeit-Systeme zu entwickeln. 7
Java ist entworfen worden, um Anwendungen über Netzwerke zu verteilen.
Um zu ermöglichen, daß Java-Applikationen auf allen Rechnern innerhalb eines Netzwerkes gestartet werden können, wird der Java-Quellcode von einem
Compiler in ein Hardware-unabhängiges Binärformat übersetzt, das als Architecture Neutral Distribution Format (ANDF) bezeichnet wird. Damit ist
die Voraussetzung für die Portierbarkeit der Applets geschaffen.
Für die Ausführung von Java-Programmen wird ein Interpreter benötigt,
der den Bytecode direkt ausführen kann. Es ist auch möglich, diesen beim
Start des Programms in die Maschinensprache des ausführenden Prozessors
zu übersetzen, um eine Steigerung der Performance zu erzielen (Abb. 6.1).
Entwicklung
Laufzeit
Interpreter
Quelltext
Compiler
Bytecodes
Prüfer
Weg durchs Netzwerk
oder Dateisystem
Lader
Code Generator
Abbildung 6.1: Der Weg eines Java-Applets
6.2.1
Integration von Java ins WWW
Java-Programme können – da sie maschinenunabhängig sind – über Netzwerke verteilt werden, zum Beispiel über das FTP- oder HTTP-Protokoll. Für die
Darstellung grafischer Ausgaben ist ein eigenständiges Programm notwendig,
ein sogenannter Appletviewer.
HotJava ist ein WWW-Client, der in Java geschrieben worden ist. Mit ihm ist
es möglich, Java-Applets direkt von einem HTTP-Server zu laden und sofort
darzustellen. Dies geschieht über das HTML-Tag app, über das das Applet
direkt in WWW-Seiten integriert werden kann. 8
Seit der Version 2.0 wird auch von Netscape die Ausführung von JavaApplets unterstützt, so daß sie damit auf allen gängigen Hardwareplattformen
ausführbar sind.
7
8
Vergl. [Sun95a].
Vergl. [Sun95c].
Java und CORBA
6.2.2
63
Java-Interpreter
Neben der Darstellung von Java-Applets in WWW-Clients besteht die
Möglichkeit, diese mit dem eigenständigen Interpreter java ablaufen zu lassen. Der Interpreter ist Teil des Java-Development-Kits, das z. Z. für verschiedene Plattformen angeboten wird. 9
Java-Programme, die im Interpreter laufen sollen, sind in ihrer Programmierung aber nicht identisch mit denen, die innerhalb eines WWW-Clients laufen
sollen. Sie werden daher hier nicht weiter betrachtet.
6.2.3
Java – Die Sprache
Java ist eine objektorientierte Sprache, die in vielen Punkten der Sprache
C++ ähnlich ist. Ihre Objekte werden durch Klassen definiert, die durch das
Schlüsselwort class deklariert werden. Vererbungen sind mit dem Schlüsselwort extends möglich, allerdings unterstützt Java keine Mehrfachvererbung.
Das folgende Beispiel beschreibt die Definition der Klasse HelloWorld, die
von Applet abgeleitet ist. In ihr sind die Methoden init und paint definiert.
Wird eine Klasse ohne Basisklasse definiert, erbt sie automatisch von der
Superklasse Object.
/**
* A Hello World Example applet for Java
*/
import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class hello extends java.applet.Applet
{
Font f = new Font("TimesRoman, Font.BOLD, 36);
public void init()
{
resize(150, 25);
}
public void paint(Graphics g)
{
g.setFont(f);
9
So z. B. Solaris, Windows 95/NT und Linux.
Java und CORBA
64
g.setColor(Color.blue);
g.drawString("Hello World!", 50, 25);
}
}
Java unterstützt – wie in C++ – Konstruktoren, es kennt auch die Zugriffskontrollen mit Hilfe der Wörter public, private und protected. Anders als C++
verfügt es über eine Garbage Collection, die nicht mehr referenzierte Objekte
löscht.
Aus der Sprache Objective C sind Interfaces übernommen. Die in einem Interface definierten Methoden werden in der Klasse implementiert, die sie benutzt. Bei Interfaces ist Mehrfachvererbung möglich, folgender Quelltext zeigt
ein Beispiel.10
/**
* A Interface Example for Java
*/
public interface a
{
void method_from_a();
}
public interface b
{
void method_from_b();
}
public class c implements a, b
{
void method_from_a()
{
...
}
void method_from_b()
{
...
}
}
10
Genauere Informationen zur Sprache können [Sun95b] entnommen werden.
Java und CORBA
6.3
65
Joe – Verbindung zwischen Java und CORBA
Joe ist ein in Java geschriebenes Produkt, das die Verbindung zwischen
CORBA-basierten Anwendungen und dem World-Wide-Web herstellen soll.
Es stellt eine einfache Erweiterung der Programmiersprache Java dar und ist
somit für alle Plattformen verfügbar, die Java unterstützen.
Joe enthält einen Object Request Broker, der der Common Object Request
Broker Architecture der Object Management Group entspricht. Damit wird
die Kommunikation mit Solaris NEO ermöglicht, die als vorrangige Basis für
die Entwicklung komplexerer Anwendungen angesehen wird. 11 Der Joe-ORB
wird automatisch mit dem Applet vom WWW-Server geladen. Er stellt die
Verbindung zwischen dem lokalen Java-Objekt und dem entfernten CORBAObjekt her.
Dadurch können bereits bestehende Anwendungen und Objekte ins WWW
integriert werden, ohne neu geschrieben oder kompiliert werden zu müssen.
Java-Applett
WWW-Server
Datennetz
Netscape
Netscape
Some
Text
and blabla
CORBA-Objekte
Clients
CORBA-Objekte
Abbildung 6.2: Kommunikation zwischen Java-Applet und NEO-Objekten
Gleichzeitig findet eine Entlastung des WWW-Servers statt. Eine Anwendung, die einmal vom Server geladen worden ist, kommuniziert mit CORBAObjekten, die auf verschiedenen anderen Rechnern installiert sein können
11
Vergl. [SunS96e].
Java und CORBA
66
(Siehe Abb. 6.2). Dadurch wird die Aufgabe des WWW-Servers auf das Verteilen der Seiten beschränkt. Alle anderen Aufgaben, wie z. B. die Verbindung
zu einer Datenbank, werden von CORBA-Objekten auf anderen Rechnern
übernommen.12
Mit Joe wird die Interaktivität mit dem Benutzer gesteigert. Die Anwendungen greifen dynamisch auf Netzwerkdienste zu, so daß – anders als bei
HTML-Forms und CGI-Skripten – nicht bei jeder Benutzeraktion eine neue
WWW-Seite aufgebaut und über das Netzwerk übertragen werden muß.
Auf der Seite des Benutzers ist keine Administration notwendig, da das Programm vor der Ausführung vom Server neu geladen wird. CORBA-Objekte
können problemlos zur Laufzeit installiert und verwaltet werden.
Zwischen verschieden Java-Objekten bietet Joe die Möglichkeit, über das
CORBA-ESIOP-Protokoll zu kommunizieren. Für den Datenaustausch mit
ORBs anderer Hersteller wird das CORBA 2.0 IIOP unterstützt.13
Für die Entwicklung von CORBA-Objekten enthält Joe einen IDL-Compiler,
der Java-Quelltexte erzeugt. Die damit erstellte Java-Klasse enthält die StubFunktionen, die für die Kommunikation mit dem ORB benötigt wird und
damit den Zugriff auf entfernte Objekte ermöglicht, als wären sie lokale Java-Objekte. Der Java-Stub regelt den Aufruf des entfernten Objektes
einschließlich Datenkonvertierung, Netzwerkkommunikation und Aktivierung
des Serverobjektes. Aus den Stub-Funktionen und den Java-Quelltexten werden zusammen mit den Joe-Klassenbibliotheken Java-Applets mit Zugriff auf
CORBA-Objekte erzeugt (Abb. 6.3).
IDL to Java
IDL
Java
javac
Joe
Class
Library
Java-Applet
mit Joe
Java
Abbildung 6.3: Entwicklung eines CORBA-Objektes mit Joe
Der folgende Quelltext-Auszug verdeutlicht, wie mit einfachen Mitteln auf
bestehende NEO-Objekte zugegriffen werden kann. Das oben beschriebene
Beispiel zur Programmiersprache Java ist um 6 Programmzeilen erweitert
worden. Es werden die Services importiert, die für die CORBA-Erweiterung
benötigt werden. Desweiteren werden Variablen bereitgestellt, in denen das
12
13
Vergl. [SunS96e].
Siehe 4.9.
Java und CORBA
67
mit find lokalisierte NEO-Objekt aus dem vorherigen Kapitel referenziert
wird.
Die Klasse hello ist nicht mehr von java.applet.Applet abgeleitet, stattdessen
von sunw.services.JOEApplet. Das Ausgeben der Zeichenkette geschieht über
den Aufruf der Funktion get hello() des NEO-Objektes.
/**
* A Hello World Example applet for Joe
*/
import
import
import
import
sunw.services.*;
java.awt.Graphics;
java.awt.Font;
java.awt.Color;
public class hello extends sunw.services.JOEApplet
{
sunw.corba.ObjectRef obj;
Hello.HelloWorldRef hello_obj;
Font f = new Font("TimesRoman, Font.BOLD, 36);
public void init()
{
super.init();
resize(150, 25);
obj = find ("HelloWorldObject");
hello_obj = Hello.HelloWorldStub.narrow(obj);
}
public void paint(Graphics g)
{
g.setFont(f);
g.setColor(Color.blue);
g.drawString(hello_obj.get_hello(), 50, 25);
}
}
6.4
Bewertung
Joe ist noch in der Entwicklung. Zum Zeitpunkt dieser Arbeit ist noch keine
Version verfügbar gewesen, mit der die genannten Fähigkeiten getestet werden
konnten. Alle hier genannten Informationen sind Ankündigungen von SunSoft
entnommen.
Java und CORBA
68
Die Erfahrungen, die bisher mit Java gemacht worden sind, lassen jedoch darauf schließen, daß mit Joe ein sehr leistungsfähiges Werkzeug zur Integration
von CORBA-Objekten in das WWW vorliegen wird.
Es bleibt allerdings schwierig zu beurteilen, wie sicher die Anwendungen sind,
die mit Joe über das Netzwerk auf den lokalen Rechner geladen werden.
Gerade im Zuge der jüngsten Diskussionen über die Sicherheit von JavaApplets ist hier sicherlich Vorsicht geboten. 14
Weiter bleibt zu prüfen, ob Joe für den Einsatz in einem weltweiten Netz
geeignet ist, da eine Verbindung zu den CORBA-Objekten aufrecht gehalten
werden muß. Es scheint aber ein sehr geeignetes Mittel für den Einsatz in
lokalen Netzen zu ein.
14
Die aktuellen Sicherheitsprobleme sind in [Jav96] aufgelistet.
Kapitel 7
Entwurf einer CORBA-Erweiterung für
Confman
7.1
Entwurfsziele und Rahmenbedingungen
Ziel der Erweiterung des Konferenz-Management-System Confman ist es, eine
Realisierung für die in Kapitel 2 entwickelten Ansätze zu schaffen. Dabei ist
von besonderer Bedeutung, auf die Benutzung von Host-Listen zu verzichten.
Ebenso soll der Entwurf das selbständige Auffinden von Teilnehmern und
Konferenz-Servern in einem Netzwerk unterstützen.
Die vorangegangen Kapitel haben gezeigt, daß die Common Object Request
Broker Architecture als geeignetes Rahmenwerk für die Erweiterung angesehen wird. Dieser Entwurf stützt sich auf die CORBA-Implementierung Solaris
NEO von SunSoft, da diese als Entwicklungsumgebung zur Verfügung gestanden hat.
Die Einbindung eines Terminkalenders auf der Basis von Solaris NEO ist in
diesem Entwurf nicht mehr berücksichtigt worden, da kein derartiges Produkt
vorgelegen hat, und eine eigenständige Entwicklung im Rahmen dieser Arbeit
nicht zu leisten ist.
Die grafische Benutzeroberfläche von Confman ist dabei bewußt beibehalten
worden, in dieser Arbeit wird lediglich die Netzwerkerweiterung entworfen
und in die bestehende Benutzeroberfläche integriert.
69
Entwurf einer CORBA-Erweiterung für Confman
7.2
70
Umgebungsmodell
Daten
ConfmanBenutzerschnittstelle
Ereignisse
ConfmanCORBAErweiterung
steuert
KonferenzServer
startet, beendet
steuert
definiert
meldet
Ereignisse
multimediale Daten
steuert
KonferenzTeilnehmer
Audio-, Videound sonst. Daten
KonferenzWerkzeuge
Abbildung 7.1: Kontextdiagramm der Netzwerkerweiterung
Das Kontextdiagramm in Abb. 7.1 beschreibt das Umgebungsmodell der
Netzwerkerweiterung für Confman. Wie in der Abbildung zu erkennen ist,
wirken externe Ereignisse nur über die Benutzerschnittstelle auf das System
ein.
Aufgabe der Erweiterung ist, Ereignisse an andere Instanzen des Anwendungsprogramms weiterzugeben, Daten zwischenzuspeichern und die
Konferenz-Server zu steuern. Darüberhinaus werden in der Erweiterung die
Konferenzwerkzeuge definiert, die für die Durchführung einer Konferenz zur
Verfügung stehen.
7.3
Ereignistabelle
In der oben betrachteten Netzwerkerweiterung sind die folgenden Ereignisse
definiert:
1. Erstellen einer Liste aller anwesenden Konferenzteilnehmer
2. Erzeugen eines neuen Konferenz-Eintrages
3. Erzeugen eines neuen Konferenzteilnehmer-Eintrages
4. Erzeugen eines neuen Konferenzwerkzeug-Eintrages
5. Entfernen eines Konferenz-Eintrages
6. Entfernen eines Konferenzteilnehmer-Eintrages
7. Entfernen eines Konferenzwerkzeug-Eintrages
Entwurf einer CORBA-Erweiterung für Confman
71
8. Ändern von Daten an einem Konferenz-Eintrag
9. Ändern von Daten an einem Konferenzteilnehmer-Eintrag
10. Ändern von Daten an einem Konferenzwerkzeug-Eintrag
11. Erstellen einer Liste aller Konferenz-Einträge
12. Erstellen einer Liste aller Konferenzteilnehmer-Einträge
13. Erstellen einer Liste aller Konferenzwerkzeug-Einträge
14. Starten einer Konferenz
15. Beenden einer Konferenz
16. Automatisches Starten einer zeitgesteuerten Konferenz
17. Beitreten eines Teilnehmers zu einer Konferenz
18. Verlassen eines Teilnehmers einer Konferenz
Das Ereignis 16 ist als einziges zeitgesteuert, die übrigen Ereignisse sind flußorientiert.
Die Daten der Konferenzen, Konferenzteilnehmer und -werkzeuge werden innerhalb der Erweiterung gespeichert. Sie werden im Datenmodell detailliert
beschrieben. Im weiteren Entwurf ist dabei berücksichtigt worden, daß die
Benutzerschnittstelle über jede Änderung an den Daten benachrichtigt wird.
7.4
Datenmodell
In den Abbildungen 7.2 und 7.3 werden die Datenstrukturen für Konferenzen,
Teilnehmer und Konferenzwerkzeuge dargestellt. Ein Konferenzteilnehmer
wird charakterisiert durch seine Mail-Adresse, die ihn eindeutig bestimmt.
Die einzelnen Attribute werden im Datenverzeichnis näher erläutert.
nimmt
teil an
Konferenzteiln.
Mail-Adresse
Vorname
Name
Organisation
Position
Login-Name
Konferenz
Identifikator
Status
Titel
Dauer
Startzeit
Abbildung 7.2: ER-Diagramm Konferenzteilnehmer/Konferenz
Entwurf einer CORBA-Erweiterung für Confman
72
Konferenzen werden durch einen eigens erzeugten Identifikator eindeutig voneinander unterschieden. In einer Konferenz können verschiedene Werkzeuge
benutzt werden, die anhand ihres Namens identifiziert werden.
benutzt
Konferenz
Identifikator
Status
Titel
Dauer
Konf.-Werkzg.
Name
Ports
Skript
Signal
Startzeit
Abbildung 7.3: ER-Diagramm Konferenz/Konferenzwerkzeug
7.5
Datenverzeichnis
In den folgenden Datenverzeichnissen sind die Daten der Konferenzen, Teilnehmer und Konferenzwerkzeuge aufgenommen. Dabei handelt es sich im
wesentlichen um die Attribute, die zur Beschreibung einer Konferenz, eines
Konferenzteilnehmers oder eines Konferenzwerkzeuges benötigt werden.
Zusätzlich sind jewils die Listen definiert, bei der sich die Callback-Objekte
der User-Started-Server eintragen können.1 Zu diesen Listen werden Variablen geführt, die die Anzahl der Einträge in Liste festhalten.
Die Listen sind als Sequence2 realisiert worden, da für das Sichern über den
Persistenzdienst die Größe des Speicherplatzes benötigt wird.
7.5.1
Konferenzdaten
Das Datenverzeichnis der Konferenzdaten zeigt Tabelle 7.1. Die Attribute charakterisieren die Instanzen, die von dem Typ Conference erzeugt
werden. Dazu gehören neben einem eindeutigen Identifikator id der Titel der Konferenz title, die Startzeit starttime, Dauer duration und
der Status state (running, stopped, waiting, inactiv, autostart). 3 Die Liste der Teilnehmer sowie die Liste der Werkzeuge werden als Sequence
memberlist und toollist gespeichert, die Anzahl der jeweiligen Einträge ist den Variablen num confmembers und num conftools zu entnehmen. Über conference clients werden die Referenzen auf die Objekte
1
Siehe 7.6.2.
Siehe Abschnitt 4.4.1.
3
Vergl. [Fri96]. Dort ist auch Zustandsübergangsdiagramm abgebildet.
2
Entwurf einer CORBA-Erweiterung für Confman
Begriff
ConferenceData
id
title
starttime
duration
state
memberlist
num confmembers
toollist
num conftools
conference clients
num conference clients
Definition
*Entität ConferenceData*
@id+title+starttime+duration
+state+memberlist+toollist
+conference clients+
+num conference clients
*Konferenz-Id, eindeutig*
*Typ: unsigned long*
*Titel der Konferenz*
*Typ: String*
*Startzeit*
*Typ: unsigned long*
*Dauer der Konferenz*
*Typ: unsigned long*
*Status dieser Konferenz*
*Typ: unsinged short*
*Liste der Teilnehmer*
*Typ: Sequence of Strings*
*Anzahl der Teilnehmer*
*Typ: unsigned short*
*Liste der Konferenz-Tools*
*Typ: Sequence of Strings*
*Anzahl der Tolls*
*Typ: unsigned short*
*Liste der
ConferenceClientCallBacks*
*Typ: Sequence of
ConferenceClientCallBacks*
*Anzahl der Referenzen*
*Typ: unsigned short*
73
benutzt von
Conference
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
ConferenceData
Tabelle 7.1: Datenverzeichnis der Konferenzdaten
Entwurf einer CORBA-Erweiterung für Confman
74
ConferenceClientCallBack verwaltet. Die Variable num conference clients
enthält die Anzahl der Referenzen in conference clients.
7.5.2
Konferenzteilnehmerdaten
Von den Konferenzteilnehmern werden die Mailadresse mailaddress und
der Name seiner Benutzerkennung loginname als Daten für den Betrieb
von Confman benötigt. Optional können Vor- und Nachname (firstname
und lastname) sowie der Name der Organisation organisation und
die Stellung innerhalb der Organisation position angegeben werden.
conference clients enthält die Liste für die Verwaltung der CallbackObjekte sowie num conference clients deren Anzahl, Tabelle 7.2 zeigt das
Datenverzeichnis des Objektes.
Begriff
ConfMemberData
mailaddress
lastname
firstname
loginname
organisation
position
confmemb clients
num confmemb clients
Definition
*Entitität ConfMemberData
@mailaddress+name+firstname
+loginname+organistion
+position+confmemb clients
+num confmemb clients
*Mailadresse des Konferenz-*
teilnehmers
*Typ: String*
*Nachname*
*Typ: String*
*Vorname*
*Typ: String*
*UNIX-Kennung*
*Typ: String*
*Name der Organisation*
*Typ: String*
*Stellung in der Organisation*
*Typ: String*
*Liste von Referenzen auf
ConfMemberClientCallbacks*
*Typ: Sequence of
ConfMemberClientCallBacks*
*Anzahl der Referenzen*
*Typ: unsigned short*
benutzt von
ConfMember
ConfMemberData
ConfMemberData
ConfMemberData
ConfMemberData
ConfMemberData
ConfMemberData
ConfMemberData
ConfMemberData
Tabelle 7.2: Datenverzeichnis der Konferenzteilnehmerdaten
Entwurf einer CORBA-Erweiterung für Confman
7.5.3
75
Konferenzwerkzeugdaten
Begriff
ConfToolData
toolname
num ports
kill signal
run script
conftool clients
num conftool clients
Definition
*Entität ConfToolData* ConfTool
@toolname+num ports+kill signal
+run script+conftool clients
+num conftool clients
*Name des Konferenz-Tools*
*Typ: String*
*Anzahl benötigter Ports*
*Typ: unsigned short*
*Signal zum Beendigen*
*Typ: String*
*Name des Start-Skriptes*
*Typ: String*
*Liste der
ConfToolClientCallBacks*
*Typ: Array of
ConfToolClientCallBacks*
*Anzahl der Clients*
*Typ: unsigned short*
benutzt von
ConfToolData
ConfToolData
ConfToolData
ConfToolData
ConfToolData
ConfToolData
Tabelle 7.3: Datenverzeichnis der Konferenztooldaten
Das Datenverzeichnis der Konferenzwerkzeuge ist in Tabelle 7.3 dargestellt. Neben dem Namen des Werkzeugs toolname werden die Anzahl
der benötigten Ports num ports, das Signal zum Beenden des Tools
kill signal und ein Script zum Ausführen run script gespeichert. Auch
hier wird eine Liste für Callback-Objekte verwaltet (conftool clients und
num conftool clients).
7.6
Partitionierung der Ereignisse
In der Ereignispartitionierung werden die oben genannten Ereignisse erneut
aufgegriffen und die zu realisierenden Funktionen CORBA-Objekten zugeordnet. Diese werden in den weiteren Schritten näher spezifiziert. Ziel der
Spezifikation ist das Festlegen der Schnittstellen der Objekte. Für die grafische Darstellung der Objekte werden die Diagramme der Object Modeling
Technique4 benutzt.
Dieser Entwurf stützt sich auf den CORBA Naming Service, der das
selbständige Auffinden von Objekten unterstützt, und dem CORBA Persistence Service, der das automatische Sichern von Daten auf externen Spei4
Vergl. [Rum94].
Entwurf einer CORBA-Erweiterung für Confman
76
chermedien realisiert.5
7.6.1
Auffinden von Teilnehmern
Für das Auffinden von Teilnehmern wird auf das Konzept der Dynamic
Notification6 zurückgegriffen. Das vom Benutzer gestartete Anwendungsprogramm wird damit zum User-Started Server“, es stellt ein Callback-Objekt
”
bereit, das für andere Objekte, und somit auch für andere Anwendungsprogramme, ansprechbar ist. Damit kann beispielsweise der Name des Benutzers,
der das Programm gestartet hat, und der Name des Rechners, auf dem es gestartet wurde, ermittelt werden.
ConfmanClient
confman_clients
num_confman_clients
add_confmanclient()
remove_confmanclient()
ConfmanClientCallBack
get_hostname()
get_mailaddress()
new_conference()
remove_conference()
new_confmember()
remove_confmember()
new_conftool()
remove_conftool()
start_conference()
Abbildung 7.4: Objektmodell ConfmanClient
Für die Verwaltung der Referenzen dieser Objekte existiert das NEO-Objekt
ConfmanClient (Siehe Abb. 7.4), das über den Naming Service lokalisiert
wird. Die Callback-Objekte werden nach ihrer Erzeugung bei ConfmanClient angemeldet, der die Referenz in einer Liste speichert. Gleichzeitig wird
ein Zähler geführt, der der Anzahl der Referenzen in dieser Liste entspricht.
Die in ConfmanClient festgehaltenen Referenzen stehen allen Anwendungsprogrammen zur Verfügung, somit kann auf alle Callback-Objekte, und damit
indirekt auf die Anwendungsprogramme, zugegriffen werden.
7.6.2
Verwaltung der Daten
Die Daten der Konferenzen, Konferenzteilnehmer und Konferenzwerkzeuge
werden ebenfalls in NEO-Objekten festgehalten, die als Instanzen der ObjektTypen Conference, ConferenceMember und ConferenceTool erzeugt
werden (Siehe Abb. 7.5).
5
6
Siehe 4.7.
Siehe Abschnitt 5.5.
Entwurf einer CORBA-Erweiterung für Confman
ConferenceFactory
Conference
erzeugt
create_conference()
ConfMemberFactory
set_...()
get_...()
start_now()
stop()
add_conf_client()
rem_conf_client()
join()
leave()
ConferenceClientCallBack
hält Referenzen auf
ConfMember
erzeugt
create_confmember()
ConfToolFactory
set_...()
get_...()
add_confmember_client()
rem_confmember_client()
set_...()
get_...()
add_conftool_client()
rem_conftool_client()
new_...()
stop()
join()
leave()
ConfMemberClientCallBack
hält Referenzen auf
new_...()
ConfTool
erzeugt
create_conftool()
77
ConfToolClientCallBack
hält Referenzen auf
new_...()
Abbildung 7.5: Datenobjekte
Die Instanzen werden unter eindeutigen Namen im Namensraum der NEOWorkgroup in verschiedenen Naming Contexts abgelegt, damit sie später gesucht und zugeordnet werden können. Dafür wird ein Application Context7
Confman im Kontext services angelegt. Unterhalb dieses Kontextes werden die Application Subcontexts ConferenceMembers, ConferenceTools und
Conferences angelegt. Die Instanzen der Objekte werden in den Subkontexten angelegt, dadurch ist die Zuordnung der Namen zu den Objekt-Typen
vorgegeben. Abb. 7.6 zeigt die Kontexte und die Einbindung der ObjektInstanzen in einem typischen Namensraum.
Kontexte können jederzeit nach Objekten durchsucht werden, so daß auch neu
erzeugte Instanzen schnell gefunden werden können. Anwendungsprogramme
können zu den Objekt-Instanzen Callback-Objekte erzeugen, über die eine
mögliche Änderung an den Daten des betreffenden Objektes mitgeteilt werden.
Die Sicherung der Daten der Objekt-Instanzen erfolgt über den CORBAPersistenzdienst.
7
Ein Application Context ist ein Naming Context, der auf anwendungsbezogene Objekte
enthält. Siehe 5.2.
Entwurf einer CORBA-Erweiterung für Confman
78
/ (root)
machine
services
workgroup
admin
services
servers
ConferenceMembers
Instanzenname
Objektreferenz
[email protected]
[email protected]
[email protected]
[email protected]
<reference1>
<reference2>
<reference3>
<reference4>
Confman
Conferences
Instanzenname
vat
vic
wb
...
ConferenceTools
Objektreferenz
<reference1>
<reference2>
<reference3>
...
machines
computer1
computer2
ConferenceServer
Instanzenname
sumatra.rvs.uni-hannover.de
borneo.rvs.uni-hannover.de
oahu.rvs.uni-hannover.de
...
Objektreferenz
<reference1>
<reference2>
<reference3>
...
Abbildung 7.6: Objekt-Instanzen im NEO-Namensraum
7.6.3
Erzeugen und Entfernen von Datenobjekten
Die Instanzen der Objekt-Typen Conference, ConferenceMember und
ConferenceTool werden von Factory-Objekten erzeugt, die unter den Namen ConferenceMemberFactory, ConferenceToolFactory und ConferenceFactory registriert werden (Abb. 7.5). Diese werden im ServiceKontext der NEO-Arbeitsgruppe abgelegt.
Die Factory-Objekte verfügen über eine create-Methode, die ein neues Objekt erzeugt, anschließend alle Instanzen des Objektes ConfmanClientCallBack über das neue Objekt informiert. Daher verfügen die CallBack-Objekte
über die Methoden new conference, new confmember und new conftool.
Das Entfernen von Objekten wird von den Anwendungsprogrammen vorgenommen. Auch hier müssen alle Instanzen des Objektes ConfmanClientCallBack darüber informiert werden. Dies geschieht mit den removeMethoden.
7.6.4
Starten und Beenden einer Konferenz
Das Starten und Beenden einer Konferenz wird vom Konferenz-Objekt selbst
kontrolliert. Es kann über die Methoden start now und stop von anderen
Objekten eingeleitet werden.
Entwurf einer CORBA-Erweiterung für Confman
79
hält Referenzen auf
(ConfmanClient)
(ConfmanClientCallBack)
hostname=borneo.rvs...
mailadress=grimm@..
(ConfmanClientCallBack)
hostname=kauai.rvs...
mailadress=gruen@..
erfragt Referenzen
der ConfmanClientCallBack-Objekte
(ConfmanClientCallBack)
hostname=sumatra.rvs...
mailadress=berg@..
(Conference)
id=832934104
member=boeker@...,
gruen@...
(ConfmanClientCallBack)
hostname=java.rvs...
mailadress=boeker@..
Abbildung 7.7: Instanzendiagramm zum Konferenz-Start
Beim Konferenz-Start nimmt Conference Verbindung zu ConfmanClient
auf, um die Liste der Referenzen der ConfmanClientCallBack-Objekte zu
erhalten (Siehe Instanzendiagramm in Abb. 7.7). Diese enthalten eine Methode start conference, die bei allen Teilnehmern der Konferenz aufgerufen
wird. Die Instanzen des Benutzer-Programms ConfmanNEO erzeugen ein
neues Objekt ConferenceClientCallBack, das Änderungen an den Daten
der Konferenz an die Benutzer weitergibt (Abb. 7.8).
(ConfmanNEO)
beobachtet Conference
(ConferenceClientCallBack)
mymailaddress=
boeker@...
(ConfmanClientCallBack)
ruft start_conference auf
hostname=kauai.rvs...
mailadress=gruen@..
(ConfmanClientCallBack)
ruft start_conference auf
hostname=java.rvs...
mailadress=boeker@..
(Conference)
id=832934104
member=boeker@...,
gruen@...
beobachtet
Conference
(ConferenceClientCallBack)
mymailaddress=
boeker@...
(ConfmanNEO)
Abbildung 7.8: Einladen der Konferenzteilnehmer
Wird eine Konferenz mit stop beendet, so werden die Teilnehmer über eine
Methode stop des ConferenceClientCallBack-Objekts informiert.
Entwurf einer CORBA-Erweiterung für Confman
7.6.5
80
Starten einer zeitgesteuerten Konferenz
Der Objekt-Typ Conference verfügt über eine Methode invoke, mit deren
Hilfe ein Zeitgeber für den Start einer zeitgesteuerten Konferenz gestartet
wird. Die Startzeit wird aus den Konferenz-Daten ermittelt. Nach Ablauf des
Zeitgebers wird die Konferenz über die Methode start now gestartet.
7.6.6
Beitreten und Verlassen einer Konferenz
Das Beitreten und Verlassen eines Teilnehmers in einer Konferenz wird über
die Methoden join und leave registriert. Diese rufen wiederum gleichnamige Methoden in den Callback-Objekten der Teilnehmer auf, die bereits an
der Konferenz teilnehmen. Zusätzlich sind die Methoden refuse und pause
definiert, wenn ein Teilnehmer die Einladung ablehnt oder eine laufende Konferenz unterbricht.
7.7
Objektmodell nach der Object Modeling Technique
In diesem Abschnit werden die oben genannten Objekte zusammengefaßt und
erweitert, dabei werden die Beziehungen untereinander dargestellt. Gleichzeitig wird die Verbindung zur Benutzerschnittstelle des Anwendungsprogrammes hergestellt, dabei werden Objekte herangezogen, die in der Benutzerschnittstelle definiert worden sind. 8 Diese Objekte sind durch einen Stern (*)
gekennzeichnet.
Das Objektmodell der Datenobjekte wird dabei exemplarisch am ConferenceMemberObject vorgestellt, das ConferenceToolObject und das ConferenceObject sind entsprechend aufgebaut.
Datenobjekte
Das Modul ConfMembers umfaßt die Objekte ConfMember und ConfMemberFactory (Siehe Abb. 7.9). Das Factory-Objekt enthält nur eine Methode, die das Anlegen neuer Instanzen des ConfMember-Objektes
ermöglicht. ConfMember ist von CosLifCycle::LifeCycleObject abgeleitet, somit erbt es Methoden zum Löschen, Kopieren und Bewegen. Es enthält
die Methoden zum Setzen und Lesen der Daten nach Tabelle 7.2 sowie die Me8
Vergl. [Fri96].
Entwurf einer CORBA-Erweiterung für Confman
81
CosLifeCycle::
LifeCycleObject
copy()
move()
remove()
Vererbung der Methoden
zur Steuerung der
Lebenszyklen
ConfMemberDDL
ConfMembers
ConfMemberData
mailaddress
lastname
firstname
loginname
organisation
position
confmemb_clients
num_confmemb_clients
ConfMemberData ist
ein Objekt des Moduls
ConfMemberDDL
ConfMember
set_name()
set_firstname()
set_loginname()
set_organisation()
set_position()
dto. get_...()
add_confmemb_client()
remove_confmemb_client()
Aggregation
über
Persiztenzdienst
ConfMemberFactory
ConfMember und
ConfMemberFactory sind
Objekte des Moduls ConfMembers
create_confmember()
create_confmember()
erzeugt Instanzen von
ConfMember
Abbildung 7.9: OMT-Diagramm: ConfMember
thoden add confmemb client und remove confmemb client zum Einfügen
und Löschen von Callback-Objekten.
Die Daten des ConferenceMemberObjects werden in dem Datenobjekt ConfMemberData gespeichert, das Teil des Moduls ConfMemberDDL ist über
den Persistenzdienst eingebunden wird.
In Abb. 7.10 sind weitere Objekte dargestellt, die Hilfsfunktionen für das
Anwengungsprogramm bereitstellen. Mit Hilfe der Klasse QueryRegistration werden die Referenzen auf die Application Subcontexts ermittelt. NEOContexts speichert sie zwischen, um unnötige ORB-Anfragen zu vermeiden.
NameContextList listet die Namen aller Objekte auf, die in einem Naming
Context gespeichert sind.
Das Objekt MemberEntry (*) benutzt NEOContexts, um die Referenz
auf das Application Subcontext ConferenceMembers zu bekommen, anschließend läßt es von NameContextList die Liste mit den Namen aller Objekte
erzeugen. Über die Methode resolve des Naming Context wird aus dem
Namen die Objektereferenz erzeugt. MemberEntry speichert diese in der
Variablen confmember ref.
WatchConfMember ist ein weiteres Hilfsobjekt, das zum Beobachten des
Objektes ConfMember dient. Es wird von MemberEntry (*) erzeugt
und erhält eine Kopie der Referenz auf das ConfMember-Objekt. WatchConfMember erzeugt ein neues Objekt ConfMemberClientCallBack.
Dieses wird über die Methode add confmemb client in die Liste der Callback-
Entwurf einer CORBA-Erweiterung für Confman
82
CosNaming::
NamingContext
liefert Referenzen auf
Kontexte und
Subkontexte
QueryRegistration
attributes
resolve_appcontext()
resolve_appsubcontext()
resolve_or_create_
appsubcontext()
WatchConfMember
connected
confmember_name
confmember_ref
callback_ref
client_id
resolve()
connect()
disconnect()
get_name()
cleanup()
NEOContexts
confmember_context
conference_context
conftool_context
speichert die Referenzen
der Kontexte
referenziert über
MemberEntry::watch
instance()
get_confmember_context()
get_conference_context()
get_conftool_context()
NameContextList
MemberEntry (*)
confmember_ref
watch
count
nameArray
liest die Namen von
Objektinstanzen aus
einem Naming Context
Initialize()
operator[]
Count()
MemberEntry benutzt NEOContexts
und NameContextList zum
Auffinden der Objektinstanzen
ConfMemberFactory
MemberEntry benutzt
ConfMemberFactory zum
Erzeugen neuer Instanzen
create_confmember()
ConfMember
referenziert über
MemberEntry::
confmember_ref
set_name()
set_firstname()
set_loginname()
set_organisation()
set_position()
dto. get_...()
add_confmemb_client()
remove_confmemb_client()
Abbildung 7.10: OMT-Diagramm: Referenzieren des ConfMember-Objektes
written in IDL
ConfMemberData
mailaddress
lastname
firstname
loginname
organisation
position
confmemb_clients
num_confmemb_clients
referenziert über
ConfMemberData::
confmemb_clients[i]
written in C++
ConfMember
set_name()
set_firstname()
set_loginname()
set_organisation()
set_position()
dto. get_...()
add_confmemb_client()
remove_confmemb_client()
referenziert über
WatchConfMember::
confmember_ref
WatchConfMember
connected
confmember_name
confmember_ref
callback_ref
client_id
connect()
disconnect()
get_name()
cleanup()
ConfMemberClientCallBack
get_username()
new_name()
new_firstname()
new_loginname()
new_organisation()
new_position()
remove()
referenziert über
WatchConfMember::
callback_ref
Abbildung 7.11: OMT-Diagramm: ConfMemberClientCallBack
Entwurf einer CORBA-Erweiterung für Confman
83
Objekte eingefügt (Abb. 7.11).
written in IDL
written in C++
ClientCallBack lokalisiert
Adreßbuch und ermittelt
Referenz auf MemberEntry
Adreßbuch hält
Referenzen auf
MemberEntry
ConfMemberClientCallBack
AdressBook (*)
get_username()
new_name()
new_firstname()
new_loginname()
new_organisation()
new_position()
remove()
attributes
MemberEntry (*)
attributes
ClientCallBack
aktualisiert
Attribut in MemberEntry
Abbildung 7.12: OMT-Diagramm: Callback-Funktion
Abb. 7.12 verdeutlicht die Callback-Funktion am Beispiel des geöffneten
Adreßbuches. Wird an dem NEO-Objekt ConfMember eine Änderung an
einem Atrribut vorgenommen, so wird diese Änderung an alle CallbackObjekte über deren new-Methoden weitergegeben. Das Callback-Objekt lokalisiert das Adreßbuch, das ihm die Referenz auf das MemberEntry-Objekt
zur Verfügung stellt. Nach der erfolgten Änderung wird das Adreßbuch aktualisiert.
ConfmanClient
Mit dem Start des Client-Programms ConfmanNEO wird ein CallbackObjekt ConfmanClientCallBack erzeugt. Anschließend ermittelt ConfmanNEO das Server-Objekt ConfmanClient mit Hilfe der ODF find Funktion und fügt das Callback-Objekt mit der Methode add confman client in
die Callback-Liste ein (Abb. 7.13).
Mit Hilfe der Funktionen get num confman clients und get confmanclient callback können Referenzen auf Callback-Objekte anderer Anwendungsprogramme ermittelt werden. Damit wird die Liste aller anwesenden
Konferenzteilnehmer ermittelt.
Entwurf einer CORBA-Erweiterung für Confman
84
written in IDL
ConfmanClientDDL
ConfmanClientData
confman_clients
num_confman_clients
written in C++
ConfmanClients
ConfmanClient
referenziert über
ConfmanNEO::confmanclient_ref
mit ODF_find()
add_confman_client()
remove_confman_client()
get_num_confmanclients()
get_confmanclient_callback()
ConfmanNEO
connected
my_confmember_name
confmanclient_ref
callback_ref
client_id
member_list
conference_list
tool_list
referenziert über
confman_clients[i]
ConfmanClientCallback
get_hostname()
new_confmember()
new_conference()
new_conftool()
dto. remove_...()
start_conference()
remove()
connect()
disconnect()
get_name()
cleanup()
referenziert über
ConfmanNEO::callback_ref
Abbildung 7.13: OMT-Diagramm: ConfmanClient
ConferenceManager
Konferenzen mit mehr als zwei Teilnehmern benötigen einen KonferenzServer, dabei werden die Datenströme durch Multiplexen verteilt. In der
CORBA-Erweiterung werden Konferenz-Server repräsentiert durch Instanzen des Objekt-Typen ConferenceServer (Abb. 7.14). Sie werden auf dem
Rechner am Object Request Broker angemeldet, der als Konferenz-Server dienen soll. Die Instanzen werden im Application Subcontext ConferenceServer
abgelegt (Abb. 7.6).
ConferenceManager
route_conference()
ConferenceServer
get_quality_of_service()
get_subnet()
get_time()
serve_conference()
Abbildung 7.14: Konferenz-Server-Objekte
Der ConferenceManager wird aktiviert, sobald eine Konferenz mehr als
zwei Teilnehmer enthält. Dieser lokalisiert die Konferenz-Server und ermittelt eine Verteilungsstruktur für die Konferenz. Diese wird dem ConferenceObjekt zurückgegeben, das damit das Starten der der Server und der Konferenzwerkzeuge einleiten kann (Abb. 7.15).
Entwurf einer CORBA-Erweiterung für Confman
85
ConferenceManager
ConferenceManager
lokalisiert alle
ConferenceServer
ConferenceServer
ConfmanClient
add_confman_client()
rem_confman_client()
get_num_confmanclients()
get_confmanclient_callback()
get_quality_of_service()
get_subnet()
get_times()
start()
stop()
get_ports()
add_tool()
kill_tool()
route_conference()
Conference
lokalisiert
ConfmanClient
Conference
lokalisiert
ConferenceManager
Conference
set_...()
start_now()
add_conf_client()
rem_conf_client()
join()
leave()
ConfmanClientCallback
get_hostname()
new_confmember()
new_conference()
new_conftool()
dto. remove_...()
start_conference()
remove()
Konferenzteilnehmer
werden über ConfmanClientCallBack eingeladen
ConferenceClientCallBack
new_...()
get_ports()
start_tool()
kill_tool()
stop()
join()
leave()
Abbildung 7.15: Start einer Server-Konferenz
ConfTool
set_num_ports()
set_kill_signal()
set_run_script()
dto. get_...()
add_client()
remove_client()
Entwurf einer CORBA-Erweiterung für Confman
7.8
86
Ermitteln eines Konferenz-Servers
Für die Ermittlung eines geeigneten Servers in einer Server-Konferenz verfügt
jedes Server-Objekt über eine Funktion, mit deren Hilfe die Qualität seines
Dienstes bei vorgegebenen Anforderungen, der Quality of Service (QoS), bestimmt wird. Die Qualität des Dienstes ist dabei abhängig von der Zahl der zu
bedienenden Teilnehmer, der Anzahl der gewählten Multimedia-Tools, sowie
der aktuellen CPU-Last.
float get_quality_of_service (
in short num_members,
in short num_tools
);
// number of members
// number of conference tools
Für die Berechnung des Qualitätswertes wird die aktuelle Prozessorauslastung
über ein Systemaufruf ermittelt. Weiterhin ist die Anzahl der Prozessoren des
Rechners von Bedeutung sowie eine Konstante, die die Charakteristiken des
Rechners beschreibt. Diese lassen sich vom Administrator einstellen.
Die Qualität des Dienstes q läßt sich dann nach der Formel
q=
p
w + m ∗ t ∗ const
berechnen, wobei p der Anzahl der Prozessoren entspricht, w der Prozessorlast
(Workload), m der Teilnehmerzahl und t der Anzahl der Konferenzwerkzeuge. Das Produkt m ∗ t ∗ const entspricht der zu erwartenden Steigerung der
Workload. In der Tabelle 7.4 sind die Ergebnisse eines Rechenbeispiels eines
Servers bei unterschiedlichen Anforderungen aufgeführt.
Konstante
const
0.1
0.1
0.1
0.1
0.1
0.1
0.1
Prozessoren
p
1
1
1
1
1
2
4
Workload
w
0.1
0.3
0.1
0.3
1.0
1.0
2.0
Teilnehmer
m
3
3
4
4
3
3
3
Werkzeuge
t
2
2
2
2
2
2
2
Qualität
q
1.43
1.11
1.11
0.91
0.63
1.25
1.53
Tabelle 7.4: Beispielwerte zur Berechnung des Qualitätswertes
Es läßt sich zeigen, daß die Formel für eine einfache Berechnung ausreichend
ist, die der Bestimmung der Qualität des Serverdienstes genügt. Wenn ein
Entwurf einer CORBA-Erweiterung für Confman
87
Server die Konferenz nicht annehmen kann, wird der Wert 0 zurüchgegeben.9
Die Auswahl des geeigneten Konferenz-Servers übernimmt das Objekt ConferenceManager, das mit den Anforderungen der Konferenz den Server ermittelt, der den besten Qualitätswert liefert. Über die Methode
serve conference wird der Konferenz-Server aktiviert.
7.8.1
Wegefindung bei Konferenzen mit mehreren Servern
Die durch Server-Konferenzen verursachte Netzlast ist proportional zu der
Anzahl der Konferenzteilnehmer. Dies kann insbesondere bei Netzwerkverbindungen mit hoher Auslastung, die eine weitere Strecke zurücklegen, zu
Problemen in der Übertragung der Daten führen.
Bei Konferenzen mit mehr als 3 Teilnehmern in verschiedenen Subnetzen kann
es daher sinnvoll sein, mehrere Konferenz-Server einzusetzen, die die Daten
untereinander vermitteln und sie dann an die Teilnehmer ihres Subnetzes
verteilen. Abb. 7.16 zeigt ein Beispiel für eine solche Datenverteilung.
Teilnehmer 2
Teilnehmer 4
Teilnehmer 6
Teilnehmer 1
Server 1
Server 2
Server 3
Teilnehmer 7
Teilnehmer 3
Teilnehmer 5
Abbildung 7.16: Datenverteilung einer Server-Konferenz mit mehreren Servern
Um einer sinnvolle Verteilung der Daten vornehmen zu können, werden Kennnisse über folgende Punkte gesammelt:
• Subnetze: Über die Rechneradressen der Konferenzteilnehmer und der
Server kann herausgefunden werden, in welchem Subnetz sich die Knoten befinden. Dabei ist zu beachten, welcher Klasse die IP-Adresse angehört und welches Subnettingverfahren Verwendung findet. NetzwerkElemente, die auf Ethernet-Ebene eine Unterteilung in verschiedene
9
Dies ist beispielsweise der Fall, wenn der Server gleichzeitig Arbeitsplatzrechner eines
Konferenzteilnehmers ist.
Entwurf einer CORBA-Erweiterung für Confman
88
Collision-Domains vornehmen, können hierbei nicht berücksichtigt werden, da sie Kenntnisse voraussetzen, die nicht zur Laufzeit erworben
werden können.
• Zeitmessungen: Der Datenaustausch der Multimedia-Tools erfolgt
über das Verschicken von Datagramm-Paketen (UDP). Um eine
möglichst authentische Aussage über die Qualität der Netzverbindung
machen zu können, werden Pakete in gleicher Größe und zeitlicher Folge
zwischen den Netzknoten verschickt und die Zeit bis zur Antwort abgewartet. Durch das Zusammemfassen der Meßergebnisse in einer Matrix
kann ein Optimum bezüglich der zu wählenden Datenverteilungsstruktur gefunden werden.
• Erfahrungswerte: Die oben genannten Messungen sind subjektiv, so
daß sie nicht immer die optimale Verteilung ermitteln. Werden die gefundenen Verteilungsstrukturen über einen längeren Zeitraum festgehalten, so können Aussagen getroffen werden, welche Verbindungen sich
bewährt haben. Diese Erfahrungswerte können hilfreich sein zum Aufbau ähnlicher Strukturen.
Das NEO-Objekt ConferenceManager hat die Aufgabe, nach den oben
genannten Methoden die optimale Struktur zur Verteilung der Datenstöme
zu ermittelen. Es enthält eine Methode route conference, die die verwendeten Multimediatools sowie die Hostadressen der Teilnehmer als Parameter
überreicht bekommt, die an der Konferenz teilnehmen.
Die Konferenz-Server-Objekte verfügen über die Methoden get subnet und
get times, anhand derer das Subnetz, in dem sich der Rechner befindet, und
die Datenübertragungszeiten zu anderen Kommunikationspartnern ermittelt
werden können. Die Theorien hinter den Methoden wird im folgenden näher
betrachtet.
Subnetze
Die IP-Adresse10 eines Rechners setzt sich zusammen aus 4 Bytes. Anhand der
ersten Bits kann erkannt werden, welcher Netzklasse der Rechner angehört.
IP-Adressen sind in 5 Klassen eingeteilt, die durch das erste Byte bestimmt
werden. Adressen der Klasse A beginnen mit einer Null, sie enthalten eine 7
Bit lange Net-ID und eine 24 Bit lange Host-ID. Damit lassen sich 16.777.214
Hosts in diesem Netz adressieren.
Klasse B Netze beginnen mit der Bitfolge 10 und benötigen 14 Bits zur Darstellung der Net-ID und 16 Bits für die Host-ID. Damit können 65534 Rechner
10
IP ist die Abkürzung für Internet Protocol.
Entwurf einer CORBA-Erweiterung für Confman
89
adressiert werden. Ein Netz der Klasse C beginnt mit der Bitfolge 110 und
benutzt 21 Bit zum Adressieren der Net-ID und 8 für die Host-ID, es läßt
maximal 254 Hosts zu. Netze der Klasse D sind Multicast-Adressen, sie sind
hier nicht von Interesse. Klasse E Netze sind noch nicht näher spezifiziert.
In Netzen der Klasse B wird häufig ein Subnetting-Verfahren eingesetzt, das
die 16 Bit, die für die Host-ID vorgesehen waren, in Sub-Net-ID und Host-ID
aufteilt. Dieses kann über die Netmask ermittelt werden. Somit enthält diese
Adresse drei Komponenten: Net-ID, Subnet-ID und Host-ID. 11
Die im folgenden definierte Struktur enthält zwei Variablen zum Aufnehmen
der Net-ID und Subnet-ID. Die Werte werden von der Methode get subnet
des Objektes ConferenceServer ermittelt. Wird kein Subnetting eingesetzt,
erhält subnetid den Wert -1.
struct SubNet {
short netid;
short subnetid;
};
SubNet get_subnet();
Diese Methode wird ebenfalls in die ConfmanClientCallBack-Objekte aufgenommen, somit kann eine Zuordnung von Konferenz-Server und Teilnehmer
in gleichen Subnetzen vorgenommen werden.
Zeitmessungen
Für die Zeitmessungen benötigt der Server die Hostnamen der Rechner aller
Konferenzteilnehmer sowie aller verfügbaren Konferenz-Server. Diese wird der
Funktion get time übergeben, die UDP-Pakete an diese Rechner schickt.
struct TimeToHost{
string hostname;
long
time;
};
void get_time( inout TimeToHostList hosts);
Die Pakete werden bei Eintreffen an den Arbeitsstationen der Konferenzteilnehmer dupliziert und an den Server zurückgeschickt. Dieser mißt die Zeit
11
Detailliertere Informationen können [Gri94] entnommen werden.
Entwurf einer CORBA-Erweiterung für Confman
90
zwischen dem Versenden des Paketes und dem Eintreffen der Rückmeldung.
Die Zeiten werden in der Liste eingetragen, so daß sie dem ConferenceManager zur Verfügung stehen.
Der ConferenceManager trägt alle Zeiten in einer Tabelle nach Tab. 7.5
ein und sucht die Minima in jeder Zeile. Dadurch wird die Zuordnung der
Teilnehmer zu den Servern sowie die günstigste Verbindung zwischen den
Servern ermittelt. Die so gefundene Struktur wird anschließend daraufhin
geprüft, ob alle Konferenzteilnehmer miteinander verbunden sind und ob ein
Konferenz-Server entfallen kann, wenn er nur einen Teilnehmer bedient.
In einem Versuch wurden Zeitmessungen mit UDP-Paketen der Größe 316
Byte vorgenommen, die nach diesem Verfahren verschickt wurden. 12 Dabei dienten die Rechner borneo, (130.75.5.18), cip1-s (130.75.16.100) und
UniCS (130.75.6.1) als mögliche Konfernz-Server, java (130.75.5.2), molokai (130.75.5.49), cip1-2 (130.75.16.2), cip1-29 (130.75.16.29) und s5b002
(130.75.7.2) als Teilnehmer-Rechner. Die Ergebnisse sin in Tabelle 7.5 aufgenommen.
Java
Molokai
Cip1-2
Cip1-29
S5b002
Borneo
Cip1-s
UniCs
Borneo
14,5
6,2
16,3
11,6
10,6
—
12,4
12,6
Cip1-s
15,7
12,0
8,7
9,8
15,4
13,5
—
22,6
UniCs
16,5
33,6
17,9
30,8
18,9
16,4
19,4
—
Tabelle 7.5: Versuch: Zeitmessungen mit UDP-Paketen
Nach Auswertung der Zeiten ergibt sich eine Verteilungsstruktur nach
Abb. 7.17.
7.9
Schnittstellen und Datenbeschreibungen
Auch die Beschreibung der Schnittstellen und Daten der NEO-Objekte wird
hier nur exemplarisch vorgenommen, da sie sich bei den drei Objektservern
ConferenceMemberObjects, ConferenceToolObjects und ConferenceObjects
nur in der Ausführung unterscheiden.
Die Schnittstelle des Moduls ConfMembers wird in einem IDL-File de12
Es handelt sich bei diesem Programm um das Client-Server Beispiel mit UDP“ aus
”
[Gri94], das um Methoden zur Zeitmessung erweitert wurde.
Entwurf einer CORBA-Erweiterung für Confman
91
Java
Cip1-2
Molokai
Borneo
Cip1-s
Cip1-29
S5b002
Abbildung 7.17: Verteilungsstruktur nach Zeitmessungen mit UDP-Paketen
finiert, das den Namen ConfMember.idl erhält. Dort enthalten sind alle Methoden, die zum Setzen und Auslesen der Attribute der Objektinstanz benötigt werden. Es enthält auch die oben genannten Methoden zum
Einfügen und Löschen von Objektereferenzen der Callback-Objekte vom Typ
ConfMemberClientCallBack.
//
//
//
//
//
//
//
//
//
//
This may look like C++ code, but it is really -*- IDL -*Author:
Bernd Boeker <[email protected]>
File:
ConfMember.idl
Mon Dec 11 1995
(c) 1995 Lehrgebiet Rechnernetze und Verteilte Systeme
Universitaet Hannover, Germany
#ifndef _CONFMEMBER_IDL
#define _CONFMEMBER_IDL
#include <Cos/LifeCycle.idl>
#include "ConfMemberClientCallBack.idl"
#include "ConfmanClientCallBack.idl"
module ConfMembers{
exception TooMuchInterest{};
exception UnknownId{};
exception AlreadyExists{};
interface ConfMember : CosLifeCycle::LifeCycleObject {
// methods for setting conference members data
oneway void set_name(in string new_name);
Entwurf einer CORBA-Erweiterung für Confman
oneway
oneway
oneway
oneway
void
void
void
void
92
set_firstname(in string new_firstname);
set_loginname(in string new_loginname);
set_organisation(in string new_organisation);
set_position(in string new_position);
// methods for retrieving conference members data
string get_name();
string get_firstname();
string get_loginname();
string get_organisation();
string get_position();
// add other ConfMemberClient to interested party
unsigned long add_confmember_client(in ConfMemberClientCallBack confmemb_client)
raises(TooMuchInterest);
// remove ConfMemberClient from interest list
void remove_confmember_client(in unsigned long confmember_id)
raises(UnknownId);
};
interface ConfMemberFactory{
// create and name a new ConfMember
ConfMember create_confmember(in string mailaddress)
raises(AlreadyExists);
};
};
#endif // !defined _CONFMEMBER_IDL
Die Daten des Objektes werden in einem DDL-File definiert. Dieses wird
unter dem Namen ConfMember.ddl gespeichert, es enthält die Schnittstellenbeschreibung der Klasse ConfMemberData, die dem Modul ConfMemberDDL zugeordnet ist.
//
//
//
//
//
//
//
//
//
//
This may look like C++ code, but it is really -*- DDL -*Author:
Bernd Boeker <[email protected]>
File:
ConfMember.ddl
Wed Dec 13 1995
(c) 1995 Lehrgebiet Rechnernetze und Verteilte Systeme
Universitaet Hannover, Germany
#ifndef _CONFMEMBER_DDL
#define _CONFMEMBER_DDL
Entwurf einer CORBA-Erweiterung für Confman
93
#include <Cos/Naming.idl>
#include "ConfMemberClientCallBack.idl"
#include "ConfmanClientCallBack.idl"
module ConfMemberDDL {
const short max_clients = 128;
typedef sequence<ConfMemberClientCallBack, max_clients> ConfMemberClientCallBacks;
typedef sequence<ConfmanClientCallBack, max_clients> ConfmanClientCallBacks;
interface ConfMemberData {
// mailadress of conference member, unique
attribute string mailaddress;
// first name
attribute string firstname;
// last name
attribute string lastname;
// login account name
attribute string loginname;
// name of the users organization
attribute string organization;
// the users postion
attribute string position;
// list of users confman client callbacks,
// one for every confman he has started,
// and the number of clients
attribute ConfmanClientCallBacks confman_clients;
attribute unsigned short num_confman_clients;
// list of confmemberclients (addressbooks of various conference
// members)
attribute ConfMemberClientCallBacks confmemb_clients;
attribute unsigned short num_confmemb_clients;
};
};
#endif // !defined _CONFMEMBER_DDL
Das Callback-Objekt wird in der Datei ConfMemberClientCallBack.idl definiert. Es enthält die Methoden, die das vom Benutzer gestartete Anwen-
Entwurf einer CORBA-Erweiterung für Confman
94
dungsprogramm über Änderungen an den Attributen der Objektinstanz informieren.
//
//
//
//
//
//
//
//
//
//
This may look like C++ code, but it is really -*- IDL -*Author:
Bernd Boeker <[email protected]>
File:
ConfMemberClientCallBack.idl
Tue Dec 12 1995
(c) 1995 Lehrgebiet Rechnernetze und Verteilte Systeme
Universitaet Hannover, Germany
#ifndef _CONFMEMBERCLIENTCALLBACK_IDL
#define _CONFMEMBERCLIENTCALLBACK_IDL
interface ConfMemberClientCallBack {
// return the users name
string get_username();
// set
oneway
oneway
oneway
oneway
oneway
the new values of the ConfMember
void new_name(in string name);
void new_firstname(in string firstname);
void new_loginname(in string loginname);
void new_organisation(in string organisation);
void new_position(in string position);
// remove the object
void remove();
};
#endif // !defined _CONFMEMBERCLIENTCALLBACK_IDL
7.10
Design-Änderungen gegenüber Confman
Gegenüber der derzeit distributierten Version von Confman sind einige Änderungen vorgenommen worden, die nicht die CORBA-Erweiterung betreffen.
Ziel dieser Änderungen ist es, eine intuitivere Bedienung zu ermöglichen. Alle
Änderungsentwürfe sind bei der Benutzung des Programms entstanden.
Entwurf einer CORBA-Erweiterung für Confman
7.10.1
95
Toolbutton-Leiste
Alle Knöpfe zum Auswählen der Multimedia-Werkzeuge enthalten nur noch
zwei Zustände. Damit können die Werkzeuge jederzeit in einer laufenden Konferenz hinzugenommen werden, ohne vorher aktiviert zu werden. Daraus ergibt sich die veränderte Situation, daß die Ports für die Tools erst unmittelbar
vor dem Starten ermittelt werden.
Weiter gilt es zu berücksichtigen, ob das zu Starten gewünschte Tool auch bei
allen Kommunikationspartnern vorhanden ist. Auch hier findet die Probe erst
unmittelbar vor dem Start des Werkzeugs statt. Werkzeuge, die bei keinem
weiteren Konferenzpartner definiert sind, werden nicht gestartet.
7.10.2
Quit-Funktionen
Der Quit-Button im Hauptmodul sowie die Quit-Funktion im File-Menü des
Conferencemanagers sind nicht mehr kontextsensitiv, sie führen stets die gleiche Funktion aus und liefern so immer das gleiche Ergebnis. Wird der Conferencemanager bzw. Confman in einer laufenden Konferenz beendet, findet
auch hier eine Rückfrage statt. Ein Bestätigen der Rückfrage führt dann –
anders als beim distributierten Confman – zum Schließen des Fensters.
7.10.3
Adreßeditor
Durch den Wegfall der Hostlisten in den Einträgen des Adreßbuches sind im
Adreßeditor die Felder zum Eintragen der Rechnernamen sowie die Rechnerliste entfernt worden. Damit erhält das Fenster ein verändertes Aussehen.
Kapitel 8
Laufzeitverhalten von ConfmanNEO
Nach dem im vorigen Kapitel beschriebenen Entwurf ist eine Erweiterung
für Confman implementiert worden, deren Laufzeiteigenschaften hier näher
untersucht werden sollen. Die Unterstützung von Server-Konferenzen ist im
Rahmen dieser Arbeit nicht mehr vorgenommen worden, da diese Arbeit nur
eine Technologiestudie darstellt und sich ein sinnvoller Einsatz von ConfmanNEO derzeit nicht abzeichnet.1 Stattdessen wird im nächsten Kapitel eine
Übernahme der Entwicklungsergebnisse auf die in der Distribution befindlichen Version von Confman diskutiert. Alle Messungen sind in einem Netzwerk
vorgenommen worden, das in dieser Zeit auch von anderen Rechnern genutzt
worden ist.2
Die NEO-Server-Objekte sind auf einer SPARCstation 10/20 mit 64 MByte
Speicher installiert, die Daten sowie die Programme werden – abgesehen von
Abschnitt 8.2 – von der lokalen Festplatte geladen. Alle Server- und ClientProgramme wurden mit der Option -O2 übersetzt. Als Betriebssystem stand
Solaris 2.4 bzw. Solaris 2.5 zur Verfügung.
8.1
Aktivierung und Deaktivierung von NEO Objekten
NEO-Objekte werden durch Prozesse repräsentiert. Um die Prozessorlast
nicht unnötig hoch zu halten, werden Prozesse, die längere Zeit nicht angesprochen worden sind, terminiert. Dabei werden die persistenten Daten auf
externen Speichermedien gesichert.
1
Dieses werden die in diesem Kapitel beschriebenen Zeitmessungen zeigen.
Es handelt sich hier um das Netzwerk des Regionalen Rechenzentrums, in dem sich
über 200 Rechner befinden. Durch die Aufteilung in verschiedene Collision-Domains liegt
die Netzauslastung gewöhnlich unter 10 %.
2
96
Laufzeitverhalten von ConfmanNEO
97
Bei Anforderung eines Dienstes wird der Serverprozeß automatisch gestartet
und seine persistenten Daten werden wieder zurückgeladen. Dadurch kann
ein Serverstart mehrere Sekunden Zeit in Anspruch nehmen, abhängig von
der Größe des Server und der persistenten Daten.
Die Serverprozesse der ConfmanNEO-Objekte werden terminiert, nachdem
sie eine Stunde lang nicht in Anspruch genommen worden sind. Aus diesem Grund sind die Messungen einmal bei aktivem und inaktivem Server
durchgeführt worden. Dieser Zeitwert kann beliebig verändert werden, die
automatische Terminierung ist auch abschaltbar. 3
8.2
Programmstart von ConfmanNEO
Während des Programmstarts lokalisiert ConfmanNEO die Naming Contexts,
in denen die Konferenzen, Teilnehmer unf verfügbaren Werkzeuge abgelegt
sind. Anschließend erzeugt es das Callback-Objekt ConfmanClientCallBack,
lokalisiert das NEO-Objekt ConfmanClients und meldet das Callback-Objekt
dort an.
ConfmanNEO benutzt dafür einige NEO-Services, die bei Bedarf gestartet
werden müssen. Die Startzeit der Server ist dabei abhängig von ihrer Installation, in diesem Fall werden alle Server, die Bestandteil vom NEO-System
sind, über NFS geladen. Die Server-Objekte der Confman-Erweiterung sowie
alle dazugehörigen Daten werden in einer Meßreihe von einer lokalen Festplatte geladen, in der zweiten Meßreihe ebenfalls über NFS. In jeder Meßreihe
wird je eine Messung mit noch zu startenden Services (Server inaktiv) sowie
mit bereits gestarteten Services (Server aktiv) vorgenommen.
Alle Messungen wurden auf den Rechnern des Lehrgebietes Rechnernetze und
Verteilte Systeme vorgenommen. Die Arbeitsgruppe wird vom Rechner molokai verwaltet, auf dem Rechner sumatra sind die Confman-Server-Objekte
installiert, als Client-Rechner diente borneo. Es wird davon ausgegangen,
daß der Benutzername bekannt ist, sodaß das Erzeugen einer neuen Instanz
vom Typ ConfMember entfällt.
Server inaktiv
40 s.
Server aktiv
10 s.
Tabelle 8.1: Programmstartzeiten bei lokalem Server
Tabelle 8.1 enthält die Startzeiten von ConfmanNEO bei lokalen ServerObjekten, in Tabelle 8.2 werden Server-Objekte, dynamische Bibliotheken
3
Über eine sinnvolle Einstellung soll zu einem späteren Zeitpunkt diskutiert werden.
Laufzeitverhalten von ConfmanNEO
98
und Datenbanken über NFS geladen. ConfmanNEO wird dabei stets über
NFS gestartet.
Server inaktiv
45 s.
Server aktiv
15 s.
Tabelle 8.2: Programmstartzeiten bei Server über NFS
8.3
Auffinden von Objekt-Instanzen
Eine weitere Meßreihe beschäftigt sich mit der Zeit, die zum Auffinden von
Objekt-Instanzen benötigt wird. Als Beispiel dient hier das Adreßbuch, das
eine unterschiedliche Anzahl von Einträgen enthält.
Tabelle 8.3 enthält die Zeiten, die zum Öffnen eines Adreßbuches mit 8, 32
und 128 Einträgen benötigt wird. Dabei werden die Server-Objekte sowie die
Datenbanken der Server-Objekte lokal geladen.
Einträge
8
32
128
Server inaktiv
15 s.
38 s.
132 s.
Server aktiv
7 s.
31 s.
115 s.
Tabelle 8.3: Zeiten zum Öffnen des Adreßbuches
8.4
Auswirkung der Dynamic Notification
Mit Hilfe der Dynamic Notification werden Änderungen an Adreßbucheinträgen, Konferenzdaten oder Tooldaten an andere Benutzer weitergereicht,
die gerade den gleichen Datensatz betrachten. Diese Meßreihe untersucht die
Zeiten, in der die Datenänderungen an alle Benutzer verteilt worden sind. Als
Beispiel dient des Ändern eines Eintrags in einer Konferenz, das an 0, 8 und
32 weitere Teilnehmer weitergereicht werden soll (Tab. 8.4). In diesem Fall
kann davon ausgegangen werden, daß die Server alle nicht terminiert sind,
da die Bearbeitung eines Datensatzes nur in seltenen Fällen länger als eine
Stunde unterbrochen werden wird.
Teilnehmer
0
8
32
Server inaktiv
—
—
—
Server aktiv
3 s.
4 s.
5 s.
Tabelle 8.4: Zeit für dynamische Benachrichtigung
Laufzeitverhalten von ConfmanNEO
8.5
99
Reaktivierung nach längerer Pause
Die Server-Objekte werden terminiert, wenn sie eine bestimmte Zeit nicht
angesprochen worden sind. So kann es vorkommen, daß nach dem Start von
ConfmanNEO, wenn dieser längere Zeit nicht benutzt wurde, die ServerObjekte neu gestartet werden müssen. Dies kann z. B. durch das Öffnen des
Konferenzmanagers veranlaßt werden.
Die Zeiten, die für die Reaktivierung benötigt werden, sind dabei unterschiedlich und hängen von der Anzahl der Konferenzen und der Anzahl der Teilnehmer in der Konferenz ab. Aus den Erfahrungen in den Erfahrungen, die
in der Entwicklung und der Aufnahme der Meßreihen ergeben haben, spielen
sich die Zeiten zwischen 20 Sekunden und 2 Minuten ab.
8.6
Speicherbedarf
Die Meßergebnisse sind in einem hohen Maß von dem zur Vefügung stehenden Speicher der Test-Rechner abhängig. Dies ist deshalb von besonderer Bedeutung, da mit Solaris NEO entwickelten Programme und Server-Objekte
einen hohen Speicherbedarf haben. ConfmanNEO belegt beispielsweise 14
MB des Speichers der Test-Rechner, dies entspricht ca. 22 % des gesamten,
zur Verfügung stehenden Speichers. Die Server-Objekte belegen ca. 9 MB
Speicherplatz. Confman – in der Version ohne CORBA-Erweiterung – belegt
hingegen nur 6 MB Speicher.
8.7
Weitere Optimierungsmethoden
Die obigen Messungen zeigen, daß trotz des Versuchs, die Wartezeiten
im Laufzeitverhalten von ConfmanNEO zu minimieren, keine befriedigende
Lösung errreicht werden konnte. Bisher sind folgende Optimierungen vorgenommen worden:
• Installation der Server-Objekte auf lokalen Festplatten
• Kompilieren von Client- und Servercode mit der Compileroption -O2
• Asynchroner Methodenaufruf durch Verwenden des oneway-Deklarators
• Trennen von Workgroup-Server und ConfmanNEO-Objektserver
Laufzeitverhalten von ConfmanNEO
100
Es sind noch weitere Optimierungsmethoden denkbar, die in weiteren Versuchsreihen erprobt werden könnten. Dazu gehören:
• Durchführung der Messungen in einem leistungsfähigeren Netzwerk, wie
z. B. ATM
• Einsatz von leistungsfähigeren Rechnern
• Workgroup-Server und Objektserver von Arbeitsstationen lösen und auf
eigenständigen Servern installieren
• Lokale Installation der NEO-Serverdienste
• Lokale Installation des Anwendungsprogrammes und der dynamischen
Bibliotheken
• Deaktivierung der automatischen Terminiereung von Serverprozessen
• Überarbeiten des Programmcodes mit der Zielsetzung, Laufzeiten zu
verkürzen
Durch den Einsatz einer leistungsfähigeren Hardware-Infrastruktur ist eine
Performance-Steigerung zu erwarten, die somit eine Verkürzung der Wartezeiten nach sich zieht.
Die genannten organisatorischen Maßnahmen stellen den Objektservern mehr
Prozessorkapazität zur Verfügung und sorgen für eine Reduzierung der Netzlast durch NFS-Pakete. Auch damit ist eine Verkürzung der Wartezeiten zu
erwarten.
Wie sich weiter in den Messungen gezeigt hat, steigt die benötigte Zeit der
Dynamic Notification nur gering mit der Anzahl der zu benachrichtigen Objekte. Eine längere Programmstartzeit wird vom Benutzer auch eher akzeptiert als Wartezeiten zur Laufzeit. Daher erscheint es sinnvoll, während des
Programmstarts eine Kopie der Daten aller NEO-Objekte anzulegen. Im Falle
der Änderung der Daten wird der kopierte Datensatz mit Hilfe der Dynamic
Notification aktualisiert.
Dadurch sind noch einmal Verkürzungen der Laufzeiten zu erwarten, die allerdings nicht im Rahmen dieser Arbeit getestet werden konnten.
8.8
Vergleich Confman vs. ConfmanNEO
ConfmanNEO ist mit der Zielsetzung entworfen worden, die in Kapitel 2
aufgedeckten Problemstellungen zu lösen, ohne weitere Nachteile entstehen zu
Laufzeitverhalten von ConfmanNEO
101
lassen. Durch die Wartezeiten während des Zugriffs auf NEO-Objekte konnte
dieses Ziel nicht erreicht werden. Um die Unterschiede, die der Benutzer dieses
Systems empfindet, zu verdeutlichen, ist ein Vergleich der Produkte Confman
und ConfmanNEO vorgenommen worden.
Zum Vergleich des Zeitverhaltens beider Produkte sind daher Zeitmessungen
vom Programmstart von Confman, vom Öffnen eines Adreßbuches mit 11
Einträgen und vom Öffnen des Konferenzmanagers vorgenommen worden.
Alle Messungen sind zweimal durchgeführt worden, um festzustellen, ob das
wiederholte Durchführen einer Aktion eine Verkürzung der Wartezeit zufolge
hat. Die Ergebnisse sind in Tabelle 8.8 festgehalten.
Aktion
Programmstart
Adreßbuch
Konferenzman.
1. Messung
5 s.
3 s.
3 s.
Wiederholungsmessung
5 s.
< 2 s.
2 s.
Tabelle 8.5: Wartezeiten bei Confman
8.9
Zusammenfassung der Meßergebnisse
Während der Benutzung von ConfmanNEO entstehen Wartezeiten, die ein
flüssiges Arbeiten mit dem Programm nicht ermöglichen. Diese Wartezeiten
entstehen besonders dann, wenn NEO-Objekte in einem Netzwerk lokalisiert
werden oder auf diese zugegriffen wird. Die oben aufgeführten Messungen
zeigen, daß diese Wartezeiten mit der Anzahl der Zugriffe auf die Objekte
steigen. Einzige Ausnahme ist die Dynamic Notification, die mit der Anzahl
der notwendigen Benachrichtigungen nur geringfügig mehr Zeit in Anspruch
nimmt.
Der Einsatz von Solaris NEO scheint für ein interaktives Programm wie Confman nicht geeignet.
Kapitel 9
Ergebnisse und Ausblick
9.1
Entwicklung verteilter Systeme mit CORBA
Aus der Sicht des Programmierers stellt die CORBA-Infrastruktur eine erhebliche Vereinfachung bei der Entwicklung verteilter Systeme dar. Durch die volle Unterstützung von Objektorientierung und der Beschreibung von Schnittstellen in einer einheitlichen, systemunabhängigen Sprache ist es möglich,
Dienste in Netzwerke zu integrieren und von verschiedenen Systemen zu nutzen, unabhängig von der Implementierung oder dem Betriebssystem.
Besonders angenehm ist die Implementierung deshalb, weil die Netzwerkschnittstellen für den Programmierer transparent sind. Mit Hilfe weniger
Funktionen lassen sich Objekte im Netz finden, die dann auf herkömmliche
Art referenziert werden können.
Das Auffinden der Objekte geschieht automatisch, die Wahl der Server spielt
in der Entwurfsphase der Software keine Rolle. Die Dienste werden mit ihrer
Installation in der CORBA-Infrastruktur angemeldet, sie stehen somit dem
Benutzer zur Verfügung, ohne daß dieser Kenntnis über den Aufenthaltsort“
”
des Dienstes hat. Ein Verschieben von Diensten auf andere Rechner kann zur
Laufzeit vorgenommen werden, dem Benutzer bleibt dieses Vorgehen verborgen.
Somit stellt diese Architektur ein sehr leistungsfähiges System zur Entwicklung verteilter Systeme dar, das auf zukunftsweisende Techniken setzt. Die
Vielzahl der Software-Hersteller – insbesondere der großen – und der Anzahl
der Produkte, die auf CORBA basieren, lassen darauf deuten, daß CORBA
eine ähnliche Verbreitung finden wird wie der Remote Procedure Call.
102
Ergebnisse und Ausblick
9.2
103
Erfahrungen mit Solaris NEO
Solaris NEO und Workshop NEO standen bei der Implementierung des Prototypen von ConfmanNEO in der Version 1.0 zur Verfügung. Die bereits angekündigte Unterstützung der grafischen Benutzerschnittstelle OpenStep ist
in dieser Version nicht enthalten gewesen.
Es hat sich gezeigt, daß Solaris NEO in dieser Version noch nicht ganz ausgereift ist. Schon die Installation ist nicht unproblematisch, so ist z. B. keine
direkte Installation auf einem NFS-File-Server möglich.1 Die Einbindung weiterer Rechner in den NEO-Verbund ist über NFS möglich, dafür existiert eine
Installationsroutine. Nach der Installation der Software werden Datei-Rechte
nicht richtig gesetzt, so daß eine Nachbearbeitung von Hand erforderlich ist.
Weiter hat sich gezeigt, daß bei Absturz eines Rechners die ORB-Server nicht
wieder gestartet werden, da Lock-Files beim Absturz nicht gelöscht werden
und ein erneutes Starten der ORB-Dienste verhindern. 2
Durch die fehlende Unterstützung einer grafischen Benutzerschnittstelle ist
der Programmierer genötigt, auf bekannte Bibliotheken zum X-Window-System zurückzugreifen. Dadurch ist zusätzlicher Programmieraufwand erforderlich, da NEO-Programme in mehreren konkurrierenden Ebenen ablaufen. 3
Die von Solaris NEO erzeugten Fehlermeldungen lassen häufig nicht auf die
Fehlerursache schliessen und stiften somit mehr Verwirrungen als sie Hilfestellung bieten. Weder Benutzer noch Administrator sind mit dem Umgang von
Solaris NEO vertraut, so daß eine Fehlerbehandlung, die Lösungsmöglichkeiten aufzeigt, eine sinnvolle Erweiterung darstellen würde.
Nicht zuletzt hat sich gezeigt, daß das Laufzeitverhalten von NEOAnwendungen nicht unkritisch ist. Wartezeiten während des Lokalisierens und
des Zugriffs auf NEO-Objekte fordern die Geduld des Anwenders, so daß trotz
aller Bemühungen, das Zeitverhalten zu optimieren, ein angenehmes Arbeiten
nicht gewährleistet ist.
1
Dies läßt sich nur dadurch realisieren, wenn die Installation lokal vorgenommen wird,
anschließend das gesamte Verzeichnis /opt/SUNWdoe auf einen File-Server übertragen wird.
2
Dieses kann über einen nachträglichen Patch behoben werden.
3
Siehe Abschnitt 5.6.
Ergebnisse und Ausblick
9.3
104
Weiterentwicklung der Produktionslinie ConfmanNEO
Solaris NEO ist in der derzeitigen Version nur mit der CORBA-Implementierung Orbix von Iona Technologies 4 interoperabel, nicht jedoch mit Object
Request Brokern von anderen Herstellern. Dies ist erst möglich, wenn NEO
die CORBA-Spezifikation 2.0 erfüllt.
Auch die Problematik der zeitintensiven Abfragen auf NEO-Objekte scheint
z. Z. nicht zu lösen zu sein. Hier wird eine leistungsfähigere Hardware
benötigt, die sich allerdings schon mit der Generation der UltraSPARCArchitekturen ankündigt.
Die Produktlinie ConfmanNEO wird daher zunächst nicht weitergeführt, bis
Lösungen für diese Probleme gefunden werden können. Im weiteren wird daher versucht, die im Entwurf gesammelten Ergebnisse, die sich nicht unmittelbar auf CORBA stützen, auf die in Distribution befindliche Version von
Confman zu übertragen.
9.4
Übernahme der Entwicklungsergebnisse zu dem nicht auf
CORBA basierenden Confman
Einige der Entwicklungsergebnisse aus Kapitel 7 sind auch übertragbar auf
nicht CORBA-basierte Systeme, so z. B. die Strategien zur Wegefindung bei
Server-Konferenzen. Dieser Abschnitt soll dazu anregen, die aus der Entwicklung der Confman-Erweiterung gesammelten Ergebnisse in die Produktionslinie Confman zu übernehmen.
Dabei bleibt allerdings zu berücksichtigen, daß ein selbständiges Finden von
Objekten und Servern mit herkömmlichen Netzwerkdiensten nicht möglich
ist. Hier ist weiterhin das Verwalten von Listen mit Rechnernamen erforderlich.
9.4.1
Personenfindung
Zentraler Anmeldeserver
In der CORBA-Erweiterung diente das NEO-Objekt ConfmanClients als
zentrale Anmeldestelle für die verschiedenen Instanzen des Anwendungsprogramms ConfmanNEO. Dadurch war es unter anderem möglich, eine Liste
4
Siehe [Ion96].
Ergebnisse und Ausblick
105
der Benutzer zu erstellen, die z. Z. über Confman erreichbar sind.
Diese Funktionaliät kann durch Einrichten eines zentralen Anmeldeservers
ersetzt werden. Beim Programmstart von Confman hat dann eine Anmeldung
an diesem Server zu erfolgen, bei er Mail-Adresse und Rechnername registriert
werden. Die Verwaltung dieser Liste dadurch regelmäßige Proben des Servers
unterstützt werden.
Da dieser Dienst nicht automatisch innerhalb eines Netzwerkes gefunden werden kann, ist es notwendig, im Anwendungsprogramm den Namen des Rechners einzutragen, der als Anmeldeserver dient.
Die Einrichtung einer zentralen Instanz, die zur Personenfindung herangezogen werden kann, bietet die Vorteile, daß sich die Benutzer nicht Anrufumleitungen kümmern müssen. Es kann jedoch als störend empfunden werden,
wenn die Anwesenheit von jedem beoachtet werden kann. Hier bietet sich eine
Lösung dadurch an, daß die eigene Anwesenheit dem Server mitgeteilt wird,
aber für andere nicht sichtbar ist. Dieses Verstecken“ ist aber auch nicht
”
sicher, es ist in dieser Arbeit nicht weiter bedacht worden.
Einrichten eines Confman-Naming-Services
Die Einrichtung eines zentralen Anmeldeservers führt in einem weltweiten
Netz zu Problemen und erweckt in der Regel Mißtrauen, so daß alternative
Strategien herangezogen werden müssen. Die Pflege und Verwaltung dieser
Dienste sollte auch nicht zentral gesteuert werden, sondern den beteiligten
Domains überlassen werden.
Durch die eindeutige Zuordnung von Mail-Adressen und Domains besteht die
Möglichkeit, Domain-bezogene Server einzurichten. Diese können beispielsweise durch ein vorangestelltes cns. identifiziert werden. Wird z. B. nach
einer Instanz von confman des Benutzers [email protected] gesucht, wird der Rechner mit dem Namen cns.rvs.uni-hannover.de lokalisiert und geprüft, ob es sich um einen Confman-Naming-Server handelt.
Dieser Service kann dabei parallel zu den bestehenden Suchverfahren laufen.
Auch hier sollte den Benutzern freigestellt sein, welche Informationen über
diesen Server verfügbar sind. Dieses bleibt in weiteren Arbeiten zu prüfen.
Ergebnisse und Ausblick
106
Nutzung vorhandener Dienste wie X.500
Für den Aufbau eines hierarchischen Systems zur Verwaltung von personenbezogenen Daten existiert ein Directory Service, der unter dem Namen X.500
standardisiert worden ist. Es bleibt zu prüfen, ob dieser Standard für die
Personenfindung für Confman geeignet ist.
9.4.2
Wegefindung bei Serverkonferenzen
Der Entwurf zur Wegefindung kann auch mit der derzeitigen ConfmanVersion realisiert werden, wenn die Aufgaben des ConferenceManagers vom
Confman-Client des Konferenzleiters übernommen werden. Die KonferenzServer werden – wie bisher – in einer Liste verwaltet, die vom Benutzer gepflegt werden muß. Alternativ können die Konferenz-Server über den oben
genannten Confman-Naming-Service ermittelt werden, dies erlaubt ein flexibleres Lokalisieren der Server.
Die Konferenz-Server werden um die genannten Funktionen get subnet,
get quality of service und get time erweitert, so daß die beschriebenen
Funktionen zur Ermittlung der Verteilungsstruktur in ähnlicher Weise benutzt werden können.
Kapitel 10
Zusammenfassung
Die Common Object Request Broker Architecture stellt ein leistungsfähiges und zukunstorientiertes Rahmenwerk für die Programmierung verteilter,
objektorientierter Systeme dar. Dabei ist die Zielsetzung, die Interoperabilität, Wiederverwendbarkeit und Portabilität von Software-Komponenten zu
erhöhen. Die Schnittstellen zu Objekten werden in einer einheitlichen, systemunabhängigen Sprache beschrieben, sodaß die Objekte von unterschiedlichen Systemen genutzt werden können, unabhängig von deren Implementierung.
Mit der Common Object Request Broker Architecture werden verschiedene
Dienste angeboten, die deutliche Erleichterungen in der Programmierung von
verteilten Systemen bieten. Dazu gehören ein Namensdienst, der das Auffinden von Objekten anhand ihres Names realisiert sowie ein Persistenzdienst,
der automatische Sichern von Objekten auf externen Speichermedien verwirklicht.
Netzwerkschnittstellen bleiben dem Entwickler verborgen, mit Hilfe weniger
Funktionen können Objekte, die auf beliebigen Netzwerkknoten installiert
sind, referenziert werden. Damit unterscheiden sie sich nicht mehr von lokalen
Objekten.
Durch die einheitliche Schnittstelle können Objekte in beliebige Anwendungen integriert werden, damit wird die Interoperabilität zwischen verschiedenen Anwendungen ermöglicht.
Desweiteren wird damit die Administration von Diensten erleichtert, da Objekte zur Laufzeit auf andere Rechner verschoben werden können, ohne damit
Umstellungen für Benutzer zu verursachen.
107
Zusammenfassung
108
Damit übersteigen die Fähigkeiten der Common Object Request Broker Architecture die herkömmlichen Methoden, wie z. B. Remote Procedure Call
und ToolTalk, bei weitem.
Die CORBA-Implementierung Solaris NEO in der vorliegenden Version wies
Probleme im Zeitverhalten auf, so daß sie zur Implementierung der Netzwerkerweiterung für Confman bei der vorhandenen Hardware des Lehrgebietes
Rechnernetze und Verteilte Systeme z. Z. nicht geeignet ist. Die entstehenden
Wartezeiten sind dem Benutzer nicht zumutbar. Es ist jedoch abzusehen, daß
diese Probleme mit den Weiterentwicklungen sowohl in der Hardware als auch
in der Software an Relevanz verlieren.
Die Vielzahl an Entwicklern und die zunehmende Anzahl an Produkten, die
auf CORBA basieren, läßt auf eine wachsende Verbreitung der Architektur
schließen. Durch eine Eindung CORBA-konformer Object Request Broker
wird es sich als Basisdienst für verteilte Systeme etablieren, der die bestehenden Mechanismen ablöst.
Glossar
BOA
Basic Object Adapter
Schnittstelle zwischen ORB und Objektimplementierung
CDE
Common Desktop Environment
Einheitliche Benutzeroberfläche für verschiedene
UNIX-Betriebssysteme basierend auf Motif
COM
Component Object Model
Microsofts Objektmodell
auch: Common Object Model als gemeinsames Objektmodell zwischen Microsofts OLE und Digitals Object Broker
CORBA
Common Object Request Broker Architecture
Spezifikation des Objektmodells der ORB
DCE
Distributed Computing Environment
Rahmenwerk der OSF für verteilte Systeme
DII
Dynamic Invocation Interface
Schnittstelle für den dynamischen Aufruf
von Objekten zur Laufzeit
DOE
Distributed Objects Everywhere/Environment
Entwicklungsname für Solaris NEO
DSI
Dynamic Skeleton Interface
Dynamische Schnittstelle, die für die Kommunikation
zwischen ORB verschiedener Hersteller benötigt wird
109
Glossar
110
(D)SOM
(Distributed) System Object Model
Objektmodell von IBM
ESIOP
Environment Specific Inter-ORB Protocol
Spezielles Kommunikationsprotokoll für ORBs
verschiedener Hersteller
GIOP
General Inter-ORB Protocol
Allgemeines Protokoll zur Kommunikation zwischen
Object Request Brokern verschiedener Hersteller
IDL
Interface Definition Language
Sprache zur Schnittstellenbeschreibung von CORBA-Objekten
IIOP
Internet Inter-ORB Protocol
Spezielles Protokoll zur Kommunikation zwischen ORBs verschiedener Hersteller basierend auf TCP/IP
NFS
Network File System
Dateisystem mit Zugriff auf Dateien auf entfernten Rechnern
basierend auf RPC
OLE
Object Linking and Embedding
Protokoll zur Kommunikation zwischen Anwendungen unter
Microsoft Windows
OMA
Object Management Architecture
Referenzarchitektur für ein verteiltes, objektorientiertes System
OMG
Object Management Group
Konsortium verschiedener Firmen, die an der Spezifikation
von CORBA arbeiten
ONC
Open Network Computing
Ansatz von Sun Microsystems für einen offenen Netzwerkstandard, aus dem RPC entstanden ist
ORB
Object Request Broker
Kernstück von CORBA
Glossar
111
OSF
Open Software Foundation
Vereinigung, die sich für die Verbreitung freier Software
einsetzt
RFI
Request For Information
Ein allgemeiner Aufruf an die Computer Industrie, Informationen
zu einem Themenbereich an die OMG zu schicken
RFP
Request For Proposal
Ein expliziter Aufruf, zu einem bestimmten Themenbereich
Stellung zu beziehen
RPC
Remote Procedure Call
Realisierung des Prozeduraufrufs auf entfernten Rechnern, der
dem Anwender in der Regel verborgen bleibt
UNO
Universal Networked Objects
Ansatz zur Interoperabilität zwischen ORBs verschiedener Hersteller
Literaturverzeichnis
[Beh95]
Behme, Henning, Im Kaffehaus. iX 7/95.
[Ber94]
Berg, Alexander von, CMS - Conference Management System.
Studienarbeit am Lehrgebiet Rechnernetze und Verteilte Systeme,
September 1994.
[BeL95a]
Berners-Lee, T. [u. a.], Hypertext Transfer Protocol - HTTP/1.0.
Internet-Draft draft-ietf-http-v10-spec-05.ps.
[BeL95b]
Berners-Lee, T. und Connolly, D., Hypertext Markup Language
- 2.0. RFC 1866, November 1995.
[Bey93]
Beyer, Torsten, Objektbörse. iX 2/93.
[Bus93]
Busch, Michael, Kommunikation über alles. iX 5/93.
[Con78]
Constantine, Larry L. und Yourdon, Edward, Structured Design.
Englewood Cliffs, NJ USA, 1978.
[DiL94]
Dier, M. und Lautenbacher, S., Groupware: Technologien für die
lernende Organisation. Computerwoche-Verlag, 1994.
[Dig94]
Digital Equipment Corporation, Common Object Model for Object Broker and OLE.
http://www.dec.com/info/Customer-Update/940208002.txt.html
[Emb92]
Embley, David W. [u.a.], Object-oriented Systems Analysis – A
Model-Driven Approach. Yourdon Press, 1992.
[Fri96]
Fricke, Clemens, Entwicklung eines Online-Conferencing-Systems
für nicht-öffenliche Konferenzen in breitbandigen Netzen. Studienarbeit am Lehrgebiet Rechnernetze und Verteilte Systeme, Mai
1996.
112
Literaturverzeichnis
113
[Fro93]
Fromme, M. [u.a.], Einführung in das Software-Engeneering.
Lehrgebiet Rechnernetze und Verteilte Systeme 1993.
[Fro94]
Fromme, Michael, Multimedia Conferencig – Eine Übersicht zu
Programmen und Systemen. Lehrgebiet Rechnernetze und Verteilte Systeme, Juni 1994.
http://www.rvs.uni-hannover.de/reports/conferen.html
[Fro95]
Fromme, Michael, Multimedia-Konferenzen in der Wissenschaft:
Szenarien, Technologie und Werkzeuge. Studienarbeit am Lehrgebiet Rechnernetze und Verteilte Systeme, Juli 1995.
[Gri94]
Grimm, C. [u.a.], Rechnernetze – Eine Einführung. Lehrgebiet
Rechnernetze und Verteilte Systeme, 1994.
[Grü96]
Grüneberg, L. [u.a.], Entwicklung eines Management-Systems für
multimediale Online-Konferenzen. Lehrgebiet Rechnernetze und
Verteilte Systeme, Universität Hannover, Februar 1996.
[Gul88]
Gulbins, J., UNIX: eine Einführung in Begriffe und Kommandos.
Springer, 3. Auflage 1988.
[HP96]
Hewlett-Packard Company, Distributed Smalltalk.
http://hpcc998.external.hp.com:80/sesd/products/dst/main.html
[IBM95]
IBM, Overview of SOM. AIXpert August 1995.
[IBM96]
IBM, Object Request Broker in the Open Blueprint.
http://www.software.hosting.ibm.com/openblue/ID0F1/COVER.HTM
[Ion96]
IONA Technologies, Ltd., The Orbix Home Page at IONA Technologies.
http://www.iona.com/Orbix/index.html
[Jav96]
JavaSoft, Inc., Frequently Asked Questions - Applet Security. Version 1.0.2, 6. Mai 1996.
http://www.javasoft.com/java.sun.com/sfaq
[Ker90]
Kernighan, B. W. und Ritchie, D. M., Programmieren in C. Deutsche Ausgabe von A. T. Schreiner und E. Janich, Hanser, 2. Ausgabe 1990.
[Kil]
Killermann, Udo, Mechanismen des Remote Procedure Call. Studienarbeit am Regionalen Rechenzentrum für Niedersachsen
[Lem95]
Lemay, Laura, Web Publishing with HTML. Sams Publishing,
Indianapolis, 1995.
Literaturverzeichnis
114
[Mic95]
Microsoft Corporation, OLE Programmer’s Reference, Volume 1,
Guide to Programming. Microsoft 1995.
[Mic96]
Microsoft Corporation, Microsoft Component Object Model
(COM).
http://www.microsoft.com/backoffice/reading/bst11200.htm
[MoZ95]
Mowbray, J. T. and Zahavi, R., the Essential CORBA. Wiley,
1995.
[Net96]
Netscape Communications Corporation, Netscape Navigator
Handbook.
http://home.netscape.com/eng/mozilla/2.01/handbook
[OMG92]
Object Management Group, Object Management Architecture
Guide, Revision 2.0. OMG TC Document 92.11.1.
[OMG93]
Object Management Group, The Common Object Request Broker: Architecture and Specification, Revision 1.2. OMG Document
Number 93.12.43.
[OMG94a] Object Management Group, IDL C++ Language Mapping Specification. OMG Document 94.9.14.
[OMG94b] Object Management Group, Object Models. OMG Document
94.10.5.
[OMG95]
Object Management Group, Corba Products Directory.
ftp://ftp.omg.org/pub/corba products directory.ps
[OMG96a] Object Management Group, OMA Executive Overview.
http://ruby.omg.org/omaov.htm
[OMG96b] Object Management Group, What is CORBA?
http://ruby.omg.org/corba.htm
[Par93]
Parchmann, R., Systemprogrammierung für Ingenieure. Vorlesung an der Universität Hannover, Wintersemester 1992/1993 und
Sommersemester 1993.
[Pra93]
Pralle, H., Rechnernetze und verteilte Systeme: Systemarchitektur und Betrieb. Vorlesung an der Universität Hannover, Wintersemester 1992/1993.
[Pra94a]
Pralle, H., Rechnernetze und Verteilte Systeme: Ausgewählte Kapitel der Rechnerarchitektur. Vorlesung an der Universität Hannover, Wintersemester 1993/1994.
[Pra94b]
Pralle, H., Grundzüge der Informatik I. Vorlesung an der Universität Hannover, Wintersemester 1993/1994.
Literaturverzeichnis
115
[RRZN95] Regionales Rechenzentrum für Niedersachsen, HTML-Kurzbeschreibung. Revision A, November 95.
http://www.rrzn.uni-hannover.de/Umdrucke/NET.ALL.8.html
[Rum94]
Rumbaugh, J. [u.a.], Objektorientiertes Modellieren und Entwerfen. Hanser, 1994.
[Sri95a]
Srinivasan, Raj, RPC: Remote Procedure Call Protocol Specification Version 2. RFC 1831, August 1995.
[Sri95b]
Srinivasan, Raj, XDR: External Data Representation Standard.
RFC 1832, August 1995.
[Sta95]
Stal, Michael, Der Zug rollt weiter. iX 5/95.
[Str92]
Stroustroup, Bjarne, Die C++-Programmiersprache. AddisonWesley, 2. Auflage 1992.
[Sun95a]
Sun Microsystems, The Java Language, A White Paper. Mountain
View, 1995.
[Sun95b]
Sun Microsystems, The Java Language Specification. Mountain
View, 1995.
[Sun95c]
Sun Microsystems, The HotJava Browser: A White Paper. Mountain View, 1994/5.
[Sun91a]
SunSoft, Solaris OpenWindows, Introduction to the ToolTalk Service, A White Paper. Mountain View, 1991.
[SunS91b] SunSoft, ToolTalk 1.0 Programmer’s Guide. Mountain View,
1991.
[SunS94]
SunSoft, Inc, [u.a.], Universal Networked Objects, ORB 2.0 RFP
Submission. OMG TC Document 94.9.32, September 1994.
[SunS95d] SunSoft, SunSoft’s NEO Product Family. Mountain View, September 1995.
[SunS95e] SunSoft, Solaris NEO, Operation Environment Product Overview. Mountain View, September 1995
[SunS95f] SunSoft, Workshop NEO, Development Environment Product
Overview. Mountain View, September 1995
[SunS95g] SunSoft, NEO Performance Tips. Mountain View, September
1995.
[SunS95h] SunSoft, Connectivity Between Windows and SunSoft’s Solaris
NEO. Mountain View, September 1995
Literaturverzeichnis
[SunS95i]
116
SunSoft, NEO Tutorial. Mountain View, Oktober 1995.
[SunS95j] SunSoft, NEO Programming Guide. Mountain View, Oktober
1995
[SunS95k] SunSoft, ONC+ Developer’s Guide. Mountain View, November
1995
[SunS96a] SunSoft, Project NEO.
http://www.sun.com/sunsoft/neo/external/index.html
[SunS96b] SunSoft, The Baton: A Mechanism to Use MT-Unsafe Libraries
in an MT Environment.
http://www.sun.com:80/sunsoft/neo/external/tech supp/papers/95.10.19/html/baton.html
[SunS96c] SunSoft, DOE Objects in your GUI: An Alert Window.
http://www.sun.com:80/sunsoft/neo/external/tech supp/papers/95.10.19/html/alert.html
[SunS96d] SunSoft, Sun Announces Product That Connects Java To Business Applications.
http://www.sun.com:80/sunsoft/neo/external/press rels/joe-pr.html
[SunS96e] SunSoft, Joe – Client/Server Applications for the Web.
http://www.sun.com:80/sunsoft/neo/external/prod specs/JOE Overview.html
[SunS96f] SunSoft, Joe: Developing Client/Server Applications for the Web.
Mountain View, März 1996
[Tan92]
Tanenbaum, Andrew S., Computer-Netzwerke. Wolfram’s Fachverlag, 2. Auflage 1992.
[Wie88]
Wiener, Richard S. und Collins, Lewis J., An Introduction to
Object-Oriented Programming and C++. Addison-Wesley, 1988.
[You92]
Yourdon, Edward, Moderne Strukturierte Analyse. 1992.
Index
Adresbuch, 5, 83
ANDF, 62
application embedding, 23
Attribut, 32
GIOP, 40
HotJava, 62
HTML, 61
HTTP, 61
BOA, 36
Bridge, 39
Half-, 40
In Line-, 39
Request Level-, 39
IDL, 28, 30
IDL-Rumpf, 29
IDL-Skelett, 29
IIOP, 40, 66
in-place activation, 22
Interface, 32, 45, 64
Registrierung, 46
Interface Repository, 28
Callback-Objekte, 56
Callback-Referenzen, 55
CDE, 22
CGI, 61
Client-Server-Modell, 1, 10
COM, 23
Common Facilities, 26
Confman, 3, 4
Container, 22
CORBA, 2, 65, 102
Java, 3, 61
Joe, 3
Kommunikation
objektorientierte, 19
prozesorientierte, 18
Konferenz
geschlossene, 7
Konferenz-Server, 84
Kontextdiagramm, 70
Datenmodell, 71
Datenverzeichnis, 72
Deadlock, 58
DII, 34
DSI, 40
Dynamic Notification, 53
MBone-Tools, 5
Modul, 32
Motif, 57
Ereignistabelle, 70
ESIOP, 40, 66
Nachrichten, 17
Nachrichtenkanal, 18
Name Space, 43, 44
Factory Object, 44
117
Index
118
Naming Context, 43
NEO, 3
Object Services, 26, 37
Objekt, 27
Modell
OMG, 27
ToolTalk, 19
Objektimplementierung, 27
OLE, 3, 22
OLE/COM, 23
OMA, 2, 26
OMG, 2, 25
OMT, 80
Operation, 27, 33
ORB, 2, 27, 65
networked, 39
stand-alone, 39
ORB-Schnittstellen, 28
persistente Daten, 46
Prozes, 18
RPC, 11, 23
DCE, 23
ONC, 13, 21
Rumpf
IDL-, 29
Schnittstellen
ORB-, 28
Server-Objekt
Registrieren, 50
Service, 44
Sitzung, 19
Skelett
IDL-, 29
Stub, 13
Subtyp, 27
Terminkalender, 8
ToolTalk, 2, 17
Typ, 27
Typenwerte, 31
Umgebungsmodell, 70
User Program, 44
User-Started-Server, 44, 53
Vererbung, 33
Workgroup, 44
World-Wide-Web, 60
Herunterladen