RMI Release Notes |
Contents of the JavaTM 2 SDK, Standard Edition, v 1.3 |
RMI Enhancements
- Strings longer than 64K can now be serialized (since 1.3)
- Prior to 1.3, an attempt to serialize a string longer than 64K would result in a
java.io.UTFDataFormatException
being thrown. In 1.3, the serialization protocol has been enhanced to allow strings longer than 64K to be serialized. RMI will also allow these longer strings to be passed in RMI calls between 1.3-compatible Java virtual machines* (JVMs). Note that if a 1.2 (or earlier) JVM attempts to read a long string written from a 1.3-compatible JVM, the 1.2 (or earlier) JVM will receive ajava.io.StreamCorruptedException
.
- Serialization performance enhancements (since 1.3)
- UTF read and write performance has improved significantly in 1.3. Additionally, writing the fields of an object during default serialization and reading the fields of an object during default deserialization is up to 20% faster. Other general implementation improvements have also increased performance up to an additional 20%. These serialization improvements have increased the overall performance of RMI calls that pass objects as parameters or return values.
- Improved exception reporting (since 1.3)
- If a class can not be found during the class resolution process of deserialization, the original
java.lang.ClassNotFoundException
is thrown instead of a generic one so that more information about the failure is available. Another improvement to deserialization exception reporting includes maintaining the name of the original class that could not be found instead of reporting a higher-level class that was being deserialized. For example, if (in an RMI call) the stub class can be found but the remote interface class cannot, the serialization mechanism will now report correctly that the interface class was the class that could not be found instead of erroneously reporting that the stub class could not be found.
Changes to RMI Tools
java.rmi.activation.ActivationGroupDesc
(since 1.3)- The
getClassName
method, which returns the group's class name, can now returnnull
, indicating the system's default group implementation. Previously, thegetClassName
method would return the name of the internal implementation class if the default group implementation was chosen when the descriptor was constructed.Due to this change, if an application running in a 1.3 JVM registers an new activatable object with the
ActivationSystem
,rmid
must also be upgraded to run 1.3, since a pre-1.3rmid
will not be able to activate the newly registered activatable object.
- Constructors of activatable objects (since 1.3)
- An activatable object's "activation" constructor, which takes an
ActivationID
and aMarshalledObject
as arguments and which is called by theActivationInstantiator
each time the object is activated, can now beprivate
orprotected
. Previously, the implementation only allowedpublic
activation constructors.
- Serializing remote objects (since 1.2.2)
- Prior to 1.2.2, an attempt to pass an unexported remote object in a RMI call would result in a
java.rmi.StubNotFoundException
. This exception was a result of the RMI runtime's failure to locate a stub object during an attempt to replace a remote object implementation with its corresponding stub. In 1.2.2 and later releases, an unexported remote object passed in an RMI call will no longer result in an exception, but rather the remote object will be serialized instead of its stub. If the remote object implementation is not serializable, an attempt to pass an unexported object in an RMI call will result in ajava.rmi.RemoteException
with the nested exceptionjava.io.NotSerializableException
.
java.rmi.server.RMIClassLoader
(since 1.3)java.rmi.server.RMIClassLoader
has a new method,getClassLoader
. This method returns the class loader that RMI uses to load classes from a specified codebase URL path. This API can be used in an implementation that requires complete RMI marshalling/unmarshalling behavior. Seejava.rmi.server.RMIClassLoader
for details.
- The RMI Stub Compiler,
rmic
- By default,
rmic
now assumes that the destination directory for generated stubs is the package-named subdirectory of the current working directory. If the "-d
" option is not specified, the result is the same as though it were specified with the current working directory "." as an argument. The "-d
" may still be used to override the default destination directory.- Two new options, "
-idl
" and "-iiop
" have been added to generate IDL and stubs for IIOP, respectively.
- The RMI Activation Daemon,
rmid
- By default,
rmid
now requires a security policy file.
*As used on this web site, the terms "Java virtual machine" or "JVM" mean a virtual machine for the Java platform.
Copyright ©
1999 Sun Microsystems, Inc. All Rights
Reserved.
Please send comments to: rmi-comments@java.sun.com |