Download - Presentation: RMI Continued 2 Using The Registry & Callbacks

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 17

Goals of this lesson

• After this 1x35 lessons you will be– Introduced to the RMI registry (rmiregistry) – 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 17

Architecture

ServerClient

Stub RegistryInterfaces

Skeleton ActivationInterfaces

RMI Runtime (rmid,rmiregistry)

coded manuallycoded manually

rmic generatedrmic generated rmic generatedrmic generated

bindbindlookuplookup

•RMI registry is light-weight version naming service

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

Ingeniørhøjskolen i ÅrhusSlide 4 af 17

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 5: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 5 af 17

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 6: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 6 af 17

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 7: Presentation: RMI Continued 2 Using The Registry & Callbacks

Ingeniørhøjskolen i ÅrhusSlide 7 af 17

Limitations of RMI Registry

• 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

– DNS usage will partly solve this

• No composite names• Security Restriction: Name bindings cannot be

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

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

Ingeniørhøjskolen i ÅrhusSlide 8 af 17

Alternative Registry

• Use JNDI: Java Naming and Directory Interface– A standard API for accessing

naming and directory services (like JDBC to databases)

– Standard i Java: LDAP, RMI Registry, CORBA Naming service

• http://java.sun.com/products/jndi/tutorial/getStarted/overview/index.html intro to JNDI

• http://java.sun.com/products/jndi/tutorial/objects/storing/remote.html JNDI and RMI

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

Ingeniørhøjskolen i ÅrhusSlide 9 af 17

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 inconveniences.

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

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

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

Ingeniørhøjskolen i ÅrhusSlide 10 af 17

Callbacks

• 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- BUT: turn the client object into a remote object

- Web services - No support.

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

Ingeniørhøjskolen i ÅrhusSlide 11 af 17

Data Collection & Presentation

Server

TRS

RMI/CORBA Object

New Reading

DB

PSPView Readings

Classic Client / Sever model is

sufficient for Data Collection & Presentation

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

Ingeniørhøjskolen i ÅrhusSlide 12 af 17

Alarm level surveillance

Server

TRS

New Reading

DB

PSPView Readings

Problem: The client / server pattern breaks down when

we want to notify FROM the server to the client.

Solution: Client polling OR peer-to-peer model -> e.g. using Callbacks

Present Alarm

RMI/CORBA Object

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

Ingeniørhøjskolen i ÅrhusSlide 13 af 17

Issues• Distributed Deadlock

– If client and server single-threaded– Client calls server, server calls client back instantly– Deadlock – both are blocked, waiting for a response– Solution: Do not make single-threaded applications

• Problem: not all OS’s support multithreading• Inconvenience : multithreading introduces new complexities

• Callback Persistence– Server should store registered callbacks on persistent storage in

case of server failure• Callback Failure

– As callback objects are transient, server should employ a “timeout” strategy for callback communication

• Coupling– Callback objects comes at a price of higher coupling