HOME

TheInfoList



OR:

The Java Remote Method Invocation (Java RMI) is a
Java Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
API An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
that performs remote method invocation, the object-oriented equivalent of
remote procedure call In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space (commonly on another computer on a shared computer network), which is written as if it were a ...
s (RPC), with support for direct transfer of serialized Java classes and distributed garbage-collection. The original implementation depends on
Java Virtual Machine A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally descr ...
(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 Modula-3 is a programming language conceived as a successor to an upgraded version of Modula-2 known as Modula-2+. It has been influential in research circles (influencing the designs of languages such as Java, C#, Python and Nim), but it ha ...
.


Generalized code

The programmers of the original RMI API generalized the code somewhat to support different implementations, such as a
HTTP HTTP (Hypertext Transfer Protocol) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, wher ...
transport. Additionally, the ability to pass arguments " by value" was added to CORBA in order to be compatible with the RMI interface. Still, the RMI-IIOP and JRMP implementations do not have fully identical interfaces. RMI functionality comes in the package , while most of Sun's implementation is located in the sun.rmi package. Note that with Java versions before Java 5.0, developers had to compile RMI stubs in a separate compilation step using rmic. Version 5.0 of Java and beyond no longer require this step - and static stubs have been deprecated since Java 8.


Jini version

Jini offers a more advanced version of RMI in Java. It functions similarly but provides more advanced security, object discovery capabilities, and other mechanisms for distributed object applications.


Example

The following classes implement a simple client-server program using RMI that displays a message. ; RmiServerIntf interface : defines the interface that is used by the client and implemented by the server. This extends the interface, which serves to identify an implementing class as one with remotely-invokable methods. import java.rmi.Remote; import java.rmi.RemoteException; public interface RmiServerIntf extends Remote ; RmiServer class : listens to RMI requests and implements the interface which is used by the client to invoke remote methods. import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.registry.*; public class RmiServer extends UnicastRemoteObject implements RmiServerIntf ; RmiClient class : this is the client which gets the reference (a proxy) to the remote object living on the server and invokes its method to get a message. If the server object implemented java.io.Serializable instead of java.rmi.Remote, it would be serialized and passed to the client as a value. import java.rmi.Naming; public class RmiClient Before running this example, we need to make a 'stub' file for the interface we used. For this task we have the RMI compiler - 'rmic' *Note: we make a stub file from the '*.class' file with the implementation of the remote interface, not from the '*.java' file. rmic RmiServer 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, 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 . See the comment in the constructor above.


References


External links

*
The Java RMI tutorial
- a good starting point to learn RMI. Also check th

* - Very good for training JavaRMI and as reference

* (Java API Reference for the RMI package) * {{cite web , author1= Ann Wollrath , author2= Roger Riggs , author3 = Jim Waldo , author3-link=Jim Waldo , title= A Distributed Object Model for the Java System , url=http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf , archive-url=https://ghostarchive.org/archive/20221010/http://pdos.csail.mit.edu/6.824/papers/waldo-rmi.pdf , archive-date=2022-10-10 , url-status=live , access-date= 2009-02-11

- an introduction to RMI in Oracle Weblogic.
General Remote Method Invocation
RMI Remote procedure call Articles with example Java code