Jens-Peter Redlich CORBA 2.0 Praktische Einführung für C++ und Java Mit einem Geleitwort von Richard Mark Soley ADDISON-WESLEY PUBLISHING COMPANY Bonn Reading, Massachusetts Menlo Park, California New York Don Mills, Ontario Harlow, England Amsterdam Milan Sydney Tokyo Singapore Madrid San Juan Seoul Mexico City Taipei, Taiwan
Inhaltsverzeichnis Geleitwort von Richard Mark Soley Vorwort v vii 1 Einleitung 1 1.1 Zum Kennenlernen: Hello, World" 1 1.2 Nichtblockierende Operationen 15 1.3 Interface-Erweiterungen 17 1.4 Das Modul-Konzept 22 1.5 Ein Taschenrechner für komplexe Zahlen 24 1.6 Fehler auffangen: CORBA-Exceptions 30 1.7 Die Delegate-Technik 39 2 Der Standard im Überblick 45 2.1 Allgemeines 45 2.1.1 Die OMG und ihre Ziele 45 2.1.2 Die OMA und ihre Bestandteile 46 2.1.3 Entstehung und Aktualisierung von Standards 51 2.2 CORBA2.0 52 2.2.1 Überblick über die Architektur 53 2.2.2 IDL und die verschiedenen Programmiersprachen 57 2.2.3 Der Object Adapter (OA) 58 2.2.4 Das Implementation Repository 59 2.2.5 Realisierungsmöglichkeiten für den ORB 59 2.2.6 Aufbau eines Klienten 60 2.2.7 Aufbau einer Objekt-Implementation 61 2.2.8 Interoperabilität 62 2.3 IDL 66 2.3.1 Lexikalische Konventionen 66 2.3.2 Gültigkeit von Bezeichnen! 69 2.3.3 Struktur einer IDL-Definition 71 2.3.4 Module 71 2.3.5 Interfaces 72 2.3.6 Konstanten 75
xii Inhaltsverzeichnis 2.3.7 Definitionen von Typen 76 2.3.8 Exceptions 79 2.3.9 Unterschiede zu C++ 79 2.4 Das Language Mapping für C++ 80 2.4.1 Bezeichner und Namensräume 80 2.4.2 Basistypen (inklusive enum" und const") 81 2.4.3 Zeichenketten ( string") 83 2.4.4 struct", union" und sequence" 85 2.4.5 Arrays 93 2.4.6 Interfaces und Objekt-Referenzen 96 2.4.7 Ausgelagerte Themen 100 3 Wie sich Objekte finden 101 3.1 Objekt gesucht - Namensdienste 101 3.1.1 Was CORBA bietet 101 3.1.2 Überblick über COSS-Naming 103 3.2 Ein einfacher Namensdienst 106 3.2.1 Wiederverwendung von Software 106 3.2.2 Leistungsmerkmale 107 3.2.3 Der Server 109 3.2.4 Ein Klient 115 3.2.5 Was fehlt? 117 3.3 Beispielimplementation für COSS-Naming 119 3.3.1 IDL-Definition 119 3.3.2 Persistente Objekte / Orbix-Loader 122 3.3.3 Der Server 123 3.3.4 resolve_initial_references() 136 3.3.5 Ein Klient, 137 3.3.6 Verteilung und Föderation von Namenskontexten 139 3.4 Factories und Aktivierungsmodi für Server 141 3.4.1 Beispiel für einen per-method Server 146 3.4.2 Integration von Sun-NIS in den Namensdienst 148 3.4.3 Ein Klient zum Anzeigen von Einträgen 151 3.4.4 Deadlocks 153 3.4.5 Factories 155 3.5 Ausblick: Der Trader 158
Inhaltsverzeichnis xiii 4 Interfaces++ 161 4.1 Abstraktionen und Vererbung in IDL 161 4.1.1 Abstraktionen und Polymorphie 162 4.1.2 Kombination von Abstraktionen 164 4.1.3 Mehrere Basisinterfaces 164 4.1.4 Auswirkungen auf die Objekt-Implementation 165 4.1.5 Versteckte Vererbung 167 4.1.6 Element-Relation zwischen Interfaces 169 4.2 Interface-Versionen 170 4.2.1 Worin besteht das Problem? 172 4.2.2 Ein Lösungsvorschlag 173 4.2.3 Ein Beispiel 176 4.2.4 Einarbeitung orthogonaler Operationen 178 4.3 TypeCodes und der IDL-Typ any" 179 4.3.1 Explizite Verwendung von TypeCodes 181 4.3.2 Implizite Verwendung von TypeCodes 185 4.3.3 Beispiel anydemo" 185 4.3.4 Problemfälle 194 4.4 Das Interface Repository (IR) 196 4.4.1 Wofür brauchen wir ein IR? 196 4.4.2 Welche Informationen befinden sich im IR? 197 4.4.3 Wie werden die Einträge im IR identifiziert? 199 4.4.4 Die Interfaces der Objekte im IR 202 4.4.5 Wie findet man eine Interface-Definition? 206 4.4.6 Zusammenarbeit mehrerer IRs 208 4.4.7 Das IR in Orbix 2.0 209 4.4.8 Beispiel 1 212 4.4.9 Beispiel 2 214 4.5 Unbekannte Interfaces benutzen (DU) 218 4.5.1 Die Datentypen NamedValue" und NVList" 220 4.5.2 Requests erzeugen (Kurzform) 223 4.5.3 Requests erzeugen (ausführliche Form) 225 4.5.4 Probleme mit unbekannten Argumenttypen 228 4.5.5 Synchrone Ausführung von Requests 229 4.5.6 Asynchrone Ausführung von Requests 232 4.5.7 Nichtblockierende Nutzeroberflächen 234
xiv Inhaltsverzeichnis 4.6 Unbekannte Interfaces implementieren (DSI) 236 4.6.1 Darstellung eines Requests im Server 237 4.6.2 Bereitstellen der Request-Behandlungsroutine 237 5 CORBA und Java 239 5.1 Kurzer Rundgang durch Java 240 5.1.1 Hello, World" auf stdout 240 5.1.2 Graphische Oberflächen 242 5.1.3 Echo als Applet - EchoApp 245 5.1.4 Kooperierende Applets 247 5.2 Language-Mapping für Java 250 5.2.1 Allgemeines 251 5.2.2 IDL-Basistypen 251 5.2.3 Erzeugte Dateien 252 5.2.4 Konstanten 253 5.2.5 Strukturen 254 5.2.6 Unions 255 5.2.7 Arrays 256 5.2.8 Sequenzen 257 5.2.9 Strings 258 5.2.10 Any 258 5.2.11 Interfaces und Objekt-Referenzen 259 5.2.12 Operationen und Attribute 261 5.2.13 Besonderheiten der anderen Vorschläge 263 5.3 Beispiele 266 5.3.1 Java-Klient für tty-server 266 5.3.2 Graphische Nutzerschnittstelle für Taschenrechner 268 5.3.3 Zugriff auf den Taschenrechner über Applets 273 Anhänge A IDL-Grammatik 279 B Standardisierte Schnittstellen (IDL) 285 C Makefiles für Orbix 2.0 299 D Exceptions in Orbix 2.0 305 Index 307 Literaturverzeichnis 313