Category Archives: RMI

Looking up Remote Objects for RMI and DIIOP



Introduction

The Java Remote Method Invocation (Java RMI) is a Java API that performs remote method invocation, the object-oriented equivalent of remote procedure calls (RPC), with support for direct transfer of serialized Java classes and distributed garbage-collection.

The original implementation depends on Java Virtual Machine (JVM) class-representation mechanisms and it thus only supports making calls from one JVM to another. The protocol underlying this Java-only implementation is known as Java Remote Method Protocol (JRMP). In order to support code running in a non-JVM context, programmers later developed a CORBA version.

Usage of the term RMI may denote solely the programming interface or may signify both the API and JRMP, IIOP, or another implementation, whereas the term RMI-IIOP (read: RMI over IIOP) specifically denotes the RMI interface delegating most of the functionality to the supporting CORBA implementation.

The basic idea of Java RMI, the distributed garbage-collection (DGC) protocol, and much of the architecture underlying the original Sun implementation, come from the “network objects” feature of Modula-3.

The example below shows how you can search for  remote Objects:

import javax.naming.*;
import java.rmi.RemoteException;
import javax.rmi.PortableRemoteObject;


// JRMP: name = "rmi://localhost/RObjectServer";
// IIOP: name = "iiop://localhost/RObjectServer";
try {
    // Look up remote object
    Object obj = new InitialContext().lookup(name);

    // Cast to the appropriate type
    RObject robj = (RObject)PortableRemoteObject.narrow(obj, RObject.class);

    // Invoke method on remote object
    robj.aMethod();
} catch (NamingException e) {
} catch (RemoteException e) {
}

Please note that RMI and DIIOP are legacy and more or less replaced by SOA┬ásince this uses HTTP port 80, which doesn’t have problems with rouring trough routers, firewalls or proxy servers.