The goals for supporting distributed objects in the Java programming language are:
Support seamless remote invocation on objects in different virtual machines
Support callbacks from servers to applets
Integrate the distributed object model into the Java programming language in a natural way while retaining most of the Java programming language's object semantics
Make differences between the distributed object model and local Java platform's object model apparent
Make writing reliable distributed applications as simple as possible
Preserve the type-safety provided by the Java platform's runtime environment
Support various reference semantics for remote objects; for example live (nonpersistent) references, persistent references, and lazy activation
Maintain the safe environment of the Java platform provided by security managers and class loaders
Underlying all these goals is a general requirement that the RMI model be both simple (easy to use) and natural (fits well in the language).
The first two chapters in this specification describe the distributed object model for the Java programming language and the system overview. The remaining chapters describe the RMI client and server visible APIs which are part of the Java 2 platform.