Aufgabe 2b

Werbung
RMI over IIOP
Da es Java RMI over JRMP an Interoperabilität mit anderen Sprachen mangelt,
sollten sich vorher die Java Programmierer von verteilten Anwendungen zwischen
der Benutzung von Java RMI over JRMP und der Benutzung von Java-IDL von
CORBA entscheiden. Die Lösung für diese Einschränkung bringt die als Java RMI
over IIOP bekannte Technologie. Mit RMI over IIOP bietet sich nun die Möglichkeit,
RMI-Objekte in eine CORBA-Umgebung einzubinden. Die Kommunikation erfolgt
dabei anders als mit RMI-JRMP durch den CORBA-ORB.
Als Folge können RMI Objekte das IIOP Protokoll benutzen und mit CORBAObjekten kommunizieren. Zum Beispiel können Komponenten, welche in C++ oder in
anderen von CORBA unterstützten Sprachen geschrieben sind, mit Komponenten,
welche in der Java Umgebung laufen, interagieren.
RMI over IIOP bietet daher den großen Vorteil, remote Interfaces einfach mit der
Programmiersprache Java zu schreiben und diese mit Benutzung der Technologie
von Java und den APIs von Java RMI zu implementieren. Es ist nicht nötig, eine
separate IDL-Sprache zu lernen.
Der Vorteil von RMI over JRMP des Tauschens der serialisierbaren Objekte bleibt
auch in der RMI over IIOP Technologie erhalten.
Die Schritte bei der Realisierung einer verteilten Anwendung sind bei beiden
Techniken gleich. Allerdings sind einige Einschränkungen bei der Programmierung
und Kompilierung zu beachten.
Ihre Aufgabe: Die verteilte Anwendung mit RMI over IIOP
Ziel: Die gleiche Anwendung wie in Teil a) diesmal als eine RMI over IIOP
Anwendung zu schreiben.
Folgende Vorgehensweise wird wieder verlangt:
1. Das Quadrat Interface (Quadrat.java) soll nicht verändert werden.
2. Die Klasse QuadratImpl soll diesmal die PortableRemoteObject-Klasse aus
dem javax.rmi-Package erweitern anstatt der UnicastRemoteObject-Klasse.
3. In der QuadratImpl main()-Methode wird mit folgendem Code ein InitialContext
für JNDI erzeugt:
import javax.naming.InitialContext;
InitialContext INC = new InitialContext();
Für das Binden des Serverobjekts an einen Namen wird nicht mehr die
rebind() Methode der RMI-Registry benutzt, sondern die des JNDI:
INC.rebind("Quadrat", QuadratImpl_Objekt);
Es wird in diesem Fall der Name "Quadrat" mit dem QuadratImpl_Objekt
gebunden.
4. In der Klientenklasse QuadratClient muss auch ein InitialContext für JNDI
erzeugt werden. Mit Hilfe der assoziierten lookup() Methode können sie nun
an die Referenz des entfernten Objekts gelangen.
5. Die Klassen kompilieren und anschließend den RMI-Compiler mit der Option
„–iiop“ auf der Implementierungsklasse aufrufen.
6. Für die Registrierung des entfernten Objekts wird diesmal der CosnamingServer benutzt statt des registry-Servers:
> tnameserv -ORBInitialPort <Portnummer>
7. Das Starten des Servers kann nun wie folgt erfolgen
> java Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory Djava.security.policy=<POLICYFILE>
-Djava.naming.provider.url=iiop://<SERVER:PORTNR> ServerProc &
8. Nun kann der Client analog zum Server (s. oben) ausgeführt werden.
Hinweise:
•
•
Benutzen sie bitte Ports zwischen 2500 und 15000 um nicht die Arbeit ihrer
Kollegen zu stören
Bitte beenden Sie am Ende wieder Ihren gestarteten tnameserv!
Abgabe:
Als Abgabe wird eine funktionierende Version der Aufgaben inklusive Quellcode,
eine Prozessliste der laufenden Prozesse wenn das Programm arbeitet und eine
vollständige Prozessliste, wenn alle Programme beendet sind, erwartet.
Zusätzlich müssen folgende Fragen beantwortet werden:
1. Welche Vorteile gewinnt man durch die Nutzung von RMI over IIOP?
2. Wofür steht JNDI? Wozu dient es?
Herunterladen