Download presentation
Presentation is loading. Please wait.
Published byBlaise Douglas Modified over 8 years ago
1
Presentation: RMI Continued 2 Using The Registry & Callbacks
2
Ingeniørhøjskolen i Århus Slide 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
3
Ingeniørhøjskolen i Århus Slide 3 af 17 Architecture ServerClient Stub Registry Interfaces Skeleton Activation Interfaces RMI Runtime (rmid,rmiregistry) coded manually rmic generated bind lookup RMI registry is light-weight version naming service
4
Ingeniørhøjskolen i Århus Slide 4 af 17 Naming in RMI: The RMI Registry package 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; }
5
Ingeniørhøjskolen i Århus Slide 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
6
Ingeniørhøjskolen i Århus Slide 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)
7
Ingeniørhøjskolen i Århus Slide 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
8
Ingeniørhøjskolen i Århus Slide 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/ind ex.html intro to JNDIhttp://java.sun.com/products/jndi /tutorial/getStarted/overview/ind ex.html http://java.sun.com/products/jndi /tutorial/objects/storing/remote.h tml JNDI and RMIhttp://java.sun.com/products/jndi /tutorial/objects/storing/remote.h tml
9
Ingeniørhøjskolen i Århus Slide 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
10
Ingeniørhøjskolen i Århus Slide 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.
11
Ingeniørhøjskolen i Århus Slide 11 af 17 Data Collection & Presentation Server TRS RMI/CORBA Object New Reading DB PSP View Readings Classic Client / Sever model is sufficient for Data Collection & Presentation
12
Ingeniørhøjskolen i Århus Slide 12 af 17 Alarm level surveillance Server TRS New Reading DB PSP View 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
13
Ingeniørhøjskolen i Århus Slide 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
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.