corba

Werbung
Client/Server-Systeme
Prof. Dr.-Ing. Wilhelm Spruth
SS 2004
Teil 14
CORBA
cs 1000 ww6
wgs 05-97
Wiederverwendbarkeit von Code
Vorbild: Entwurf/Bau einer Brücke im Bauingenieurwesen
Objekttechnologie ermöglicht Code Blöcke mit fest definierter Funktionalität,
die in Klassen gekapselt werden. Ein Objekt als Instanz einer Klasse stellt sich
dem Entwickler als Black Box mit einer öffentlichen Schnittstelle dar.
Wird nur in einer einzigen Sprache mit identischem Compiler entwickelt ist die
Wiederverwendbarkeit von Klassen am leichtesten erreichbar. Beim Einsatz
mehrerer Programmiersprachen muß die Objektphilosophie der
Programmiersprache beachtet werden. Z.B. unterstützt C++ die
Mehrfachvererbung, Java aber nur die Einfach-vererbung.
Um objektorientierte Bibliotheken mit unterschiedlichen Sprachen und
Compilern zu realisieren, ergeben sich eine Reihe von Problemenbereichen:
• Sprachunabhängigkeit: Smalltalk- und C++-Objekte verstehen einander nicht
• Compilerunabhängigkeit: Objekte zweier Compiler (z.B. Watcom und GNU
C++) können nicht miteinander kommunizieren, weil die Verwaltung interner
Informationen nicht standardisiert ist
• starre Kopplung zwischen Objekten: Wenn sich die Implementierung einer
Klasse ändert, müssen alle Teile, die diese Klasse in irgendeiner Form
nutzen, neu kompiliert werden. Beispiel: C++ Compiler benutzen Konstanten
beim Zugriff auf Daten und Methoden
• Beschränkung auf einen Prozeßraum (Objekte können nicht über
Prozeßgrenzen hinweg kommunizieren)
Zielsetzung: Unterschiedliche objektorientierte Klienten-Implementierungen,
die auf unterschiedlichen Plattformen (z.B. HP-UX, AIX, Solaris, Linux, NT,
OS/400, OS/390) laufen, sollen mit unterschiedlichen objektorientierten ServerImplementierungen (ebenfalls unterschiedliche Plattformen) in Binärform
kompatibel zusammen arbeiten.
Klienten sollen maximal portierbar sein, und ohne -Änderungen auf
Rechnern/Betriebssystemen unterschiedlicher Hersteller lauffähig sein.
Klienten sollen keine Kenntnis benötigen wie ein Objekt auf einem Server
implementiert ist
cs 1107 ww6
wgs 06-98
Anforderung (Request)
Client 1
Objekt 1
Client 2
Objekt 2
Client 3
Objekt 3
Client 4
Objekte
bieten Operationen an, durch deren Aufruf
sie zu bestimmten Aktionen veranlaßt
werden können
Klient
Eine Software-Einheit, die eine Operation
eines Objektes aufruft
css1114 ww6
wgs 06-97
NT
GNU C++
Object
COBOL
Apple
Java
HP-UX
HP C++
SUN
Symatec
AIX
Smalltalk
NT
GNU C++
Object
COBOL
Apple
Java
HP-UX
HP C++
SUN
Symatec
AIX
Smalltalk
ORB
In unterschiedlichen Programmiersprachen entwickelte
binäre Objekte können plattformunabhängig miteinander
kommunizieren.
cs 1032 ww6
wgs 03-00
Object Request Broker
ORB
Ein ORB (Object Request Broker) ist eine Komponente eines
Betriebssystems. Er ermöglicht es, daß Objekte, die in
unterschiedlichen Programmiersprachen entwickelt wurden, in
binärer Form miteinander zusammenarbeiten. Dies kann über
Prozeß- und physische Rechnergrenzen hinweg geschehen.
Hierfür stellt der ORB ein einheitliches Klassenmodell sowie
Standards für die Organisation von Klassen-bibliotheken und die
Kommunikation zwischen Objekten zur Verfügung.
Es existieren mehrere Alternativen einen ORB zu implementieren:
• CORBA
Standard der OMG
• Remote Method Invocation (RMI),
Teil des JDK 1.1 der Fa. SUN
• COM+ / DCOM / Activex / SNA / DotNet
der Fa. Microsoft
In eine ähnliche Richtung geht die Internet orientierte
SOAP / UDDI / WSDL Initiative.
cs1104 ww6
wgs 05-97
DCOM - CORBA Integration
Das Gegenstück zum CORBA ORB ist der Microsoft DCOM ORB. Er
ist CORBA-inkompatibel.
Ziel: Vermittlung von Methodenaufrufen zwischen binären Objekten
Brücke
DCOM
Corba
DCOM - Corba Brücke
z.B. Visigenic VisiBridge
ORB
DCOM
CORBA
Schnittstelle
CIOP
Corba
IIOP
DCE RPC
Transport
css1145 ww6
beliebig
TCP/IP
wgs 06-97
CORBA
Common Object Broker Architecture
Standard der OMG (Open Management Group)
cs 1112 ww6
wgs 06-98
Begriffe
Object Management Group (OMG)
1989 gegründeter, internationaler, nicht profit-orientierter
Zusammenschluß von zunächst 8 (Anfang 1996: Ca. 600)
Softwareentwicklern, Netzbetreibern, Hardwareproduzenten
und kommerziellen Anwendern von Computersystemen (ohne
Microsoft).
Object Management Architecture (OMA)
Von OMG spezifizierte Architektur, die das Zusammenwirken
von Anwendungen verschiedener Hersteller unabhängig von
Betriebssystem, Programmiersprache und Hardware
ermöglichen soll.
Common ORB Architecture (CORBA)
Universelles Kommunikationsmedium für beliebig geartete
Objekte in verteilten heterogenen Systemen, Kernstück der
OMA, 1991 von OMG in Version 1.1 spezifiziert, aktuelle
Version 3.0 (Sommer 1999).
Literatur
R. Orfali, D. Harkey: „Client/Server Programming with Java and
Corba“. John Wiley, 2nd edition, 1998.
cs 1160 ww6
wgs 06-01
CORBA Implementierungen
Verfügbare ORB’s:
DEC
IBM
IONA
HP
SunSoft
Inprise
andere
ObjectBroker
Component Broker
Orbix
ORB Plus
Solaris NEO
Visigenic Object Broker
Unterstützte Sprachen:
C++
Smalltalk
COBOL
Java
ADA
Implementierungsbeispiele und Download Code sind zu
finden unter:
http://www.wifo.uni-mannheim.de/iiop
http://www.cs.wustl.edu/~schmidt/corba.html
cs 1113 ww6
wgs 06-97
Client
Server
Sockets oder
RPC
Sockets oder
RPC
Transport, z.B. TCP
Mit Prozeduren arbeitendes
Client/Server-System
Client
Server
CORBA Schnittstelle
CORBA Schnittstelle
ORB
Sockets oder
RPC
Sockets oder
RPC
Beispiele:
IIOP,
CIOP
Transport, z.B. TCP
Objektorientiertes Client/Server-System
css1117 ww6
wgs 05-97
Klient
Objekt
Klient
Objekt
Stub
Skel
Stub
Skel
ORB Nr. 1
ORB Nr. 2
IIOP
TCP/IP
ORB stellt eine Schnittstelle zwischen Client und Server dar, die
ähnlich der Socket- oder RPC-Schnittstelle arbeitet, aber
• auf einer höheren Ebene arbeitet (und deshalb evtl. Sockets
oder RPC für die eigentliche Kommunikation verwendet)
• objektorientiert arbeitet
• für die Kommunikation das IIOP Protokoll verwendet
(andere)
Klienten und Server Objekte kommunizieren mit ihrem ORB über
Stubs und Skeletons. Sie können transparent
auf dem gleichen oder auf entfernten Rechnern arbeiten
Eine eindeutige Objekt Referenz (IOR) wird dem Objekt bei der
Entstehung zugeordnet. Der Client nimmt die Dienste eines
Objektes in Anspruch, indem er einen Methodenaufruf ausführt. Der
Methodenaufruf enthält:
•
•
•
•
IOR
Methodennamen
Parameter
Kontext (enthält Information über die Position des Aufrufers und
nimmt Fehlermeldungen entgegen)
cs 1161 ww6
wgs 06-98
Wichtige Schnittstellen des ORB zum Client
und zur Objekt-Implementation
Interface
Repository
Client
Implementation
Repository
Objekt-Implementation
IDL
Stubs
IDL
Skeletons
Object
Adapter
ORB-Kern
Standardisierte Schnittstelle (identisch für alle ORBs)
Mehrere, jeweils auf einen Objekttyp spezialisierte
Schnittstellen
Es kann mehrere Object Adapter geben
ORB-spezifische Schnittstelle
IDL Stubs
IDL Skeletons
cs 1129 ww6
Objektspezifische Schnittstellen, werden von IDLCompiler generiert
wgs 05-98
Interface Repository
Bestandteil des ORB, Run-Time verteilte Datenbank.
Enthält Schnittstellen Beschreibungen aller registrierten verteilten Objekte.
Dies schließt Beschreibungen der
Methode
Parameter
der Objekte ein.
Die Schnittstellen Beschreibungen können als Maschinen-lesbare Versionen
der in IDL definierten Schnittstellen betrachtet werden. CORBA bezeichnet dise
Beschreibungen als „Methoden Signaturen“. Beim Aufruf (Invocation) eines
Objektes ermöglicht die Signatur eine Typen Überprüfung
Interface Repositories können lokal verwaltet werden, oder als Department
oder unternehmensweite Ressourcen eingesetzt werden.
Der genaue Aufbau des Interface Repository ist ORB-spezifisch gelöst (wird
nicht von der OMG definiert).
Implementation Repository
Bestandteil des ORB.
Enthält Run-Time Informationen, die der Auffindung eines (anhand einer
Objekt-Referenz identifizierten) Objekts im Netz ermöglichen. Macht damit
Objekt-Lokationen für Clienten transparent.
Enthält Information über die Klassen, die ein Server unterstützt, die aktivierten
Objekte und deren ID´s. Speichert zusätzliche administrative Daten wie Trace
Information, Audit Trails und relevante Daten für die Sicherheit.
Kann auch mehrere Lokationen für ein und dasselbe Objekt (d.h. dieselbe
Referenz) bereitstellen: Etwa zur Lastverteilung auf mehrere Server oder als
Vorkehrung für den Ausfall eines Servers. Für den Client stellen sich dabei
sämtliche Objekt-Implementierungen als ein einziges Objekt dar.
Enthält weiterhin die Interface-Beschreibungen der vorhandenen Objekte. Wird
deshalb auch genutzt, um DII und DSI die erforderlichen Informationen
bereitzustellen.
Der genaue Aufbau des Implementation Repository ist ORB-spezifisch gelöst
(wird nicht von OMG definiert).
cs 1179 ww6
wgs 06-98
Aufbau eines Servers
Server
allgemeine
Behandlungsroutine
Dynamic
Skeleton
(DSI)
Objecte A1, A2, A3
Interface A
Objekte B1, B2
Interface B
Methode A1
Methode A2
Methode A3
Methode B1
Methode B2
Methode B3
Methode B4
private Daten
private Daten
Skeleton für
Interface A
Skeleton für
Interface B
Object
Adapter
(OA)
Request für
unbekanntes
Interface
Request für A
ORB-Kern
Request für B
CORBA unterscheidet zwischen Server und Objekt.
Server beinhaltet typischerweise mehrere Objekte.
Je 1 Skeleton für Objekte mit identischer Interface.
Zuweisung der Requests an Skeletons (bzw. DSI)
erfolgt durch ORB und Object Adapter.
css1134 ww6
wgs 06-97
Objekt
Menge von Daten, die nur über wohldefinierte Operationen
(Methoden) zugänglich sind
Objekt-Klasse (Objekt-Typ)
spezifiziert Operationen und Datenstrukturen für gleichartige Objekte
Typ
Abstrakte Spezifikation der Funktionalität
Klasse
Implementierung dieser Funktionalität
Objekt-Instanz, Objekt-Exemplar
Ausprägung eines Objektes, welches zu einer (vorher
definierten) Klasse gehört
css1103 ww6
wgs 05-97
CORBA Server
Objekt
A
Objekt
B
Objekt
C
Object
X
Objekt
Y
Prozess
Prozess
Skeleton 1
Skeleton 2
Basic Object Adapter , Portable Object Adapter
CORBA Unterscheidet zwischen Server und Objekt
Objekt implementiert Schnittstelle
Server beinhaltet typischerweise mehrfache Objekte
(shared server), z.B. alle von der gleichen Klasse
Der Server wird erstmalig aktiviert, wenn ein Request für
eines seiner Objekte eintrifft. Weitere Requests werden auf
einer „first come, first serve“ Basis abgearbeitet.
Typischerweise 1 Thread pro Objekt.
(Ein „Persistent Server“ ist ein shared Server, der die
ganze Zeit aktiv ist, z.B. für Transaktionsverarbeitung.)
cs 1133 ww6
wgs 06-97
Schnittstellen des ORB zum Client
und zur Objekt-Implementation
Interface
Repository
Implementation
Repository
Client
DII
IDL
Stubs
Objekt-Implementation
ORB
Interface
DSI
IDL
Skeletons
Object
Adapter
ORB-Kern
Standardisierte Schnittstelle (identisch für alle ORBs)
Mehrere, jeweils auf einen Objekttyp spezialisierte
Schnittstellen
Es kann mehrere Object Adapter geben
ORB-spezifische Schnittstelle
DII: Dynamic Invocation Interface
DSI: Dynamic Skeleton Interface
IDL Stubs
IDL Skeletons
cs 1130 ww6
Gehören mit Object
Adapter und ORB-Kern
zur CORBA-Plattform
Objektspezifische Schnittstellen, werden von IDLCompiler generiert
wgs 05-98
IDL (Interface Definition Language
Client
Objekt
Server
Objekt
Steckverbindung
Die Idee ist:
Über ein (binäres) Server Object ist nicht bekannt
wie es implementiert ist
in welcher Sprache es implementiert ist
Nur die Schnittstellen des Server Objektes werden veröffentlicht
Methoden
Parameter
Um die Programmiersprachenunabhängigkeit zu erreichen, wird die
Schnittstellenbeschreibung von der binären (Maschinencode)
Implementierung der Klienten- und Serveranwendung getrennt
Die Beschreibung der Schnittstelen erfolgt in einer einheitlichen
Sprache: IDL . Damit entsteht eine Programmiersprachenunabhängige Class Description. Die „Language Mappings“ der
OMG definieren die Umsetzung
Wenn der Programmierer die Schnittstellenbeschreibung des
Server Objektes kennt, kann er sie benutzen um eine
Klientenanwendung zu schreiben
Die Compilierung der IDL Schnittstellenbeschreibung erzeugt auf
der Klienten- und Serverseite ORB spezifische Skeletons und Stubs
Der Skeleton und Stub Code muß Sprachen-spezifisch sein, um mit
der Klienten - und Serveranwendung in deren Sprache zurecht zu
kommen
cs 1034a ww6
wgs 03-00
IDL Beschreibung
IDL nach
IDL nach
IDL nach
Java
Cobol
C++
Compiler
Compiler
Skeleton
Stub
Skeleton
Stub
andere
Compiler
Skeleton
Stub
Language Mappings:
• Werden für verschiedene Programmiersprachen spezifiziert.
• Legen die den IDL-Konstrukten äquivalenten Konstrukte der
jeweiligen Programmiersprache fest. Dazu gehören:
• Einfache und zusammengesetzte Datentypen, Konstanten,
Objekte,
• Operationsaufrufe incl. Parameterübergabe,
• Setzen und Abfragen von Attributen,
• Auslösen und Behandeln von Exceptions.
• Garantieren die Zugriffsmöglichkeit auf Objekte unabhängig von
der bei der Entwicklung der Client- und Server-Programme
benutzten Programmiersprache.
• Sind zum Teil von OMG standardisiert (für C, C++, COBOL, Ada,
Java und Smalltalk). Weitere Standards sind z.Z. in Arbeit (für
Fortran und PL/1).
cs 1035 ww6
wgs 03-00
IDL
Interface Definition Language
Beschreibt die Schnittstelle, welche von Client-Objekten
aufgerufen wird, und die von einer Objekt-Implementierung
zur Verfügung gestellt wird.
Angelehnt an ANSI C++:
• Preprocessing im C++ - Stil,
• Lexikalische
wörtern),
Regeln
(mit
zusätzlichen
Schlüssel-
• Syntax ist Untermenge der C++ - Syntax (Konstanten-,
Typ-, Operationsdeklarationen).
Aber auch mit Unterschieden zu C++, z.B.:
• Rückkehrtyp
werden,
von
Funktionen
muß
angegeben
• Alle formalen Parameter in Operationsdeklarationen
müssen einen Namen haben,
• ...
css1130 ww6
wgs 06-97
OMG IDL
Erstellung von Client und Objekt-Implementation
mittels IDL-Compiler
IDL-File
ORB-spezifischer
IDL-Compiler
Stub
Code
Skeleton
Code
Client
Code
Obj. Impl.
Code
Compiler, Linker
Client
Object Implementation
Stub
Skeleton
ORB
css1131 ww6
wgs 06-97
Erstellen eines CORBA Programms
1. Definition der Server Schnittstelle unter Benutzung der
Interface Definition Language (IDL)
2. Interface Definition in das Interface Repository binden
3. Idl Definition mit Hilfe des IDL Precompilers übersetzen
4. Code für die Server Implementierung schreiben
5. Server Code kompilieren
6. Run-Time Objekte mit dem Implementation Directory
registrieren
7. Zur Start-up Zeit Objekte auf dem Server instanziieren
8. Code für die Client Implementierung schreiben
9. Client Code übersetzen
10. Run
cs 1135 ww6
wgs 11-98
Klient
Server
clock1 = cpuclock
call increment ( 1000 mal )
clock2 = cpuclock
time = clock2 - clock1
sum = 0
increment (sum)
CORBA ORB
CORBA Beispiel (1)
Implementierung des Beispiels in Java (Klient und Server)
Klient und Server Code werden in einem CORBA Module (einer
Java Package) mit dem Namen „Counter“ zusammengefaßt.
Die Schnittstelle zwischen Klient und Server erhält den Namen
„Count“. Dies ist gleichzeitig die Bezeichnung der Klienten und
Server Klassen der CORBA Module Counter.
Der Name des serverseitigen Objektes ist „MyCount“ .
Orfali, Chapter 4, S. 69
cs 1140 ww6
wgs 04-99
Vorgehensweise
Es sind 4 Dateien zu erstellen:
count.idl
CountClient.java
CountImpl.java
CountServer. java
Sie konstituieren gemeinsam das Corba Module ( = Java Package)
counter
Es werden die folgenden Referenzen benutzt:
count.idl
interface
method
Count
increment
CountImpl.java
lokale Variable
sum
CountServer.java
globaler Objektname
lokale Objektbezeichnung
„MyCount“
count
CountClient.java
Count“
globaler Objektname
lokale Objektbezeichnung
„My
counter
Der IDL Compiler erzeugt aus count.idl sechs Java Programme
(Hilfsdateien, u.a. Stub und Skeleton), welche die Schnittstelle Count
verwenden. Je drei von ihnen werden von CountClient.java bzw. von
CountServer.java und CountImpl.java benutzt. Sie müssen alle
gemeinsam in Klassen übersetzt werden.
cs1175 ww6
wgs 05-01
Interoperable Object Reference
IOR
Zeichenkette, die ein Objekt innerhalb eines verteilten CORBA
Systems eindeutig kennzeichnet.
Vergleich:
Internet
CORBA
134.2.2.102
Object Reference
informatik.uni-tuebingen.de
String (Name)
CORBA ORB´s unterschiedlicher Hersteller übermitteln Object
References nach dem IOR (Interoperable Object Reference)
Standard.
Anwendungen verwenden String Namen. Es ist die Aufgabe eines
Name Servers, String Namen in Object References zu übersetzen.
cs1150 ww6
wgs 05-97
Inter Operable Reference (IOR) Format
TCP/IP
SNA
IPX
• OMG Standard
• IOR´s sind unique (eindeutig).
• IOR ethält u.A. ein Feld für jedes benutzbare Transport
Protokoll.
• Für IIOP (TCP/IP) schließt dies die Internet Adresse, eine
Portnummer und eine intern vom ORB erzeugte und
verwendete Objektidentifikation ein. Die Netzwerk
Adresse bezeichnet die zuletzt bekannte Lokation des
Objekt ORB`s.
Wurde das Objekt zwischenzeitlivh verlagert, verweist der
ursprüngliche ORB auf den neuen ORB mit einer
"location_forward" IIOP Nachricht.
cs 1030z ww6
wgs 05-97
cs 1039 ww6
wgs 05-02
Objekte
Zugriff auf die Objekte
mit Hilfe von
Objekt Referenzen
Objekte
Objekt
Instanz
Objekt
Instanz
Objekt
Implementierung
Objekt
Implementierung
Corba Client
Corba Server
Kernel
Betriebssystem Kernel
IIOP
Corba ORB
Corba ORB
Corba Begriffe
Objekt Referenz : Zeiger auf ein Objekt, das irgendwo im Netzwerk
existiert
Corba Client : Programm, das eine Objekt aufruft
Objekt Implementierung : Programm Code, der das Verhalten des
Objekts definiert
Objekt Instanz : Ausprägung eines bestimmten Objektes
Corba Server : Prozess, der eine oder mehrere Objekt
Implementierungen bereitstellt
cs 1038 ww6
wgs 03-00
OMG CORBA Namensdienst
Mechanismus, mit dem Objekte auf dem ORB andere
Objekte lokalisieren
Ein „Name-Binding“ ist eine Zuordnung Name - Objekt.
Verwendet hierarchische Struktur. Basiert auf
transparenter Kapselung existierender Namensdienste wie
LDAP, X.500, DNS oder Sun NIS.
Bildet den Namen eines Objektes auf eine eindeutige,
maschinenlesbare Objekt Referenz ab.
Es kann mit absoluten Namen oder mit Namen innerhalb
ihres Context gearbeitet werden. spruth, informatik, unituebingen und de könnten Komponenten eines CORBA
Namens sein.
Eine Komponente besteht aus 2 Attributen: identifier, kind.
Das Attribute kind kann eine Beschreibung der
Komponente enthalten, z.B. file-typ.
Einige ORB Herstelller, z.B. Inprise, Orbix, bieten zusätzlich
eigene, proprietäre Namendienste an, die Broadcasts
verwenden und nur innerhalb des gleichen IP Subnetzes
arbeiteten.
cs 1158 ww6
wgs 06-98
Name
Obj.
Reference
.....
.....
4711
.....
.....
MyCount
Corba
Namensdienst
Server
2 Anfrage
MyCount
3 Antwort
MyCount,
Referenz= 4711
1 Registrierung
„MyCount, 4711“
4711
Corba
Klient
4
invoke Methode,
Objekt Referenz
= 4711
Corba
Server
Corba Namensdienst
Corba Object Refererence : Zeiger auf ein Objekt zurLaufzeit
Die vom Programmierer verwendete Repräsentation (Namen) einer
Objekt Referenz ist nicht mit der vom ORB verwendeten
Repräsentation identisch
cs 1185 ww6
wgs 05-01
Client Process
Server Process
OSAgent
CountImpl
sum
increment
„My Count“
„My Count
counter
Proxy Object
count
Object
hat die
Methodenaufrufe
counter.sum
counter.increment
Name Service
CountServer
1. Registrierung
„My Count“, Obj. Ref.
2. Anfrage: „My Count“ ???
3. Antwort: „My Count“, Obj. Ref.
Der interne „state“ des Objektes „My Count“ wird durch 1 Variable
( int sum) dargestellt.
Counter Beispiel
cs1173x ww6
wgs o6-99
IDL (Interface Definition Language
Client
Objekt
Server
Objekt
Steckverbindung
Die Idee ist:
Über ein Server Object ist nicht bekannt
wie es implementiert ist
in welcher Sprache es implementiert ist
interface „Count“
Nur die Schnittstellen des Server Objektes werden veröffentlicht
Methoden “increment()“
Parameter “sum“
Um die Programmiersprachenunabhängigkeit zu erreichen, wird die
Schnittstellenbeschreibung von der binären (Maschinencode)
Implementierung der Klienten- und Serveranwendung getrennt
Die Beschreibung der Schnittstelen erfolgt in einer einheitlichen
Sprache: IDL . Damit entsteht eine Programmiersprachenunabhängige Class Description. Die „Language Mappings“ der
OMG definieren die Umsetzung
Wenn der Programmierer die Schnittstellenbeschreibung des
Server Objektes kennt, kann er sie benutzen um eine
Klientenanwendung zu schreiben
Die Compilierung der IDL Schnittstellenbeschreibung erzeugt auf
der Klienten- und Serverseite ORB spezifische Skeletons und Stubs
Der Skeleton und Stub Code muß Sprachen-spezifisch sein, um mit
der Klienten - und Serveranwendung in deren Sprache zurecht zu
kommen
cs 1037 ww6
wgs 03-00
// Count.idl
module Counter
{
interface Count
{ attribute long sum;
long increment();
};
};
IDL Schnittstellen Definition der Count Schnittstelle
Der IDL Precompiler erzeugt aus der Schnittstellen Definition Java
Programme für
Client Stub
Server Skeleton,
weitere Hilfsprogramme
und lädt die Schnittstelllen Beschreibung in das Interface
Repository.
cs 1142 ww6
wgs 03-99
mögliche
Instanzen von
CountImpl
CountServer
His Count
Your Count
My Count
Count Server Implementierung
Die Server Seite von Count besteht aus 2 Programmen.
CountServer initialisiert ORB, BOA und erzeugt die Count Objekte
(die Instanzen der Klasse Count).
Im vorliegenden Beispiel ist dies nur 1 Objekt mit der Bezeichnung
„My Count“. In der Regel werden mehrere Instanzen erstellt.
CountImpl enthält den Code für das Server Objekt, welches vom
Klienten aufgerufen wird.
cs 1146
wgs 03-99
// CountImpl.java: The Count Implementation
class CountImpl extends Counter._CountImplBase
// „extends“ establishes inheritance from Counter._CountImplBase
{
private int sum;
// Constructor, calls ist super, the CORBA skeleton class
CountImpl(String name)
{ super(name);
System.out.println("Count Object Created");
sum = 0;
}
// get sum
public int sum()
{ return sum;
}
// set sum
public void sum(int val)
{ sum = val;
}
// increment method
public int increment()
{ sum++;
return sum;
}
}
CountImpl
Count Server Implementierung
cs 1143 ww6
wgs 03-99
// CountServer.java: The Count Server main program
class CountServer
{ static public void main(String[] args)
{ try
{ // Initialize the ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,
null);
// Initialize the BOA
org.omg.CORBA.BOA boa = orb.BOA_init();
// Create the Count object
CountImpl count = new CountImpl("My Count");
// Export to the ORB the newly created object
boa.obj_is_ready(count);
// Ready to service requests
boa.impl_is_ready();
}
catch(org.omg.CORBA.SystemException e)
{ System.err.println(e);
}
}
}
CountServer
Count Main Server Programm
Initialisierung des ORB, BOA und des Count Objektes.
Die beiden Befehle CountImpl ... und boa.obj .... erstellen und
exportieren eine einzige Objekt Instanz („count“, „My Count“).
cs 1145
wgs 03-99
// CountClient.java Static Client, VisiBroker for Java
class CountClient
{ public static void main(String args [ ] )
{ try
{ // Initialize the ORB
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,
null);
// Bind to the Count Object
Counter.Count counter = Counter.CountHelper.bind(orb, "My
Count");
// Set sum to initial value of 0
counter.sum((int)0);
// Calculate Start time
long startTime = System.currentTimeMillis( );
// Increment 1000 times
for (int i = 0 ; i < 1000 ; i++ )
{ counter.increment();
}
// Calculate stop time
long stopTime = System.currentTimeMillis( );
//print statistics
System.out.println("Avg Ping = "
+ ((stopTime - startTime)/1000f) + " msecs");
System.out.println("Sum = " + counter.sum( ));
}
// handle exceptions
catch(org.omg.CORBA.SystemException e)
{ System.err.println("System Exception");
System.err.println(e);
}
}
}
Count Client Programm
cs 1144 ww6
wgs 03-99
Schritte zur Programmausführung
1.
2.
Erstellung der Dateien
Count.idl
CountClient.java
CountServer.java
CountImpl.java
idl2java
Count.Idl
Programmieren der
CORBA Anwendung
Aufruf des IDL Compilers
Es werden die
Schnittstellen
Beschreibungen in Java
erzeugt
3.
javac
javac
javac
CountClient.java
CountServer.java
CountImpl.java
compiliert die *.java
Programme, erzeugt
*.class Programme
4.
start
osagent
startet den Name Server
5.
start java CountServer
6.
java
Programm
CountClient
startet den Server
ruft das Klienten
auf.
cs 1147
wgs 03-99
cs 1182 ww6
wgs 06-98
<h1>Count Client Applet</h1>
<hr>
<center>
<APPLET CODE=CountClientApplet.class WIDTH=300 HEIGHT=60
CODEBASE=classes>
<param name=org.omg.CORBA.ORBClass
value=com.visigenic.vbroker.orb.ORB>
</APPLET>
</center>
<hr>
HTML Code für den Count Client Applet Aufruf
cs 1155 ww6
orfali p.88 03-99
Common Object Services (COS)
Common Object Services sind modulare zusätzliche
CORBA System-Dienstleistungen, welche die Funktionalität
des ORB ergänzen. Sie stellen Bausteine für die
Anwendungsentwicklung dar. Es existieren
Spezifikationen der OMG für:
• Naming Service
• Persistence Service
Speicherung von Objekten in relationalen oder
Objekt Datenbanken oder einfachen Dateien
• Concurrency
Lock Manager Dienste für Transaktionen oder
Threads
• Transaction Service
Two-Phase Commit Koordination für flache oder
nested Transactions
sowie weitere Dienste wie Security, Message, Time, Event,
Trader, ....
cs 1135 ww6
wgs 06-97
Persistenz
Persistente Objekte existieren permanent außerhalb des
Gültigkeitsbereichs des Programms, das sie erzeugt hat.
Persistenz wird implementiert, indem der Status (die Attribute)
eines Objekts zwischen den einzelnen Programmausführungen
gespeichert wird. Wenn das Objekt erneut benötigt wird, wird es
aus seiner gespeicherten Form wieder hergestellt. Der
Herstellungsprozeß erzeugt ein neues Objekt, das mit dem
ursprünglichen identisch ist. Das wiederhergestellte Objekt ist zwar
nicht das selbe Objekt, aber sein Status und sein Verhalten sind
identisch.
Das Objektmodell macht zunächst keine Annahmen über die
permanente Speicherung der Objekte. Konzeptuell können Objekte
in einer Objektdatenbank (z.B. POET) gespeichert werden.
In der Praxis werden SQL (oder IMS oder VSAM) Daten als Objekte
gekapselt; der Zugriff erfolgt z.B. über eine JDBC (Java Data Base
Connectivity) Schnittstelle.
Bei der Persistenz werden den gespeicherten Daten alle
Objektattribute (etwa Klassenname, Feldname und ZugriffsModifier) zugeordnet, so daß verhindert wird, daß die Daten
versehentlich mit einem falschen Objekttyp abgelegt werden.
cs1171 ww6
wgs 11-98
Herunterladen