Remote Method Invocation

From Wikibooks, open books for an open world
Jump to: navigation, search

Client Server Java Programming
Remote Method Invocation
EJB
Navigate Concurrent Programming topic: v  d  e )


Java's Remote Method Invocation (commonly referred to as RMI) is used for client and server models. RMI is the object oriented equivalent to RPC (Remote procedure call).

The Java Remote Method Invocation (RMI) system allows an object running in one Java Virtual Machine (VM) to invoke methods on an object running in another Java VM. RMI provides for remote communication between programs written in the Java programming language.

RMI is defined to use only with the Java platform. If you need to call methods between different language environments, use CORBA. With CORBA a Java client can call C++ server and/or a C++ client can call a Java server. With RMI that can not be done.

STUB and SKELETON[edit]

The remote method invocation goes through a STUB on the client side and a so called SKELETON on the server side.

CLIENT --> STUB --> ... Network ... --> SKELETON --> REMOTE OBJECT


rmiregistry[edit]

Remote objects are listed in the rmiregistry. Clients will get a reference to the remote object by querying the rmiregistry. After that, the client can call methods on the remote objects.

The rmiregistry is a separate process that has to be started before remote objects can be added to it. It can be started by the command line in Unix:

Standard input or output rmiregistry on Unix
rmiregistry <port> &

or under Windows:

Standard input or output rmiregistry on Windows
start rmiregistry <port>

If the port is not specified the default 1099 is used. The client will need to connect to this port to access the remote object.

The rmiregistry can also be started from a program by calling the following code:

Example Code section 1: rmiregistry starting
import java.rmi.registry.LocateRegistry;
...
Registry reg = LocateRegistry.createRegistry(iPort);

Objects passed in as parameters to the remote objects's methods will be passed by value. This is the only thing developers need to keep in mind (program logic wise) when using remote objects. If the remote object changes the passed in object values, it won't be reflected on the client side, this is opposite what happens when a local object is called. Objects that used as parameters for remote methods invocation, must implement the java.io.Serializable interface, as they are going to be serialized when passed through the network, and a new object will be created on the other side.

rmic tool[edit]

Clipboard

To do:
Complete this section.

RMI Remote object[edit]

The remote object has to extend the java.rmi.server.UnicastRemoteObject object.

RMI clients[edit]

Here is an example of RMI client:

Computer code Code listing 7.10: HelloClient.java
  1. import java.rmi.registry.LocateRegistry;
    
  2. import java.rmi.registry.Registry;
    
  3.  
    
  4. public class HelloClient{
    
  5.  
    
  6.     private HelloClient() {}
    
  7.  
    
  8.     public static void main(String[] args) {
    
  9.         String host = (args.length < 1) ? null : args[0];
    
  10.         try {
    
  11.             Registry registry = LocateRegistry.getRegistry(host);
    
  12.             Hello stub = (Hello) registry.lookup("Hello");
    
  13.             String response = stub.sayHello();
    
  14.             System.out.println("response: " + response);
    
  15.         } catch (Exception e) {
    
  16.             System.err.println("Client exception: " + e.toString());
    
  17.             e.printStackTrace();
    
  18.         }
    
  19.     }
    
  20. }
    


Clipboard

To do:
Add some exercises like the ones in Variables

Client Server Java Programming
Remote Method Invocation
EJB