Java Remote Method Invocation (RMI):
It gives a way for a Java program on one machine to interact with objects residing in different JVMs. The important blocks of the RMI architecture are the stub class, the skeleton class and object serialization. RMI needs a layered architecture where each of the layers may be enhanced without affecting the other layers. The layers may be defined as given:
1. Application Layer: The server and client program
2. Skeleton & Stub Layer: Intercepts method invokes made by the client and redirects these calls to a remote RMI service.
3. Remote Reference Layer: Sets up connections to remote address spaces, understands, and manages connections how to manage and interpret references given from clients to the remote service objects.
4. Transport layer: Based on TCP/IP connections between operating systems in a network. It gives basic connectivity, as well as some firewall penetration goals.
RMI stub classes give a reference to a skeleton object located in a different address space on the different or same machine. That is a typical example of a proxy design pattern, which builds an object executing in another JVM seems like a local object. In JDK 5.0 and later, the RMI facility access dynamic proxies instead of generated stubs, which builds RMI easier to use.