| |
CORBA
Ein wenig mehr ins Detail möchte ich nun bei CORBA gehen. CORBA steht für
Common Object Request Broker Architecture und ist ein von der OMG (Object Modelling Group)
gewarteter offener Standard. Die OMG ist ein Konsortium von über 800 Mitgliedern
(die meisten aus der Industrie) unter denen sich nahmhafte Unternehmen wie 3Com,
Canon, Hewlett-Packard, Microsoft, Philips, Sun Microsystems und viele andere
befinden. Die Ziele von CORBA sind plattform- firmen- und
programmiersprachenunabhängiges RPC. Die Offenheit und Unabhängigkeit wird
dadurch erreicht, daß sich das Konsortium nur mit der Spezifikation des Systems
und nicht mit der Implementierung beschäftigt. Die (mehrere tausend Seiten
lange) Spezifikation steht jedem Interessierten frei zur Verfügung.
Wie setzt man CORBA ein
Um CORBA in eigenen Client/Server Anwendungen einzusetzen sind folgende
grundlegende Schritte nötig.
- Spezifikation einer
Schnittstelle : Eine Schnittstelle in
Form von Prozeduraufrufen muss spezifiziert werden. Diese Schnittstelle wird
in einer Schittstellendefinitionssprache namens IDL (Interface Definition
Language) notiert. IDL bietet die Möglichkeit die Grunddatentypen string
(Unicode Texte beliebiger länge), verschiedene numerische Typen (die auf den
meisten Plattformen üblichen Bittiefen als Integer und teilweise auch als
Fliesskommazahlen, teils mit oder ohne Vorzeichen), und boolsche Werte. Ferner
können Enumerationstypen selbst definiert werden. Man gibt dabei eine Liste
von erlaubten Literalen vor (beispielsweise ROT, GRÜN und BLAU als erlaubte
Farben). Es können Aggregationsstrukturen (ähnlich der "struct" in C) bereits
definierter Typen definiert werden. Ferner können noch Fehler für
Prozeduraufrufe definiert werden und nicht zuletzt Objekte als Ansammlung von
Prozeduren und Parametern. Vererbung ist bei Objekten zulässig. Prozeduren
haben eine feste Anzahl typisierter Parameter und einen typisierten
Rückgabewert. Es muss auch spezifiziert werden, welchen Fehler auftreten
können. Parameter werden mit den Zugriffsmodifikatoren "in", "out" und "inout"
versehen. Diese Modifikatoren geben an, ob die Parameter von der Prozedur
gelesen, geschrieben oder beides werden. All diese definitionen werden in
Modulen (mit jeweils eigenen Namensräumen) zusammengefasst. Module können
hierarchisch in Paketen (ebenfalls mit eigenen Namensräumen) liegen.
- Implementierungssprachenabhängige Schnittstellen
generieren :
- Clientseitig : Ein übersetzungswerkzeug welches Teil des
verwendeten CORBA-Frameworks (Beispiele hier sind JACORB für Java, FNORB für
Python, VISIBROKER von Borland u.v.a.) ist, kann nun Methoden in der
Zielsprache erzeugen, welche den Implementierern des Clients zur Verfügung
stehen. Es wird komplett über das zugrunde liegende Protokoll verwendet. Die
hier erzeugten Klassen, Methoden oder Funktionen (was erzeugt wird ist
Implementierungssprachen abhängig) werden "Stubs" genannt und verwenden die
Plattform- und Zielsprachenspezifischen Varianten der im IDL-Interface
definierten Typen und Fehlerbehandlungsmechanismen.
- Serverseitig : Ein
Übersetzungswerkzeug erzeugt Implementierungsschnittstellen und
serverseitige Protokollimplementierungen. Bei den
Implementierungsschnittstellen handelt es sich in Java beispielsweise um
java-"interface"s, in C um ".h" header-Dateien. Die Schnittstellen sind von
den Implementierern des Servers zu implementieren und werden von der
Serverseitigen Protokollimplementierung aufgerufen. Hier ist das
zugrundeliegende Protokoll, die Netzwerkadresse (falls nötig) und sonstige
verbindungsrelevante Daten für den Programmierer völlig transparent.
- Referenzierung :
Jedes CORBA-Objekt erhält bei seiner Instantiierung einen einmaligen
Identifikator, die sog. IOR. Aus diesem Identifikator lassen sich Ort, zu
verwendendes Protokoll und alle nötigen Informationen erzeugen, um eine
funktionierende Kommunikation aufzubauen. Solche IDs werden üblicherweise von
sog. Nameservern verwaltet, bei denen Clients Referenzen auf Serverobjekte
anfordern können. Nameserver implementieren selbst ein standardisiertes
IDL-Interface.
Hier nun ein kleines IDL Beispiel um sich ein Bild von
der Syntax machen zu können.
IDL Beispiel
module HelloWorld {
interface HelloServer {
attribute integer
priceOfService; exception OutOfOrder{ string
explanation} string sayHello( in short
howOften)
raises (OutOfOrder); } }
ProtokolleUm Plattform- und Herstellerunabhängig CORBA einsetzen zu
können, muss das von den verschiedenen CORBA-Implementierungen verwendete
Protokoll Einheitlich sein. Die hier von der OMG spezifizierten Standards
heissen General Inter-ORB Protocol (GIOP) falls sich Client und Server auf
derselben Maschine befinden und Internet Inter-ORB Protocol (IIOP) falls Client
und Server über Netzwerk kommunizieren müssen. IIOP basiert auf GIOP.
|
| |
|
|