html5-img
1 / 30

Java Remote Method Invocation

Java Remote Method Invocation. java.rmi.* java.rmi.registry.* java.rmi.server.*. Local Procedure Calls. #include <...> int myFunc (stuff) int main ( ) { : : val = myFunc (stuff) : } int myFunc (stuff) { : }. Local Procedure Call Limitations.

ugo
Download Presentation

Java Remote Method Invocation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaRemote Method Invocation java.rmi.* java.rmi.registry.* java.rmi.server.*

  2. Local Procedure Calls #include <...> intmyFunc (stuff) int main ( ) { : : val = myFunc(stuff) : } intmyFunc(stuff) { : }

  3. Local Procedure Call Limitations • Function is bound to the executing program • compiled (or linked) into executable code • If function is needed again, it is copied • Any function modifications must be made to all copies

  4. Remove LP Limitations • Remove the static relationship between function and calling program. • Allow function to be dynamically associated with calling program • Windows dynamically linked library • More general approach is to use Remote Procedure Calls • Developed in 1980’s

  5. Remote Procedure Approach • Allow function call to span processes or even machines. • Replace (extend) the function call process. • Develop a standard set of rules (interface) that allows any process to call any function that follows the interface rules • Automatically build interface files needed to connect caller to function • Method_Skel.class • Method_Stub.class

  6. Remote Procedure Issues • Where is the function? • Addressing procedures • Registration procedures • How do we format the data? • Must be readable by all utilized platforms • Common definitions for data (integers, floats, etc.) • Common byte order • Common structure

  7. Remote Method Invocation • Java to Java approach for distributed communication and computation • Establishes Method Registry • Uses existing data management mechanisms to control data flow • Object serialization

  8. RMI Benefits • Supports Distributed processing • Function can be located anywhere... • Supports Shared use of functions • All users use same function, get same responses • Supports Dynamic implementation of function • Independent of calling program • Within limits (interface remains the same)

  9. Serializing Data • Needed when objects must be passed • Serializable objects implement the serializable interface • java.io.serializable • Most common objects implement serializable • Custom objects may need to implement the serializable interface to allow then to be transported between client and server

  10. Remote Method Process • Define remote method (RM) • Define interface between caller and RM • Make data serializable • Build remote method interface • Build remote method (server) • Build calling program (client) • Compile server, client, and interface • Start server, register service • Run calling program (client)

  11. RMI Registry Identification • RMI registry at “well known port” 1099 • Remote Method registers with the registry • Stores data pairs of the form • (Remote Method name): protocol port #

  12. Method Registration and Use 6 Remote method RMI client 5 4 2 Registry 3 1

  13. RMI Example • Implement Fahrenheit to centigrade temperature conversion using a remote method. • Remote method takes a Fahrenheit temperature and returns the equivalent centigrade temperature.

  14. Define Remote Method • centigrade = 5*(Fahrenheit - 32) /9

  15. Define Remote Interface • Input: • temperature in Fahrenheit • Return: • temperature in Celsius • Specify both values as integers • computations are rounded • integers are serializable

  16. Build RM Interface import java.rmi.*; public interface iTemp extends Remote { public int getTemp( int farTemp) throws RemoteException; }

  17. Build Server import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class TempConverter extends UnicastRemoteObject implements iTemp { public TempConverter() throws RemoteException {} public int getTemp( int farTemp) { return ((int)(5*(farTemp -32)/9)); }

  18. Build Server public static void main(String args[]) { try { TempConverter tc = new TempConverter(); String servObjName = "///TempConverter"; Naming.rebind(servObjName, tc); System.err.println("TempConv is up!"); } catch (Exception e) { e.printStackTrace( ); } }//end of main }//end of TempConverter

  19. Build Client import java.rmi.*; import java.io.*; public class TempUser { public static void main(String args[]) { DataInputStream dis = new DataInputStream (System.in); String sIn; int nuTemp; iTemp remoteTemp;

  20. Build Client try { remoteTemp = (iTemp) Naming.lookup ("rmi://vudt-cotter.cstp.umkc.edu/TempConverter"); System.out.print("Enter temperature(Farenheit) "); System.out.flush(); sIn = dis.readLine(); nuTemp = remoteTemp.getTemp(Integer.parseInt(sIn)); System.out.println("That is "+ nuTemp + " degrees centigrade"); } catch (Exception e) { e.printStackTrace(); } } //end of main }// end of TempUser

  21. Original Approach to Compile programs • Compile Server • javac TempConverter.java • Create Remote Method Stubs and clients • rmicTempConverter • Compile Client • (uses TempConverter_Stub.class) • javacTempUser.java

  22. Current Approach to Compile programs • Compile Interface and create archive • javaciTemp.java • jar cvf iTemp.jar iTemp.class • Compile Server • javac TempConverter.java • (uses iTemp.jar) • Compile Client • javacTempUser.java • (uses iTemp.jar)

  23. Register Service / Run Program • Start up RMI registry • rmiregistry • Start up Server • java TempConverter • Start up Client • java TempUser

  24. RMI TempConverter Output Server Side... D:\data\cs423\java\tempRMI>start rmiregistry D:\data\cs423\java\tempRMI>java TempConverter TempConv is up! ^C D:\data\cs423\java\tempRMI> Client Side... D:\data\cs423\java\tempRMI>java TempUser Enter temperature(Farenheit)32 That is 0 degrees centigrade D:\data\cs423\java\tempRMI>

  25. iMath.java import java.rmi.*; java.io.*; public interface iMath extends Remote { public int getSum( Numbers sum) throws RemoteException; public int getProduct( Numbers product) throws RemoteException; public class Numbers implements Serializable { private int num1; private int num2; private int num3; public Numbers() { } public void setN1(int num) { num1 = num; } public void setN2(int num) { num2 = num; } etc.

  26. MathServer.java import java.rmi.*;import java.rmi.registry.*;import java.rmi.server.*; public class MathServer extends UnicastRemoteObject implements iMath { public MathServer() throws RemoteException {} public intgetSum( iMath.Numbers sum) { int n1, n2, n3; : return (nuSum); } public int getProduct( iMath.Numbers product) { int n1, n2, n3; : return (nuProd); }

  27. MathServer.java public static void main(String args[]) { try { MathServer ms = new MathServer(); String servObjName = "///MathServer"; Naming.rebind(servObjName, ms); System.err.println("MathServer is up!"); } catch (Exception e){ e.printStackTrace(); } } }

  28. MathUser.java import java.rmi.*; import java.io.*; public class MathUser { public static void main(String args[]) { BufferedReader dis= new BufferedReader(new InputStreamReader(System.in)); String sIn1, sIn2, sIn3; int add1, add2, add3,answer; iMath remoteAdder; iMath.Numbers nums = new iMath.Numbers(); try { remoteAdder = (iMath) Naming.lookup ("rmi://134.193.128.56/MathServer"); System.out.print("Enter First number (integers) "); System.out.flush(); sIn1 = dis.readLine(); System.out.print("Enter Second number (integers) "); System.out.flush(); sIn2 = dis.readLine();

  29. MathUser.java System.out.print ("Enter Third number (integers) "); System.out.flush(); sIn3 = dis.readLine(); nums.setN1(Integer.parseInt(sIn1)); nums.setN2(Integer.parseInt(sIn2)); nums.setN3(Integer.parseInt(sIn3)); System.out.print("Do you want the Sum or Product (S or P)?"); sIn1 = dis.readLine(); if (sIn1.equals("S")) { answer = remoteAdder.getSum(nums); System.out.println("That sum is " + answer ); } else { answer = remoteAdder.getProduct(nums); System.out.println("That product is " + answer ); } } catch (Exception e) { e.printStackTrace(); } } }

  30. Summary • Java RMI process similar to RPC • RMI Registry acts as Portmapper. Registry is located on serving host. • RMIC acts as remote method communications generator (RPCgen)

More Related