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.