Download presentation
Presentation is loading. Please wait.
Published byBeryl Goodwin Modified over 9 years ago
1
Presentation: RMI Continued 2 Using The Registry & Callbacks
2
Ingeniørhøjskolen i Århus Slide 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
3
Ingeniørhøjskolen i Århus Slide 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
4
Ingeniørhøjskolen i Århus Slide 4 af 12 Java compiler - javac Server HelloClient.java HelloImpl.java Java compiler - javac Client Hello.java included in generates reads rmic Compiler RMI Client and Server Implementation HelloImpl_Stub.class HelloImpl_Skeleton.class
5
Ingeniørhøjskolen i Århus Slide 5 af 12 Architecture ServerClient Stub Registry Interfaces Skeleton Activation Interfaces RMI Runtime (rmid,rmiregistry) coded manually rmic generated bind lookup
6
Ingeniørhøjskolen i Århus Slide 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
7
Ingeniørhøjskolen i Århus Slide 7 af 12 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; }
8
Ingeniørhøjskolen i Århus Slide 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
9
Ingeniørhøjskolen i Århus Slide 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)
10
Ingeniørhøjskolen i Århus Slide 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
11
Ingeniørhøjskolen i Århus Slide 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
12
Ingeniørhøjskolen i Århus Slide 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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.