CONTENTS | PREV | NEXT | Java Remote Method Invocation |
In the JDK1.1 stub
protocol the Operation represents the method number as
assigned by rmic, and the Hash was the
stub/skeleton hash which is the stub's interface hash. As of
the Java 2 stub protocol (Java 2 stubs are generated using the
-v1.2
option with rmic
),
Operation has the value -1 and the Hash is a hash
representing the method to call. The hash is described in the
section "The RemoteRef
Interface".
A ReturnValue
of an RMI call consists of a return code to indicate either a
normal or exceptional return, a UniqueIdentifier to tag
the return value (used to send a DGCAck
if necessary)
followed by the return result: either the Value returned
or the Exception thrown.
annotateClass
and resolveClass
methods of
ObjectOutputStream
and ObjectInputStream
respectively. Each class is annotated with the codebase URL (the
location from which the class can be loaded). In the
annotateClass
method, the classloader that loaded the
class is queried for its codebase URL. If the classloader is
non-null
and the classloader has a
non-null
codebase, then the codebase is written to the
stream using the ObjectOutputStream.writeObject
method; otherwise a null
is written to the stream
using the writeObject
method. Note: as an
optimization, classes in the "java
" package
are not annotated, since they are always available to the receiver.
The class annotation is
resolved during deserialization using the
ObjectInputStream.resolveClass
method. The
resolveClass
method first reads the annotation via the
ObjectInputStream.readObject
method. If the
annotation, a codebase URL, is non-null
, then it
obtains the classloader for that URL and attempts to load the
class. The class is loaded by using a
java.net.URLConnection
to fetch the class bytes (the
same mechanism used by a web browser's applet classloader).