• Keine Ergebnisse gefunden

4 RMI / IIOP

N/A
N/A
Protected

Academic year: 2022

Aktie "4 RMI / IIOP"

Copied!
12
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404

Stand: 17. Januar 2020

Client/Server-Programmierung

WS 2019/2020

(2)

Client/Server-Programmierung

WS 2019/2020

4 RMI / IIOP

(3)

4 RMI / IIOP ...

Inhalt

➥ RMI ¨uber IIOP

➥ Farley, Crawford, Flanagan: S. 88ff, Kap. 7

➥ https://docs.oracle.com/javase/8/docs/technotes/guides/

rmi-iiop

(4)

4 RMI / IIOP ...

RMI ¨uber IIOP

➥ Ziel:

Verbindung von Java-RMI Objekten mit nicht-Java (CORBA) Objekten

➥ Vorgehensweise:

RMI nutzt CORBA IIOP-Protokoll zur Kommunikation zwischen Objekten

➥ Damit:

Java-Client kann CORBA Objekt ¨uber RMI nutzen

CORBA-Client kann RMI-Objekt ¨uber CORBA nutzen

(5)

4 RMI / IIOP ...

Vorgehen zur Nutzung von RMI/IIOP

Basisklasse: Remote-Objekte m ¨ussen von

javax.rmi.PortableRemoteObject erben statt von java.rmi.server.UnicastRemoteObject

RMI Compiler: Stubs und Skeletons m ¨ussen ¨uber rmic -iiop erzeugt werden

Option -idl erzeugt zus ¨atzlich OMG IDL Datei

Namensdienst: statt RMI Registry muß JNDI benutzt werden, um auf CORBA-Namensdienst zuzugreifen

Downcast: vom Namensdienst erhaltene Objektreferenzen m ¨ussen ¨uber PortableRemoteObject.narrow() in g ¨ultige Referenzen umgewandelt werden

(6)

4 RMI / IIOP ...

Beispiel:

”Gemischtes“ Hello World

➥ Server mit RMI realisiert

Schnittstelle:

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Hello extends Remote {

String sayHello(String to) throws RemoteException;

}

➥ Client wahlweise mit RMI oder CORBA

(7)

4 RMI / IIOP ...

Server-Code

import javax.naming.*;

import java.rmi.*;

import java.util.*;

import javax.rmi.PortableRemoteObject;

public class HelloServer extends PortableRemoteObject implements Hello {

public HelloServer() throws RemoteException { super();

}

public String sayHello(String to) {

System.out.println("Hello-Server called");

return "Hello World to " + to + "!";

}

(8)

4 RMI / IIOP ...

Server-Code ...

public static void main(String args[]) { try {

// ServerObjekt erzeugen

HelloServer obj = new HelloServer();

// Referenz ¨uber JNDI beim Namensdienst registrieren

Properties props = new Properties();

props.put("java.naming.factory.initial",

"com.sun.jndi.cosnaming.CNCtxFactory");

props.put("java.naming.provider.url",

"iiop://bspc02:5555");

Context ctx = new InitialContext(props);

(9)

4 RMI / IIOP ...

RMI Client

public static void main(String args[]) { try {

// Obektreferenz ¨uber JNDI vom Namensdienst besorgen

Properties props = new Properties();

props.put(Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.cosnaming.CNCtxFactory");

props.put(Context.PROVIDER_URL, "iiop://bspc02:5555");

Context ctx = new InitialContext(props);

Hello obj = (Hello)

PortableRemoteObject.narrow(ctx.lookup("HelloWorld"), Hello.class);

// Remote Methode aufrufen

System.out.println(obj.sayHello("Roland"));

}

catch (Exception e) { ...}

}

(10)

4 RMI / IIOP ...

CORBA Client

public static void main(String args[]) { try{

// ORB erzeugen und initialisieren

ORB orb = ORB.init(args, null);

// Root naming context holen

org.omg.CORBA.Object ns =

orb.resolve_initial_references("NameService");

NamingContextExt ncRef = NamingContextExtHelper.narrow(ns);

// Objektreferenz vom Namensdienst besorgen

NameComponent path[] = ncRef.to_name("HelloWorld");

Hello helloRef = HelloHelper.narrow(ncRef.resolve(path));

(11)

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404

Stand: 17. Januar 2020

Client/Server-Programmierung

WS 2019/2020

15.11.2019

(12)

4 RMI / IIOP ...

Code-Erzeugung mit RMI-Server / CORBA-Client

Client−Seite Server−Seite

javac

Hello.class HelloServer.class HelloServer.java Hello.java

javac HelloClient.java

HelloOperations.java HelloHolder.java

_HelloStub.java

idlj

_Hello_Stub.class HelloHelper.java

Hello.java

rmic −iiop −idl Hello.idl

Referenzen

ÄHNLICHE DOKUMENTE

The communication module in the server selects the dispatcher for the class of the object to be invoked, passing on the remote object’s local reference.. messageType

The communication module in the server selects the dispatcher for the class of the object to be invoked, passing on the remote object’s local reference. messageType

(a) alles Gr¨ onlandeis (b) alle Lehrer der BKS (c) alle Ziffern des 10er-Systems (d) alles Wasser in der Kanne (e) alle Bundesr¨ ate der Schweiz (f) alle Butter im K¨ uhlschrank

Die Ergebnisse zeigen auch einen statistisch signifikanten Einfluss auf die Vickershärte (k = 8; p < 0,006) der Keramikdicke, Keramikart, Lichtaktivierung und Kompo-

170 Lies dir gründlich die Grammatikseite zum Thema simple present durch und beantworte folgende Fragen:?. • Was musst du bei he, she,

171 Lies dir gründlich die Grammatikseite „Die Wortstellung im Satz“a. durch und beantworte

Die erste Messposition (Position 1 in Abbildung 1a) befand sich dabei ¨uber dem Meereis auf der Leeseite der Rinne, um zu untersuchen, inwieweit sich die von der Rinne

The servers provide the RMI registry service as a gateway to the P2P-RMI network, allowing external clients to lookup and export remote objects, effectively becoming