presentation: rmi continued 2 using the registry & callbacks
Post on 30-Dec-2015
24 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
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
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;}
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
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)
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
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
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
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.
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
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
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
top related