Transcript
Page 1: Presentation: RMI Continued 2 Using The Registry & Callbacks

Presentation:RMI Continued 2

Using The Registry & Callbacks

Page 2: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 2 af 12

Goals of this lesson

• After this 1x35 lessons you will be– Introduced to the RMI registry (rmiregistry)

• And how to use it

– Introduced to RMI Callbacks

• Next time Java RMI Activation and RMI IIOP

Page 3: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 3 af 12

Outline

• Group presentation – RMI compared with Web services (SOAP)

• Theory: (35 min.) – Repetition from last time

• The Architecture of Java RMI and the RMI registry

– The concept of Callbacks in Java RMI

• Exercises– Many had trouble last time– Complete this– Make a callback version of HelloWorld

Page 4: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 4 af 12

Java compiler - javac

Server

HelloClient.javaHelloClient.javaHelloImpl.javaHelloImpl.java

Java compiler - javacJava compiler - javac

Client

Hello.javaHello.java

included ingeneratesreads

rmic Compiler

RMI Client and Server Implementation

HelloImpl_Stub.classHelloImpl_Stub.class HelloImpl_Skeleton.classHelloImpl_Skeleton.class

Page 5: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 5 af 12

Architecture

ServerClient

Stub RegistryInterfaces

Skeleton ActivationInterfaces

RMI Runtime (rmid,rmiregistry)

coded manuallycoded manually

rmic generatedrmic generated rmic generatedrmic generated

bindbindlookuplookup

Page 6: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 6 af 12

Naming in RMI: The RMI Registry

• Simplified version of CORBA Naming• No composite names• Security Restriction: Name bindings cannot be

created from remote hosts• There has to be a registry on each host

Page 7: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 7 af 12

Naming in RMI: The RMI Registrypackage java.rmi.registry;

public interface Registry extends java.rmi.Remote { public static final int REGISTRY_PORT = 1099; public java.rmi.Remote lookup(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public void bind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AlreadyBoundException, java.rmi.AccessException; public void rebind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AccessException; public void unbind(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public String[] list() throws java.rmi.RemoteException, java.rmi.AccessException;}

Page 8: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 8 af 12

package examples.hello;

import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements Hello {

public HelloImpl() throws RemoteException { super(); }

public String sayHello() {return "Hello World! ;

} public static void main(String args[]) { // Create and install a security manager //if (System.getSecurityManager() == null) { // System.setSecurityManager(new RMISecurityManager()); //} try { HelloImpl obj = new HelloImpl();

// Bind this object instance to the name "HelloServer" Naming.rebind("rmi://192.168.1.101/HelloServer", obj);

System.out.println("HelloServer bound in registry"); } catch (Exception e) { System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } }

Server object(HelloImpl.java)

Instantiate a new object and register (bind it) in the ”rmiregistry”

Following methods available:bind, rebind, unbind, lookup

Instantiate a new object and register (bind it) in the ”rmiregistry”

Following methods available:bind, rebind, unbind, lookup

Page 9: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 9 af 12

package examples.hello;

import java.rmi.Naming;import java.rmi.RemoteException;

public class HelloClient {

public static void main(String args[]) { try { obj = (Hello)Naming.lookup("rmi://192.168.1.101/HelloServer"); String message = obj.sayHello(); System.out.println(message); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } }

}

”lookup” the HelloServer – and call Method sayHello() on Stub

”lookup” the HelloServer – and call Method sayHello() on Stub

Client object(HelloClient.java)

Page 10: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 10 af 12

Limitations of Naming

• Limitation of Naming in all approaches: Client always has to identify the server by name.

obj = (Hello)Naming.lookup("rmi://192.168.1.101/HelloServer");

• Inappropriate if client just wants to use a service at a certain quality but does not know from who:– Automatic cinema ticketing,– Video on demand,– Electronic commerce.

• Security restriction breaks name location transparency

Page 11: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 11 af 12

Nice feature – bootstrapping the Registry

• As until now, you have been manually starting the RMI Registry, which is a constant source of errors and other inconviances.

• May be solved more elegantly:– LocateRegistry.createRegistry(PORT);

• And you are up and running, ready to bind remote objects

Page 12: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 12 af 12

Callbacks

• Remember PRJ3 / OBJ?• Sometimes Client/Server is not enough• Publish/Subscribe pattern / Observer• CORBA has support for this

– An ORB is always both client and server

• Java RMI does not have support for this• Solution:

– Turn the client object into a remote object


Recommended