Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
EEC-681/781 Distributed Computing Systems Lecture 5 Wenbing Zhao Department of Electrical and Computer Engineering Cleveland State University [email protected] 2 Outline • Case study: Java RMI – Material taken from http://java.sun.com/developer/onlineTraining/rmi/RMI.html Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 3 Java RMI Architecture • Design goal: to create a Java distributed object model that integrates naturally into the Java programming language and the local object model • The definition of a remote service is coded using a Java interface • The implementation of the remote service is coded in a class • Interfaces define behavior and classes define implementation Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 4 Java RMI Architecture Layers • Stub and Skeleton layer: intercepts method calls made by the client to the interface and redirects these calls to a remote RMI service • Remote reference layer: to interpret and manage references made from clients to the remote service objects • Transport layer: provides basic connectivity, as well as some firewall penetration strategies RMI System Client Program Server Program Stubs & Skeletons Stubs & Skeletons Remote Reference Layer Remote Reference Layer Transport Layer Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 5 Stub and Skeleton Layer • Java RMI follows the Proxy pattern – The stub class plays the role of the proxy – The remote service implementation class plays the role of the RealSubject <<Interface>> Subject Request() RealSubject Proxy Request() Request() Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 6 Remote Reference Layer • Defines and supports the invocation semantics of the RMI connection – This layer provides a RemoteRef object that represents the link to the remote service implementation object – The stub objects use the invoke()method in RemoteRef to forward the method call – The RemoteRef object understands the invocation semantics for remote services Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 7 Transport Layer • The Transport Layer makes network connection between JVMs • Java Remote Method Protocol (JRMP): Java RMI’s wire protocol (proprietary) on top of TCP/IP Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 8 RMI Registry • RMI Registry (rmiregistry): a simple naming service that comes with Java RMI – It runs on each machine that hosts remote service objects, by default on port 1099 – It accepts registration request only from the local RMI servers – It accepts queries for services anywhere Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 9 RMI Registry • To access the remote server from client side: – Query a registry by invoking the lookup()method on the static Naming class – The method lookup()accepts a URL that specifies the server host name and the name of the desired service • rmi://<host_name>[:<name_service_port>]/<service_name> – The method returns a remote reference to the service object Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 10 Steps to Create a Remote Service • First create a local object that implements that service • Next, export that object to Java RMI. When the object is exported, Java RMI creates a listening service that waits for clients to connect and request the service • After exporting, register the object in the Java RMI Registry under a public name Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 11 Using Java RMI • A working Java RMI system is composed of several parts: – – – – – Interface definitions for the remote services Implementations of the remote services Stub and Skeleton files A server to host the remote services An RMI Naming service that allows clients to find the remote services – A class file provider (an HTTP or FTP server) – A client program that needs the remote services Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 12 Steps to Build a System • Design your system • Write and compile Java code for interfaces • Write and compile Java code for implementation classes • Generate Stub and Skeleton class files from the implementation classes • Write Java code for a remote service host program • Develop Java code for Java RMI client program • Install and run Java RMI system Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 13 Service Interface public interface Calculator extends java.rmi.Remote { public long add(long a, long b) throws java.rmi.RemoteException; public long sub(long a, long b) throws java.rmi.RemoteException; public long mul(long a, long b) throws java.rmi.RemoteException; public long div(long a, long b) throws java.rmi.RemoteException; } To compile it: > javac Calculator.java Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 14 Implementation of Remote Service public class CalculatorImpl extends java.rmi.server.UnicastRemoteObject implements Calculator { // Implementations must have an explicit constructor // in order to declare the RemoteException exception public CalculatorImpl() throws java.rmi.RemoteException { super(); } public long add(long a, long b) throws java.rmi.RemoteException { return a + b; } … Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 15 Stubs and Skeletons • To generate the stub and skeleton files, invoke the RMI compiler, rmic • The compiler runs on the remote service implementation class file > rmic CalculatorImpl • After you run rmic you should find the file CalculatorImpl_Stub.class Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 16 Host Server • Remote RMI services must be hosted in a server process import java.rmi.Naming; public class CalculatorServer { public CalculatorServer() { try { Calculator c = new CalculatorImpl(); Naming.rebind("rmi://localhost:1099/CalculatorService", c); } catch (Exception e) { System.out.println("Trouble: " + e); } } public static void main(String args[]) { new CalculatorServer(); } } Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 17 Client import java.rmi.Naming; import java.rmi.RemoteException; import java.net.MalformedURLException; import java.rmi.NotBoundException; public class CalculatorClient { public static void main(String[] args) { try { Calculator c = (Calculator) Naming.lookup( "rmi://localhost/CalculatorService"); System.out.println( c.sub(4, 3) ); System.out.println( c.add(4, 5) ); System.out.println( c.mul(3, 6) ); System.out.println( c.div(9, 3) ); } … Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 18 Running the RMI System • Make sure you change to the directory that contains the classes you have written • Launch a terminal, start Java RMI registry > rmiregistry • Launch another terminal, start the server > java CalculatorServer • Launch the 3rd terminal, start the client > java CalculatorClient Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 19 Parameter Passing in Java RMI • When Java RMI calls involve passing parameters or accepting a return value – How does RMI transfer these between JVMs? – What semantics are used? – Does RMI support pass-by-value or pass-byreference? Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 20 Parameter Passing in Java RMI • Primitive parameters: pass by value – For both input parameter and return type, Java RMI makes a copy of a primitive data type and send it to the destination • Object parameters: pass by value – The object to be passed, together with all the objects it references, are serialized and copied over Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 21 Parameter Passing in Java RMI • Remote object parameters: pass by reference – A client can obtain a reference to a remote object through the Java RMI Registry program – A client can obtain a remote reference as a result of making a remote method call Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao Distributed Garbage Collection in Java RMI • Java takes care of memory management • Distributed garbage collection is needed in Java RMI – Many challenges to do so. Most prominent problem is that a client might quit without notice – Solution: lease based. The resource is granted to a client for certain period of time. It is the client’s responsibility to renew the lease. The resource is reclaimed if lease is not renewed Fall Semester 2008 EEC-681: Distributed Computing Systems Wenbing Zhao 22