SlideShare a Scribd company logo
core

                                               Webprogramming

                             Remote Method
                               Invocation


1                            © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com




        Agenda
    • Steps to build and RMI application
    • Running and compiling an RMI program
    • Eample: Retrieving a String remotely
    • Example: Performing numerical integration
      remotely
    • Enterprise RMI configuration
    • RMI Applets




2       Remote Method Invocation                                     www.corewebprogramming.com
RMI: Remote Method Invocation
    • Idea
       – Distribute objects across different machines to take
         advantage of hardware and dedicated software
       – Developer builds network service and installs it on
         specified machine
       – User requests an instance of a class using URL syntax
       – User uses object as though it were a regular, local object
              • Network connections happen automatically behind
                the scenes
              • Java “serialization” lets you pass complex data
                structures over the network without writing code to
                parse and reconstruct them


3    Remote Method Invocation                    www.corewebprogramming.com




    RMI Operations
    • Stub Operation
       –   Package identifier of remote object
       –   Package method identifier
       –   Marshall parameters
       –   Send package to server skeleton

    • Skeleton Operation
       –   Unmarshall Parameters
       –   Calls return value or exception
       –   Marshall method return
       –   Send package to client stub

4    Remote Method Invocation                    www.corewebprogramming.com
RMI Details
    1. Starting: Build Four Required Classes
       a.      An interface for the remote object
              •      Used by both the client and the server
       b.      The RMI client
              •      This will look up the object on the remote server, cast it to the
                     type of the interface from Step 1, then use it like a local object.
              •      Note that as long as there is a “live” reference to the remote
                     object, an open network connection is maintained. The
                     connection will be automatically closed when the remote
                     object is garbage collected on the client.
       c.      The object implementation
              •      This object needs to implement the interface of Step a, and will
                     be used by the server
       d.      The RMI server
              •      This will create an instance of the object from Step c and
                     register it with a particular URL

5    Remote Method Invocation                                www.corewebprogramming.com




    RMI Details, cont.
    2. Compile and Run the System
       a.      Compile client and server.
              •      Compiles the remote object interface and implementation
                     automatically
       b.      Generate the client stub and the server skeleton
              •      Use the rmic compiler on the remote object implementation
                     for this.
                     – The client system will need the client class, the interface
                          class, and the client stub class
                     – If the client is an applet, these three classes must be
                          available from the applet’s home machine
                     – The server system will need the server class, the remote
                          object interface and implementation, and the server
                          skeleton class




6    Remote Method Invocation                                www.corewebprogramming.com
RMI Details, cont.
    2. Compile and Run the System, cont.
       c.      Start the RMI registry
              •      This only needs to be done once, not for each remote object
              •      The current version of RMI requires this registry to be running
                     on the same system as server
       d.      Start the server
              •      This step must be on the same machine as the registry of
                     step c
       e.      Start the client
              •      This step can be done on an arbitrary machine




7    Remote Method Invocation                              www.corewebprogramming.com




    A Very Simple RMI Example:
    The Four Required Classes
    1. The Interface for the Remote Object
       – The interface should extend java.rmi.Remote, and
         all its methods should throw
         java.rmi.RemoteException

       import java.rmi.*;

       /**     The RMI client will use this interface directly.
        *      The RMI server will make a real remote object that
        *      implements this, then register an instance of it
        *      with some URL.
        */

       public interface Rem extends Remote {
         public String getMessage() throws RemoteException;
       }


8    Remote Method Invocation                              www.corewebprogramming.com
Simple Example,
         Required Classes, cont.
     2. The RMI Client
           –      Look up the object from the host using Naming.lookup, cast it
                  to the appropriate type, then use it like a local object
     import java.rmi.*; // For Naming, RemoteException, etc.
     import java.net.*; // For MalformedURLException
     import java.io.*; // For Serializable interface

     public class RemClient {
       public static void main(String[] args) {
         try {
             String host = (args.length > 0) ? args[0] : "localhost";
             Rem remObject = (Rem)Naming.lookup("rmi://" + host + "/Rem");
             System.out.println(remObject.getMessage());
         } catch(RemoteException re) {
             System.out.println("RemoteException: " + re);
         } catch(NotBoundException nbe) {
             System.out.println("NotBoundException: " + nbe);
         } catch(MalformedURLException mfe) {
             System.out.println("MalformedURLException: " + mfe);
         }
       }
9                                                    www.corewebprogramming.com
     } Remote Method Invocation




         Simple Example,
         Required Classes, cont.
     3. The Remote Object Implementation
           – This class must extend UnicastRemoteObject and
             implement the remote object interface defined earlier
           – The constructor should throw RemoteException

     import java.rmi.*;
     import java.rmi.server.UnicastRemoteObject;

     public class RemImpl extends UnicastRemoteObject
                          implements Rem {
       public RemImpl() throws RemoteException {}

         public String getMessage() throws RemoteException {
           return("Here is a remote message.");
         }
     }

10       Remote Method Invocation                       www.corewebprogramming.com
Simple Example,
      Required Classes, cont.
     4. The RMI Server
         –      The server builds an object and register it with a particular URL
         –      Use Naming.rebind (replace any previous bindings) or
                Naming.bind (throw AlreadyBoundException if a previous
                binding exists)

     import java.rmi.*;
     import java.net.*;

     public class RemServer {
       public static void main(String[] args) {
          try {
              RemImpl localObject = new RemImpl();
              Naming.rebind("rmi:///Rem", localObject);
          } catch(RemoteException re) {
              System.out.println("RemoteException: " + re);
          } catch(MalformedURLException mfe) {
              System.out.println("MalformedURLException: " + mfe);
          }
       }
     }
11      Remote Method Invocation                      www.corewebprogramming.com




      Simple Example: Compiling and
      Running the System
     1. Compile the Client and the Server
                Prompt> javac RemClient.java

         –      This compiles the Rem interface automatically
                Prompt> javac RemServer.java

         –      This compiles the RemImpl object implementation automatically
     2. Generate the Client Stub and Server Skeleton
                Prompt> rmic RemImpl

         –      This builds RemImpl_Stub.class and
                RemImpl_Skeleton.class
         –      The client machine needs Rem.class, RemClient.class,
                and RemImpl_Stub.class
         –      The server machine needs Rem.class, RemImpl.class,
                RemServer.class, and RemImpl_Skeleton.class
12     Remote Method Invocation                           www.corewebprogramming.com
Simple Example: Compiling and
      Running the System, cont.
     3. Start the RMI Registry
                          Server> rmiregistry

            –       On Unix systems you would probably add “&” to put the registry
                    process in the background
            –       You can also specify a port number; if omitted, port 1099 is used
     4. Start the Server
                          Server> java RemServer

            –       Again, on Unix systems you would probably add “&” to put the
                    process in the background
     5. Start the Client
                   Client> java RemClient hostname
                   Here is a remote message.
13        Remote Method Invocation                             www.corewebprogramming.com




      A Better RMI Example,
      Numerical Integration
     1.       Simple Iterative Program
              to Calculate Sums:


     2.       Use to Approximate
              Numeric Integrals of the Form:


     3.       MidPoint Rule:



     4.       Motivation for RMI
            –       Since smaller rectangles typically give better results, this can often
                    be very cpu-intensive
            –       RMI can make it available on a fast floating-point box
14        Remote Method Invocation                             www.corewebprogramming.com
Numerical Integration,
         Example, cont.
     public class Integral {
       /** Returns the sum of f(x) from x=start to x=stop, where the function f
        * is defined by the evaluate method of the Evaluatable object.
        */

         public static double sum(double start, double stop,
                                  double stepSize,
                                  Evaluatable evalObj) {
           double sum = 0.0, current = start;
           while (current <= stop) {
             sum += evalObj.evaluate(current);
             current += stepSize;
           }
           return(sum);
         }

         public static double integrate(double start, double stop,
                                        int numSteps,
                                        Evaluatable evalObj) {
           double stepSize = (stop - start) / (double)numSteps;
           start = start + stepSize / 2.0;
           return(stepSize * sum(start, stop, stepSize, evalObj));
         }
     }


15       Remote Method Invocation                          www.corewebprogramming.com




         Numerical Integration,
         Example, cont.
     /** An interface for evaluating functions y = f(x) at a specific
      * value. Both x and y are double-precision floating-point
      * numbers.
      */

     public interface Evaluatable {
       public double evaluate(double value);
     }




16       Remote Method Invocation                          www.corewebprogramming.com
Integration Example:
      Four Required Classes
     1. The RemoteIntegral Interface
          •       The interface shared by the client and server

     import java.rmi.*;

     public interface RemoteIntegral extends Remote {

       public double sum(double start, double stop, double stepSize,
                         Evaluatable evalObj)
         throws RemoteException;

       public double integrate(double start, double stop,
                               int numSteps, Evaluatable evalObj)
         throws RemoteException;




17      Remote Method Invocation                            www.corewebprogramming.com




      Integration Example:
      Four Required Classes, cont.
     2. The Remote Integral Client
          •       Sends the RemoteIntegral an Evaluatable to integrate
     public class RemoteIntegralClient {
       public static void main(String[] args) {
         try {
            String host = (args.length > 0) ? args[0] : "localhost";
            RemoteIntegral remoteIntegral =
               (RemoteIntegral)Naming.lookup("rmi://" + host + "/RemoteIntegral");
           for(int steps=10; steps<=10000; steps*=10) {
               System.out.println("Approximated with " + steps + " steps:" +
                    "n Integral from 0 to pi of sin(x)=" +
                    remoteIntegral.integrate(0.0, Math.PI, steps, new Sin()));
            }
            System.out.println("'Correct' answer using Math library:" +
                                  "n Integral from 0 to pi of sin(x)=" +
                                  (-Math.cos(Math.PI) - -Math.cos(0.0)));
         } catch(RemoteException re) {
            System.out.println("RemoteException: " + re);
         } catch(NotBoundException nbe) {
            System.out.println("NotBoundException: " + nbe);
         } catch(MalformedURLException mfe) {
            System.out.println("MalformedURLException: " + mfe);
         }
       }
18   } Remote Method Invocation                               www.corewebprogramming.com
Integration Example:
         Four Required Classes, cont.
     2. The Remote Integral Client, cont.
           •       Evaluatable Sin function
     import java.io.Serializable;

     class Sin implements Evaluatable, Serializable {
       public double evaluate(double val) {
         return(Math.sin(val));
       }

         public String toString() {
           return("Sin");
         }
     }




19       Remote Method Invocation                          www.corewebprogramming.com




         Integration Example:
         Four Required Classes, cont.
     3. The Remote Integral Implementation
           •       Remote object that calculates the integral value
     import java.rmi.*;
     import java.rmi.server.UnicastRemoteObject;

     public class RemoteIntegralImpl extends UnicastRemoteObject
                                     implements RemoteIntegral {

         public RemoteIntegralImpl() throws RemoteException {}

         public double sum(double start, double stop, double stepSize,
                           Evaluatable evalObj) {
           return(Integral.sum(start, stop, stepSize, evalObj));
         }


         public double integrate(double start, double stop, int numSteps,
                                 Evaluatable evalObj) {
           return(Integral.integrate(start, stop, numSteps, evalObj));
         }
     }                                                     www.corewebprogramming.com
20       Remote Method Invocation
Integration Example:
      Four Required Classes, cont.
     4. The Remote Integral Server
         •       Creates the RemoteIntegral and registers it with
                 the rmi registry
     import java.rmi.*;
     import java.net.*;

     public class RemoteIntegralServer {
       public static void main(String[] args) {
         try {
           RemoteIntegralImpl integral = new RemoteIntegralImpl();
           Naming.rebind("rmi:///RemoteIntegral", integral);
         } catch(RemoteException re) {
           System.out.println("RemoteException: " + re);
         } catch(MalformedURLException mfe) {
           System.out.println("MalformedURLException: " + mfe);
         }
       }
     }


21     Remote Method Invocation                          www.corewebprogramming.com




      Integration Example: Compiling
      and Running the System
     1. Compile the Client and the Server
                Prompt> javac RemoteIntegralClient.java
                Prompt> javac RemoteIntegralServer.java

     2. Generate the Client Stub and Server Skeleton
                Prompt> rmic –v1.2 RemoteIntegralImpl

         –      Client requires: RemoteIntegral.class,
                RemoteIntegralClient.class and
                RemoteIntegralImpl_Stub.class
         –      Server requires: RemoteIntegral.class,
                RemoteIntegralImpl.class, and
                RemoteIntegralServer.class
         –      If the server and client are both running JDK 1.1, use the -v1.1
                switch to produce the RMI 1.1 skeleton stub,
                RemoteIntegralImpl_Skeleton, required by the server
22     Remote Method Invocation                          www.corewebprogramming.com
Integral Example: Compiling
         and Running the System, cont.
     3. Start the RMI Registry
            Prompt> rmiregistry

     4. Start the Server
             Prompt> java RemoteIntegralServer

     5. Start the Client
           Prompt> java RemoteIntegralClient
           Approximated with 10 steps:
            Integral from 0 to pi of sin(x)=2.0082484079079745
           Approximated with 100 steps:
             Integral from 0 to pi of sin(x)=2.0000822490709877
           Approximated with 1000 steps:
             Integral from 0 to pi of sin(x)=2.0000008224672983
           Approximated with 10000 steps:
             Integral from 0 to pi of sin(x)=2.00000000822436
               ...


23       Remote Method Invocation                www.corewebprogramming.com




         Enterprise RMI Configuration
     •       Stub files need to be placed on a HTTP
             server for downloading
           – In Java 2, the RMI 1.2 protocol does not require the
             skeleton
     •       Client must install an RMISecurityManager
             to load the RMI classes remotely
             System.setSecurityManager(new RMISecurityManager());


     •       Client requires a policy file to connect to
             registry and HTTP server


24       Remote Method Invocation                www.corewebprogramming.com
Policy File for Client
     grant {
        // rmihost - RMI registry and the server
        // webhost - HTTP server for stub classes
        permission java.net.SocketPermission
          "rmihost:1024-65535", "connect";
        permission java.net.SocketPermission
          "webhost:80", "connect";
     };

         – Need to grant permission to ports 1024-65535 on the server
                • The server communicates with the rmiregistry (and client)
                  on a randomly selected source port
         – Alternatively, can set policies in java.policy located in
           JAVA_HOME/lib/security/


25     Remote Method Invocation                        www.corewebprogramming.com




      Enterprise RMI,
      Remote Integral, Example
     public class RemoteIntegralClient2 {

          public static void main(String[] args) {
         try {
             System.setSecurityManager(new RMISecurityManager());
             String host = (args.length > 0) ? args[0] : "localhost";
             RemoteIntegral remoteIntegral =
                (RemoteIntegral)Naming.lookup("rmi://" + host +
                                                "/RemoteIntegral");
             for(int steps=10; steps<=10000; steps*=10) {
                System.out.println
                    ("Approximated with " + steps + " steps:" +
                    "n Integral from 0 to pi of sin(x)=" +
                    remoteIntegral.integrate(0.0, Math.PI,
                                             steps, new Sin()));
             }
             ...
         } catch(RemoteException re) {
             System.out.println("RemoteException: " + re);
         }
          ...
26     }
       Remote Method Invocation                         www.corewebprogramming.com
Enterprise Example: Compiling
      and Running the System
     1. Compile the Client and the Server
                Prompt> javac RemoteIntegralClient2.java
                Prompt> javac RemeteIntegralServer.java
     2. Generate the Client Stub and Server Skeleton
                Prompt> rmic –v1.2 RemoteIntegralImpl
     3. Place the files on the correct machines




27     Remote Method Invocation                         www.corewebprogramming.com




      Enterprise Example: Compiling
      and Running the System, cont.
     4. Start the HTTP Server
         •       Place RemoteIntegral_Stub.class,
                 RemoteIntegeral.class, and
                 Evaluatable.class on an HTTP server
         •       Verify that you can access the files through a browser
     5. Start the RMI Registry
                Server> /somedirectory/rmiregistry
         •       Make sure that none of the class files are in the directory in
                 which you started the registry or available through the
                 classpath
     6. Start the Server
     Server> java -Djava.rmi.server.codebase=http://webhost/rmi/
                  RemoteIntegralServer
         –       Server must be started on same host as rmiregistry

28     Remote Method Invocation                         www.corewebprogramming.com
Enterprise Example: Compiling
     and Running the System, cont.
     7. Start the Client
      Client> java -Djava.security.policy=rmiclient.policy
                   RemoteIntegralClient2 rmihost

      Approximated with 10 steps:
       Integral from 0 to pi of sin(x)=2.0082484079079745
      Approximated with 100 steps:
        Integral from 0 to pi of sin(x)=2.0000822490709877
        ...

        –       The rmihost is where server in which the rmiregistry
                was started



29    Remote Method Invocation                    www.corewebprogramming.com




     An RMI Applet
     • Applet does not require a RMI Security
       Manager
     • Applet can only access server in which
       class files were loaded
        – RMI Registry and remote object server must be the same
          HTTP host in which the applet was loaded
     • RMI 1.1 stub protocol not properly
       supported in IE
     • RMI 1.2 stub protocol require Java Plug-In
       or Netscape 6


30    Remote Method Invocation                    www.corewebprogramming.com
RMI Applet, Example
     ...
     import javax.swing.*;

     public class RemoteIntegralApplet extends JApplet
                                       implements ActionListener {
       private Evaluatable[] shapes;
       private RemoteIntegral remoteIntegral;
       private JLabel result;
       private JTextField startInput, stopInput, stepInput;
       private JComboBox combo;

         public void init() {
           String host = getCodeBase().getHost();
           try {
             remoteIntegral =
               (RemoteIntegral)Naming.lookup("rmi://" + host +
                                             "/RemoteIntegral");
           } catch(RemoteException re) {
             reportError("RemoteException: " + re);
           }
           ...

31       Remote Method Invocation                   www.corewebprogramming.com




         RMI Applet, Example
         ...

         public void actionPerformed(ActionEvent event) {
           try {
             int steps = Integer.parseInt(stepInput.getText());
             double start = Double.parseDouble(startInput.getText());
             double stop = Double.parseDouble(stopInput.getText());
             showStatus("Calculating ...");
             Evaluatable shape = (Evaluatable)combo.getSelectedItem();
             double area = remoteIntegral.integrate(start, stop,
                                                    steps, shape);
             result.setText(Double.toString(area));
             showStatus("");
           } catch(NumberFormatException nfe) {
             reportError("Bad input: " + nfe);
           } catch(RemoteException re) {
             reportError("RemoteException: " + re);
           }
         }
     }
32       Remote Method Invocation                   www.corewebprogramming.com
RMI Applet, Result




                                 Applet that communicates to a
                                 remote object through RMI in Netscape 6




33    Remote Method Invocation                                      www.corewebprogramming.com




     Summary
     • RMI is a pure Java-based protocol for
       communicating with remote objects
     • Register (bind) and look-up remote objects in a
       registry
     • Java 2 no longer requires the skeleton class
       needed with the RMI 1.1 protocol
     • Enterprise RMI configuration requires a RMI
       Security Manager and client policy file for
       permissions




34    Remote Method Invocation                                      www.corewebprogramming.com
core

                       Webprogramming


              Questions?


35   © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com

More Related Content

PPT
RMI
Aravind Nair
 
PPTX
Java RMI(Remote Method Invocation)
Nilesh Valva
 
PPTX
Java RMI
Prajakta Nimje
 
PDF
Remote Method Invocation in JAVA
Jalpesh Vasa
 
PPTX
Rmi
Jafar Nesargi
 
PPT
Java remote method invocation
Van Dawn
 
PPTX
Java RMI Presentation
Masud Rahman
 
PPT
A Short Java RMI Tutorial
Guo Albert
 
Java RMI(Remote Method Invocation)
Nilesh Valva
 
Java RMI
Prajakta Nimje
 
Remote Method Invocation in JAVA
Jalpesh Vasa
 
Java remote method invocation
Van Dawn
 
Java RMI Presentation
Masud Rahman
 
A Short Java RMI Tutorial
Guo Albert
 

What's hot (20)

PPS
Java rmi
kamal kotecha
 
PPSX
Java rmi
Tanmoy Barman
 
PPTX
Rmi
Vijay Kiran
 
PDF
Rmi
vantinhkhuc
 
PPTX
DS
Verma Mukesh
 
PPTX
Rmi architecture
Maulik Desai
 
PPTX
Remote Method Invocation
Sabiha M
 
PPTX
Remote method invocatiom
sakthibalabalamuruga
 
PPTX
Network programming in java - PPT
kamal kotecha
 
PDF
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
bobmcwhirter
 
PDF
TorqueBox for Rubyists
bobmcwhirter
 
KEY
The use of Symfony2 @ Overblog
Xavier Hausherr
 
KEY
Devignition 2011
tobiascrawley
 
DOCX
remote method invocation
Arun Nair
 
PDF
Complex Made Simple: Sleep Better with TorqueBox
bobmcwhirter
 
PDF
TorqueBox at DC:JBUG - November 2011
bobmcwhirter
 
PDF
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
Bruno Oliveira
 
PPT
Remote invocation
ishapadhy
 
PDF
Aspdotnet
Adil Jafri
 
PPT
iPhone development from a Java perspective (Jazoon '09)
Netcetera
 
Java rmi
kamal kotecha
 
Java rmi
Tanmoy Barman
 
Rmi architecture
Maulik Desai
 
Remote Method Invocation
Sabiha M
 
Remote method invocatiom
sakthibalabalamuruga
 
Network programming in java - PPT
kamal kotecha
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
bobmcwhirter
 
TorqueBox for Rubyists
bobmcwhirter
 
The use of Symfony2 @ Overblog
Xavier Hausherr
 
Devignition 2011
tobiascrawley
 
remote method invocation
Arun Nair
 
Complex Made Simple: Sleep Better with TorqueBox
bobmcwhirter
 
TorqueBox at DC:JBUG - November 2011
bobmcwhirter
 
TorqueBox - Ultrapassando a fronteira entre Java e Ruby
Bruno Oliveira
 
Remote invocation
ishapadhy
 
Aspdotnet
Adil Jafri
 
iPhone development from a Java perspective (Jazoon '09)
Netcetera
 
Ad

Viewers also liked (13)

PPT
Dc 11 Brucepotter
Object-Frontier Software Pvt. Ltd
 
PPTX
Emrah KAHRAMAN - Java RMI
Emrah Kahraman
 
PPTX
Java - Remote method invocation
Riccardo Cardin
 
DOC
Hema_Anand
Hema Anand
 
PPT
Ieee 802.11overview
Object-Frontier Software Pvt. Ltd
 
PPT
Java RMI
Sunil OS
 
PPT
Lecture 14
Joe Christensen
 
PPTX
Remote method invocation
Dew Shishir
 
Emrah KAHRAMAN - Java RMI
Emrah Kahraman
 
Java - Remote method invocation
Riccardo Cardin
 
Hema_Anand
Hema Anand
 
Java RMI
Sunil OS
 
Lecture 14
Joe Christensen
 
Remote method invocation
Dew Shishir
 
Ad

Similar to Rmi (20)

PDF
17rmi
Adil Jafri
 
PPTX
Remote method invocation
Veni7
 
PPTX
Remote Method Invocation (Java RMI)
Sonali Parab
 
PDF
Remote Method Invocation, Advanced programming
Gera Paulos
 
PDF
Java rmi
Fazlur Rahman
 
DOCX
Remote Method Invocation
Sonali Parab
 
DOCX
ADB Lab Manual.docx
SaiKumarPrajapathi
 
PDF
Remote Method Invocation
elliando dias
 
PDF
Remote Method Invocation
ashishspace
 
PDF
Module 3 remote method invocation-2
Ankit Dubey
 
PPTX
Introduction To Rmi
SwarupKulkarni
 
PPT
Rmi
phanleson
 
PPT
Rmi
leminhvuong
 
PDF
javarmi
Arjun Shanka
 
PPT
Distributed Objects and JAVA
elliando dias
 
PDF
RMI (Remote Method Invocation)
Thesis Scientist Private Limited
 
PDF
Distributed Programming (RMI)
Ravi Kant Sahu
 
PPT
remote method invocation
Ravi Theja
 
17rmi
Adil Jafri
 
Remote method invocation
Veni7
 
Remote Method Invocation (Java RMI)
Sonali Parab
 
Remote Method Invocation, Advanced programming
Gera Paulos
 
Java rmi
Fazlur Rahman
 
Remote Method Invocation
Sonali Parab
 
ADB Lab Manual.docx
SaiKumarPrajapathi
 
Remote Method Invocation
elliando dias
 
Remote Method Invocation
ashishspace
 
Module 3 remote method invocation-2
Ankit Dubey
 
Introduction To Rmi
SwarupKulkarni
 
javarmi
Arjun Shanka
 
Distributed Objects and JAVA
elliando dias
 
RMI (Remote Method Invocation)
Thesis Scientist Private Limited
 
Distributed Programming (RMI)
Ravi Kant Sahu
 
remote method invocation
Ravi Theja
 

Recently uploaded (20)

PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PPTX
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PPTX
Simple and concise overview about Quantum computing..pptx
mughal641
 
PDF
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Doc9.....................................
SofiaCollazos
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
OFFOFFBOX™ – A New Era for African Film | Startup Presentation
ambaicciwalkerbrian
 
The Future of Artificial Intelligence (AI)
Mukul
 
The-Ethical-Hackers-Imperative-Safeguarding-the-Digital-Frontier.pptx
sujalchauhan1305
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Automating ArcGIS Content Discovery with FME: A Real World Use Case
Safe Software
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
Oracle AI Vector Search- Getting Started and what's new in 2025- AIOUG Yatra ...
Sandesh Rao
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
Simple and concise overview about Quantum computing..pptx
mughal641
 
AI Unleashed - Shaping the Future -Starting Today - AIOUG Yatra 2025 - For Co...
Sandesh Rao
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Doc9.....................................
SofiaCollazos
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 

Rmi

  • 1. core Webprogramming Remote Method Invocation 1 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com Agenda • Steps to build and RMI application • Running and compiling an RMI program • Eample: Retrieving a String remotely • Example: Performing numerical integration remotely • Enterprise RMI configuration • RMI Applets 2 Remote Method Invocation www.corewebprogramming.com
  • 2. RMI: Remote Method Invocation • Idea – Distribute objects across different machines to take advantage of hardware and dedicated software – Developer builds network service and installs it on specified machine – User requests an instance of a class using URL syntax – User uses object as though it were a regular, local object • Network connections happen automatically behind the scenes • Java “serialization” lets you pass complex data structures over the network without writing code to parse and reconstruct them 3 Remote Method Invocation www.corewebprogramming.com RMI Operations • Stub Operation – Package identifier of remote object – Package method identifier – Marshall parameters – Send package to server skeleton • Skeleton Operation – Unmarshall Parameters – Calls return value or exception – Marshall method return – Send package to client stub 4 Remote Method Invocation www.corewebprogramming.com
  • 3. RMI Details 1. Starting: Build Four Required Classes a. An interface for the remote object • Used by both the client and the server b. The RMI client • This will look up the object on the remote server, cast it to the type of the interface from Step 1, then use it like a local object. • Note that as long as there is a “live” reference to the remote object, an open network connection is maintained. The connection will be automatically closed when the remote object is garbage collected on the client. c. The object implementation • This object needs to implement the interface of Step a, and will be used by the server d. The RMI server • This will create an instance of the object from Step c and register it with a particular URL 5 Remote Method Invocation www.corewebprogramming.com RMI Details, cont. 2. Compile and Run the System a. Compile client and server. • Compiles the remote object interface and implementation automatically b. Generate the client stub and the server skeleton • Use the rmic compiler on the remote object implementation for this. – The client system will need the client class, the interface class, and the client stub class – If the client is an applet, these three classes must be available from the applet’s home machine – The server system will need the server class, the remote object interface and implementation, and the server skeleton class 6 Remote Method Invocation www.corewebprogramming.com
  • 4. RMI Details, cont. 2. Compile and Run the System, cont. c. Start the RMI registry • This only needs to be done once, not for each remote object • The current version of RMI requires this registry to be running on the same system as server d. Start the server • This step must be on the same machine as the registry of step c e. Start the client • This step can be done on an arbitrary machine 7 Remote Method Invocation www.corewebprogramming.com A Very Simple RMI Example: The Four Required Classes 1. The Interface for the Remote Object – The interface should extend java.rmi.Remote, and all its methods should throw java.rmi.RemoteException import java.rmi.*; /** The RMI client will use this interface directly. * The RMI server will make a real remote object that * implements this, then register an instance of it * with some URL. */ public interface Rem extends Remote { public String getMessage() throws RemoteException; } 8 Remote Method Invocation www.corewebprogramming.com
  • 5. Simple Example, Required Classes, cont. 2. The RMI Client – Look up the object from the host using Naming.lookup, cast it to the appropriate type, then use it like a local object import java.rmi.*; // For Naming, RemoteException, etc. import java.net.*; // For MalformedURLException import java.io.*; // For Serializable interface public class RemClient { public static void main(String[] args) { try { String host = (args.length > 0) ? args[0] : "localhost"; Rem remObject = (Rem)Naming.lookup("rmi://" + host + "/Rem"); System.out.println(remObject.getMessage()); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(NotBoundException nbe) { System.out.println("NotBoundException: " + nbe); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } 9 www.corewebprogramming.com } Remote Method Invocation Simple Example, Required Classes, cont. 3. The Remote Object Implementation – This class must extend UnicastRemoteObject and implement the remote object interface defined earlier – The constructor should throw RemoteException import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class RemImpl extends UnicastRemoteObject implements Rem { public RemImpl() throws RemoteException {} public String getMessage() throws RemoteException { return("Here is a remote message."); } } 10 Remote Method Invocation www.corewebprogramming.com
  • 6. Simple Example, Required Classes, cont. 4. The RMI Server – The server builds an object and register it with a particular URL – Use Naming.rebind (replace any previous bindings) or Naming.bind (throw AlreadyBoundException if a previous binding exists) import java.rmi.*; import java.net.*; public class RemServer { public static void main(String[] args) { try { RemImpl localObject = new RemImpl(); Naming.rebind("rmi:///Rem", localObject); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } } 11 Remote Method Invocation www.corewebprogramming.com Simple Example: Compiling and Running the System 1. Compile the Client and the Server Prompt> javac RemClient.java – This compiles the Rem interface automatically Prompt> javac RemServer.java – This compiles the RemImpl object implementation automatically 2. Generate the Client Stub and Server Skeleton Prompt> rmic RemImpl – This builds RemImpl_Stub.class and RemImpl_Skeleton.class – The client machine needs Rem.class, RemClient.class, and RemImpl_Stub.class – The server machine needs Rem.class, RemImpl.class, RemServer.class, and RemImpl_Skeleton.class 12 Remote Method Invocation www.corewebprogramming.com
  • 7. Simple Example: Compiling and Running the System, cont. 3. Start the RMI Registry Server> rmiregistry – On Unix systems you would probably add “&” to put the registry process in the background – You can also specify a port number; if omitted, port 1099 is used 4. Start the Server Server> java RemServer – Again, on Unix systems you would probably add “&” to put the process in the background 5. Start the Client Client> java RemClient hostname Here is a remote message. 13 Remote Method Invocation www.corewebprogramming.com A Better RMI Example, Numerical Integration 1. Simple Iterative Program to Calculate Sums: 2. Use to Approximate Numeric Integrals of the Form: 3. MidPoint Rule: 4. Motivation for RMI – Since smaller rectangles typically give better results, this can often be very cpu-intensive – RMI can make it available on a fast floating-point box 14 Remote Method Invocation www.corewebprogramming.com
  • 8. Numerical Integration, Example, cont. public class Integral { /** Returns the sum of f(x) from x=start to x=stop, where the function f * is defined by the evaluate method of the Evaluatable object. */ public static double sum(double start, double stop, double stepSize, Evaluatable evalObj) { double sum = 0.0, current = start; while (current <= stop) { sum += evalObj.evaluate(current); current += stepSize; } return(sum); } public static double integrate(double start, double stop, int numSteps, Evaluatable evalObj) { double stepSize = (stop - start) / (double)numSteps; start = start + stepSize / 2.0; return(stepSize * sum(start, stop, stepSize, evalObj)); } } 15 Remote Method Invocation www.corewebprogramming.com Numerical Integration, Example, cont. /** An interface for evaluating functions y = f(x) at a specific * value. Both x and y are double-precision floating-point * numbers. */ public interface Evaluatable { public double evaluate(double value); } 16 Remote Method Invocation www.corewebprogramming.com
  • 9. Integration Example: Four Required Classes 1. The RemoteIntegral Interface • The interface shared by the client and server import java.rmi.*; public interface RemoteIntegral extends Remote { public double sum(double start, double stop, double stepSize, Evaluatable evalObj) throws RemoteException; public double integrate(double start, double stop, int numSteps, Evaluatable evalObj) throws RemoteException; 17 Remote Method Invocation www.corewebprogramming.com Integration Example: Four Required Classes, cont. 2. The Remote Integral Client • Sends the RemoteIntegral an Evaluatable to integrate public class RemoteIntegralClient { public static void main(String[] args) { try { String host = (args.length > 0) ? args[0] : "localhost"; RemoteIntegral remoteIntegral = (RemoteIntegral)Naming.lookup("rmi://" + host + "/RemoteIntegral"); for(int steps=10; steps<=10000; steps*=10) { System.out.println("Approximated with " + steps + " steps:" + "n Integral from 0 to pi of sin(x)=" + remoteIntegral.integrate(0.0, Math.PI, steps, new Sin())); } System.out.println("'Correct' answer using Math library:" + "n Integral from 0 to pi of sin(x)=" + (-Math.cos(Math.PI) - -Math.cos(0.0))); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(NotBoundException nbe) { System.out.println("NotBoundException: " + nbe); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } 18 } Remote Method Invocation www.corewebprogramming.com
  • 10. Integration Example: Four Required Classes, cont. 2. The Remote Integral Client, cont. • Evaluatable Sin function import java.io.Serializable; class Sin implements Evaluatable, Serializable { public double evaluate(double val) { return(Math.sin(val)); } public String toString() { return("Sin"); } } 19 Remote Method Invocation www.corewebprogramming.com Integration Example: Four Required Classes, cont. 3. The Remote Integral Implementation • Remote object that calculates the integral value import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class RemoteIntegralImpl extends UnicastRemoteObject implements RemoteIntegral { public RemoteIntegralImpl() throws RemoteException {} public double sum(double start, double stop, double stepSize, Evaluatable evalObj) { return(Integral.sum(start, stop, stepSize, evalObj)); } public double integrate(double start, double stop, int numSteps, Evaluatable evalObj) { return(Integral.integrate(start, stop, numSteps, evalObj)); } } www.corewebprogramming.com 20 Remote Method Invocation
  • 11. Integration Example: Four Required Classes, cont. 4. The Remote Integral Server • Creates the RemoteIntegral and registers it with the rmi registry import java.rmi.*; import java.net.*; public class RemoteIntegralServer { public static void main(String[] args) { try { RemoteIntegralImpl integral = new RemoteIntegralImpl(); Naming.rebind("rmi:///RemoteIntegral", integral); } catch(RemoteException re) { System.out.println("RemoteException: " + re); } catch(MalformedURLException mfe) { System.out.println("MalformedURLException: " + mfe); } } } 21 Remote Method Invocation www.corewebprogramming.com Integration Example: Compiling and Running the System 1. Compile the Client and the Server Prompt> javac RemoteIntegralClient.java Prompt> javac RemoteIntegralServer.java 2. Generate the Client Stub and Server Skeleton Prompt> rmic –v1.2 RemoteIntegralImpl – Client requires: RemoteIntegral.class, RemoteIntegralClient.class and RemoteIntegralImpl_Stub.class – Server requires: RemoteIntegral.class, RemoteIntegralImpl.class, and RemoteIntegralServer.class – If the server and client are both running JDK 1.1, use the -v1.1 switch to produce the RMI 1.1 skeleton stub, RemoteIntegralImpl_Skeleton, required by the server 22 Remote Method Invocation www.corewebprogramming.com
  • 12. Integral Example: Compiling and Running the System, cont. 3. Start the RMI Registry Prompt> rmiregistry 4. Start the Server Prompt> java RemoteIntegralServer 5. Start the Client Prompt> java RemoteIntegralClient Approximated with 10 steps: Integral from 0 to pi of sin(x)=2.0082484079079745 Approximated with 100 steps: Integral from 0 to pi of sin(x)=2.0000822490709877 Approximated with 1000 steps: Integral from 0 to pi of sin(x)=2.0000008224672983 Approximated with 10000 steps: Integral from 0 to pi of sin(x)=2.00000000822436 ... 23 Remote Method Invocation www.corewebprogramming.com Enterprise RMI Configuration • Stub files need to be placed on a HTTP server for downloading – In Java 2, the RMI 1.2 protocol does not require the skeleton • Client must install an RMISecurityManager to load the RMI classes remotely System.setSecurityManager(new RMISecurityManager()); • Client requires a policy file to connect to registry and HTTP server 24 Remote Method Invocation www.corewebprogramming.com
  • 13. Policy File for Client grant { // rmihost - RMI registry and the server // webhost - HTTP server for stub classes permission java.net.SocketPermission "rmihost:1024-65535", "connect"; permission java.net.SocketPermission "webhost:80", "connect"; }; – Need to grant permission to ports 1024-65535 on the server • The server communicates with the rmiregistry (and client) on a randomly selected source port – Alternatively, can set policies in java.policy located in JAVA_HOME/lib/security/ 25 Remote Method Invocation www.corewebprogramming.com Enterprise RMI, Remote Integral, Example public class RemoteIntegralClient2 { public static void main(String[] args) { try { System.setSecurityManager(new RMISecurityManager()); String host = (args.length > 0) ? args[0] : "localhost"; RemoteIntegral remoteIntegral = (RemoteIntegral)Naming.lookup("rmi://" + host + "/RemoteIntegral"); for(int steps=10; steps<=10000; steps*=10) { System.out.println ("Approximated with " + steps + " steps:" + "n Integral from 0 to pi of sin(x)=" + remoteIntegral.integrate(0.0, Math.PI, steps, new Sin())); } ... } catch(RemoteException re) { System.out.println("RemoteException: " + re); } ... 26 } Remote Method Invocation www.corewebprogramming.com
  • 14. Enterprise Example: Compiling and Running the System 1. Compile the Client and the Server Prompt> javac RemoteIntegralClient2.java Prompt> javac RemeteIntegralServer.java 2. Generate the Client Stub and Server Skeleton Prompt> rmic –v1.2 RemoteIntegralImpl 3. Place the files on the correct machines 27 Remote Method Invocation www.corewebprogramming.com Enterprise Example: Compiling and Running the System, cont. 4. Start the HTTP Server • Place RemoteIntegral_Stub.class, RemoteIntegeral.class, and Evaluatable.class on an HTTP server • Verify that you can access the files through a browser 5. Start the RMI Registry Server> /somedirectory/rmiregistry • Make sure that none of the class files are in the directory in which you started the registry or available through the classpath 6. Start the Server Server> java -Djava.rmi.server.codebase=http://webhost/rmi/ RemoteIntegralServer – Server must be started on same host as rmiregistry 28 Remote Method Invocation www.corewebprogramming.com
  • 15. Enterprise Example: Compiling and Running the System, cont. 7. Start the Client Client> java -Djava.security.policy=rmiclient.policy RemoteIntegralClient2 rmihost Approximated with 10 steps: Integral from 0 to pi of sin(x)=2.0082484079079745 Approximated with 100 steps: Integral from 0 to pi of sin(x)=2.0000822490709877 ... – The rmihost is where server in which the rmiregistry was started 29 Remote Method Invocation www.corewebprogramming.com An RMI Applet • Applet does not require a RMI Security Manager • Applet can only access server in which class files were loaded – RMI Registry and remote object server must be the same HTTP host in which the applet was loaded • RMI 1.1 stub protocol not properly supported in IE • RMI 1.2 stub protocol require Java Plug-In or Netscape 6 30 Remote Method Invocation www.corewebprogramming.com
  • 16. RMI Applet, Example ... import javax.swing.*; public class RemoteIntegralApplet extends JApplet implements ActionListener { private Evaluatable[] shapes; private RemoteIntegral remoteIntegral; private JLabel result; private JTextField startInput, stopInput, stepInput; private JComboBox combo; public void init() { String host = getCodeBase().getHost(); try { remoteIntegral = (RemoteIntegral)Naming.lookup("rmi://" + host + "/RemoteIntegral"); } catch(RemoteException re) { reportError("RemoteException: " + re); } ... 31 Remote Method Invocation www.corewebprogramming.com RMI Applet, Example ... public void actionPerformed(ActionEvent event) { try { int steps = Integer.parseInt(stepInput.getText()); double start = Double.parseDouble(startInput.getText()); double stop = Double.parseDouble(stopInput.getText()); showStatus("Calculating ..."); Evaluatable shape = (Evaluatable)combo.getSelectedItem(); double area = remoteIntegral.integrate(start, stop, steps, shape); result.setText(Double.toString(area)); showStatus(""); } catch(NumberFormatException nfe) { reportError("Bad input: " + nfe); } catch(RemoteException re) { reportError("RemoteException: " + re); } } } 32 Remote Method Invocation www.corewebprogramming.com
  • 17. RMI Applet, Result Applet that communicates to a remote object through RMI in Netscape 6 33 Remote Method Invocation www.corewebprogramming.com Summary • RMI is a pure Java-based protocol for communicating with remote objects • Register (bind) and look-up remote objects in a registry • Java 2 no longer requires the skeleton class needed with the RMI 1.1 protocol • Enterprise RMI configuration requires a RMI Security Manager and client policy file for permissions 34 Remote Method Invocation www.corewebprogramming.com
  • 18. core Webprogramming Questions? 35 © 2001-2003 Marty Hall, Larry Brown http://www.corewebprogramming.com