RMI uses a standard
mechanism (employed in RPC systems) for communicating with remote
objects: stubs and skeletons. A stub for a remote
object acts as a client's local representative or proxy for the
remote object. The caller invokes a method on the local stub which
is responsible for carrying out the method call on the remote
object. In RMI, a stub for a remote object implements the same set
of remote interfaces that a remote object implements.
When a stub's method
is invoked, it does the following:
- initiates a connection
with the remote JVM containing the remote object,
- marshals (writes and
transmits) the parameters to the remote JVM,
- waits for the result of
the method invocation,
- unmarshals (reads) the
return value or exception returned, and
- returns the value to
the caller.
The stub hides the
serialization of parameters and the network-level communication in
order to present a simple invocation mechanism to the caller.
In the remote JVM, each
remote object may have a corresponding skeleton (in Java 2
platform-only environments, skeletons are not required). The
skeleton is responsible for dispatching the call to the actual
remote object implementation. When a skeleton receives an incoming
method invocation it does the following:
- unmarshals (reads) the
parameters for the remote method,
- invokes the method on
the actual remote object implementation, and
- marshals (writes and
transmits) the result (return value or exception) to the
caller.
In the Java 2 SDK, Standard
Edition, v1.2 an additional stub protocol was introduced that
eliminates the need for skeletons in Java 2 platform-only
environments. Instead, generic code is used to carry out the duties
performed by skeletons in JDK1.1. Stubs and skeletons are generated
by the rmic
compiler.
CONTENTS | PREV | NEXT
Copyright 1997, 2010, Oracle and/or its affiliates. All rights
reserved.