Java remote method invocation

In order to support code running in a non-JVM context, programmers later developed a CORBA version.

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 programmers of the original RMI API generalized the code somewhat to support different implementations, such as a HTTP transport.

Additionally, the ability to pass arguments "by value" was added to CORBA in order to be compatible with the RMI interface.

For this task we have the RMI compiler - 'rmic' Note that since version 5.0 of J2SE support for dynamically generated stub files has been added, and rmic is only provided for backwards compatibility with earlier runtimes,[3] or for programs that don't provide an explicit port number (or zero) when exporting remote objects, which is required for generated stubs to be possible, as described in the Javadoc for UnicastRemoteObject.

A typical implementation model of Java-RMI using stub and skeleton objects. Java 2 SDK, Standard Edition, v1.2 removed the need for a skeleton.