350 likes | 399 Views
Learn how to design, implement, and deploy distributed applications using RMI in Java. Understand the concepts of remote interfaces, objects, methods, and dynamic code loading in distributed computing.
E N D
Distributed Computing with Objects RMI/Corba CMSC 432 Shon Vick
Remote Method Invocation • RMI • JAVA-TO-JAVA • Object running on one JVM can invoke methods on an object running on another JVM • RMI provides communication between remote Java programs
Overview • Sever Creates Remote Objects • Server Makes References to Them Accessible • Server Waits on Remote Method Calls • Client get References to Remote Objects • Invokes Methods on Them • Distributed Objects
Distributed Objects • Locate Remote Objects • Register • Pass and Return References • Communicate with Remote Objects (Transparent to Programmer) • Load Bytecode and transmit data over network
Dynamic Code Loading • Download code of an objects class if class not defined in receiver’s virtual machine • RMI passes objects by true type • Change behavior of application dynamically • Compute Example
Remote Interfaces, Objects, and Methods • Distrubed application made up of interfaces and classes • Some implementations reside on remote machines • Objects with methods on remote VM’s are remote objects • Object is remote by implementing remote interface
Remote Interfaces • Extends java.rmi.Remote • Each remote method must declare java.rmi.RemoteException • Remote objects are passed by reference between virtual machines, not a copy
Stubs • Remote reference is a stub • Local representative or proxy • Caller invokes method on stub which carries out method call on remote object • Stub implements the same set of remote interfaces as remote object • Only those methods defined in remote interface available to caller
Steps • Design and Implement Components of Distributed Application • Compile Sources and Generate Stubs and Skeletons • Make Classes Network Accessible • Start the Application
Details • Object becomes remote by implementing a remote interface • java.rmi.Remote • Methods java.rmi.RemoteException in throws clause • Stub is local proxy for remote object. Generated by rmic compiler • Skeleton interfaces object and object manager on Server
Details, contd. • Define Remote Interface: specifies remote methods • Implement Remote Objects: Implement the remote interface • Implement Clients • Put classes in Web accessible directory: remote interfaces, stubs, other download classes • Start registry, start application
Example • Generic Compute Engine • What it computes is not defined when engine is written • Take advantage of central powerful machine • Dynamic
Interface Details • Compute allows jobs to be submitted to the engine • Task defines how the compute engine executes the given task. Passed by value between VM’s • Return value is an Object
Example 16
Implementing a Remote Interface • Declare remote interfaces • Define constructor for Remote object • Provide implementations for remote methods • Create and install security manager • create instance of remote object • register remote object with registry
UnicastRemoteObject • UnicastRemoteObject: Point to point communications with socket transport. Constructor exports object for calls. • RMISecurityManager as restrictive asApplet • Create instance and bind to registry. Instance is of type Compute. Name is hostwhere registry is.
Register • Front-end for binding (registering) and looking up remote object is java.rmi.Naming interface • Remote VM’s can look up objects by name in RMI registry. • Name should inlcude name of host where registry and remote object run, and a name that identifies remote object in registry.
Binding • Bind remote object to registry • URL type format for host and name • Default port is 1099 • rmi::/<host>:<port>/Compute • RMI runtime substitutes reference tostub for remote object reference. Remote object implementations never leave JVM where created. • RMI keeps ComputeEngine running
Stubs • When client invokes remote method, it actually calls a regular method on a local JVM. • This method is encapsulate in a stub class (surrogate) • Stub encodes parameters (marshalling) • Sends information over network to server
Skeleton • Makes sense out of information in packet from stub (Unmarshals) • Passes it to actual object on local JVM • Packages response and sends it back to client • Stubs can be on local machine or loaded across network similar to applet
Marshalling Client Stub Skeleton Server Marshalled Parametersand Return Values MethodInvocation MethodInvocation
UMBC The Server import java.rmi.*; import java.rmi.server.*; import java.net.*; public class HelloServer extends UnicastRemoteObject implements IHello { public HelloServer() throws RemoteException { hiMsg = "Hello, world!"; } public String sayHi() throws RemoteException { return hiMsg; } public static void main( String[ ] args ) { try { Naming.rebind( "hello", new HelloServer() ); } catch( RemoteException e ) { System.err.println( e ); } catch( MalformedURLException e ) { System.err.println( e ); } } private String hiMsg; }
The Client import java.rmi.*; public class HelloClient { public static void main( String[ ] args ) { System.setSecurityManager( new RMISecurityManager() ); try { IHello iface = (IHello) Naming.lookup( "rmi://<host>/hello" ); System.out.println( "Client says " + iface.sayHi() ); } catch( Exception e ) { System.err.println( e ); } } }
Connecting Client to Server javac HelloServer.java HelloClient.java rmic HelloServer Rmiregistry & java –Djava.security.policy=<policyfile> HelloServer & java –Djava.security.policy=<policyfile> HelloClient
A Policy File grant { // Allow everything for now permission java.security.AllPermission; };
Client • Defines task to be done by ComputeEngine
Running the Example • Pi class downloaded to server at runtime • ComputeEngine stub downloaded to client at runtime • Make jar file with compute package (interfaces) • Distribute to developers • Put classes in network accessible directory
Using RMI • RMI uses URL protocols to download code • Classpath should include location of jar filesand source files • Compile source (javac), generate stub (rmic) • Source for the example discussed so far can be found in the Java Tutorial on RMI
Selected References • Advanced Techniques for Java Developers Chapter 7 • http://java.sun.com/docs/books/tutorial/rmi/index.html • Exploring Java, O’Reilly, Niemeyer & Peck • Java RMI Remote Method Invocation, Troy Downing, IDG Books • The RMI example comes from Core Web Programming, Marty Hall, Prentice Hall • http://engronline.ee.memphis.edu/AdvJava/lecture.htm