RMI over IIOP

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 IDLSprache 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:
Modifizieren Sie ihre bestehende RMI-Anwendung so, dass sie das IIOP-Protokoll benutzt
und damit Interoperabilität mit CORBA-ORBs bietet. Kopieren Sie am besten Ihre alte
RMI-Anwendung, bevor Sie sie modifizerien.
RMI over IIOP macht folgende Änderungen notwendig:
 Ihre KontoImpl-Klasse erweitert anstatt der UnicastRemoteObject die
PortableRemoteObject-Klasse aus dem javax.rmi-Package
 Anstatt des rmiregistry NameServers wird diesmal der CORBA-Kompatible
COSNaming-Server benutzt:
> tnameserv -ORBInitialPort <port>
 Ihr Server muss in der main-Methode einen Kontext für JNDI erstellen:
import javax.naming.InitialContext;
InitialContext INC = new InitialContext();
Das Binden des Remote-Objekts funktioniert mit der rebind-Methode des InitialContextObjekts:
INC.rebind("Konto", KontoImpl_object);
(Dies ersetzt natürlich die „Registry“ aus der letzten Aufgabe)
 Erzeugen Sie auf die gleiche Art einen JNDI-Kontext in der main-Methode des
Clients. InitialContext bietet eine entpsrechende „lookup“-Methode um eine
Referenz von entfernten Objekten zu bekommen.
(Sie verwenden dann nicht mehr die lookup-Methode der Naming-Klasse)
 Nach dem Kompilieren Ihrer Klassen rufen Sie den RMI-Compiler mit der Option iiop auf:
> rmic -iiop KontoImpl
 Der Server wird wie folgt gestartet:
> java -Djava.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory Djava.security.policy=<POLICYFILE> Djava.naming.provider.url=iiop://<SERVER:PORTNR> KontoImpl &
(Beachten Sie: der Server nimmt keinen Port-Parameter mehr entgegen, ändern Sie also
entpsrechend ihre main-Methode)
 Der Client wird analog zum Server gestartet
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 Verison ihrer Anwendung inklusive Quellcode, eine
Prozessliste der laufenden Prozesse wenn das Programm arbeitet und eine vollständige
Prozessliste, wenn alle Programme beendet sind, sowie ein Screenshot der Ausgabe der
Main-Methode der Terminal Klasse 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