リリースノートは次の内容を含みます。
java.io.Serializable
またはインタフェース java.io.Externalizable
を実装することにより ObjectOutputStream へ書き込み可能であることを陽に宣言しなければなりません。コアとなるクラスの多くは
Serializable
インタフェースを実装しています。
java.io.Externalizable
を実装したオブジェクトはオブジェクトの全ての状態を保存するために
writeExternal メソッドを実装しなければなりません。また、オブジェクトの全ての状態を復元するために
readExternal メソッドを実装しなければなりません。
SerialVersionUID
を指定しなければなりません。この変数は現在のクラスからストリームへの読み/書きが可能な最初のバージョンを示します。例:
static final long serialVersionUID = 3487495895819393L;
この値を読取るためにはメソッド ObjectStreamClass.getSerialVersionUID またはツール serialver を使用します。
ファイアウオールの外側にあり、HTTP 要求を任意のポートに出す機能のないクライアントからの RMI コールをサポートしなければならないサーバでは、そのサーバホストのデフォルト HTTP サーバ上に CGIプログラムがインストールされていなければなりません(ポート80で受信)。(CGIプログラムがインストールされていなくても、サーバは典型的なファイアウオールの外にあるクライアントからの RMI コールをサポート可能です)
デフォルト HTTP サーバに送られ、さらに URL で指定されるポートを受信している RMI サーバへ転送される HTTP パッケージ化された RMI コールの転送を司るのは CGI プログラムの "java-rmi.cgi" です。 特に、POST 要求が URL パス "/cgi-bin/java-rmi.cgi?forward=<port>" と共に送られる場合には要求の本体は特定のポート(ポート番号 >=1024)をリスンしているサーバへ(別な POST 要求として)送られます。こうして転送された要求への HTTP 応答が、オリジナル要求への応答になります。
Solaris の場合
JDK リリースの中のファイル bin/java-rmi.cgi を、HTTP サーバが URL パスを "/cgi-bin" と割り付けているディレクトリへコピーします。このスクリプトにはコメントが付けてありますから、その指示にしたがってスクリプトを編集し、Java インタープリタが置かれているディレクトリを正しく書き込まなければなりません。
Windows 95/NT の場合
JDK リリースの中のファイル bin/java-rmi.cgi を、HTTP サーバが URL パスを "/cgi-bin" と割り付けているディレクトリへコピーします。このプログラムを正しく実行するためには、システムの環境変数 PATH の中に Java インタープリタの格納されているパスが含まれていなければなりません。
java.rmi.server.UnicastRemoteObject.exportObject メソッドを使用する場合、互換ではありません。これはメソッドシグネチャの変更によるもので、JDK 1.1 では現在 void の代わりに RemoteStub が返されます。
AccessException
スローが発生することがあります。 レジストリの実装により、これらの操作は同じホストのレジストリの範囲に制限されています。もしホスト名または IP アドレスが一致しない場合は例外がスローされます。DHCP と PPP ネットワークの構成によっては、IP アドレスとホスト名がノードに割り付けられた名前と一致しない場合があります。これを回避するためには IP アドレスをノードに静的かつ陽に割り付けます。
Solaris の場合には別な方法としてノード名に PPP により割り付けられる IP アドレスを持たせる方法、またはノード名を "localhost" として IP アドレス 127.0.0.1 と結び付ける方法があります。
System.exit() を呼び出してアプリケーションを停止させることです。
rmic はリモートクラスにより実装されたリモートインタフェースが public でない場合はエラーフラグを立てません。
java.rmi.registry.Registry インタフェースの実装はスタブクラスが時間と共に変化した場合に正しく処理できません。もし以前のスタブがレジストリにロードされた後でリモートオブジェクトの実装にインタフェースが追加された場合は、オブジェクトの直列化がレジストリの新しいスタブとバインドされたときにクラス不一致のフラグを立てます。これの回避策として、リモートオブジェクト実装クラスによってリモートインタフェースの実装に変更が加えられている場合は一度レジストリを止めてから再スタートさせてください。