presentation: rmi continued 2 using the registry & callbacks

13
Presentation: RMI Continued 2 Using The Registry & Callbacks

Upload: bevis-rowe

Post on 30-Dec-2015

24 views

Category:

Documents


0 download

DESCRIPTION

Presentation: RMI Continued 2 Using The Registry & Callbacks. 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. Architecture. coded manually. Client. Server. - PowerPoint PPT Presentation

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