Remote Method Invocation (RMI) notes for release Alpha2. - RMI is supported for Java applications and in the AppletViewer. - RMI requires local installation of the rmi package appropriate for Solaris or Win95/NT. - Any application that exports remote objects must be allowed by the SecurityManager to use ServerSockets to listen for and accept incoming socket connections. - Applets may not export remote objects since the SecurityManager prevents using ServerSocket. This will be supported in a future update. - The current serialization policy allows private fields of objects to be serialized by default. The final release will require that objects declare that they are serializable. - The core Java classes have received no special treatment of their private data. Private data in system classes can be exposed with serialization. These classes will be properly protected before FCS. - This release differs from the specification in the following ways: * Support for cloning of remote server objects is not implemented. * The mechanisms to support the java.rmi.server.Unreferenced interface are not implemented. * Servers ignore the java.rmi.server.ClientClassDisable property and will attempt to load client specified classes as long as a security manager is present. - The RMI package will expire on 30 Sep 1996: - The RMI package is compatible with: * JDK 1.0.2 on Solaris * JDK 1.0.2 on Win32 and NT - When compiling rmi based programs with the classpath set to use the rmi.zip file, javac may incorectly report an error reguarding the importing of java.rmi.*. The compiler correctly compiles the file and writes the output. To avoid the error message, the rmi.zip file can be unzip'ed and the classpath set the class directory. i.e. % mkdir $RMIHOME/classes; % cd $RMIHOME/classes % unzip $RMIHOME/lib/rmi.zip % setenv CLASSPATH $RMIHOME/classes - Simple RMI clients should use System.exit to terminate, currently the RMI runtime threads will keep the VM from exiting. This does not apply to Applets. - Stub classes loaded in an applet do not identify their URL if they are passed to a RMI based service. Instead, the service must be configured using the property java.rmi.server.StubClassBase with the URL to load classes from. - The roles of the Remote and RemoteObject have been switched from earlier releases, their definitions are: * Interface java.rmi.Remote identifies a remote interface. * Class java.rmi.server.RemoteObject is the implementation that supports the remote objects. Clients and servers rarely need to refer to the RemoteObject class. - On some network configurations the Registry operations of bind, rebind and unbind will throw a AccessException in cases where it should not. The Registry implementation restricts these operations to clients on the same host as the Registry. If the hostname or IP address does not match the exception is thrown. In some DHCP and PPP network configurations the assigned IP address and hostname do not match the name assigned to the node. A workaround is to statically and explicitly assign the IP address for the node. On Solaris, another alternative is to change the node name have the IP address assigned by PPP, or to set the nodename to "localhost" which is bound to the IP address 127.0.0.1.