RMI enables the programmer to create distributed Java-to-Java applications, in which the methods of remote Java objects can be invoked from other Java virtual machines, possibly on different hosts. A Java program can make a call on a remote object once it obtains a reference to the remote object, either by looking up the remote object in the bootstrap naming service provided by RMI or by receiving the reference as an argument or a return value. A client can call a remote object in a server, and that server can also be a client of other remote objects. RMI uses Object Serialization to marshal and unmarshal parameters and does not truncate types, supporting true object-oriented polymorphism.
See the Java Distributed Systems home page for an overview of the Distributed Systems Group at JavaSoft and information on some of our upcoming projects, including an interim plug-in for Netscape 3.0 (which is JDK 1.0.2 based) that enables RMI based applets to be run.