Sun Microsystems, Inc

JDK 目次

RMI とオブジェクト直列化

JDK 1.1 リリースノート

リリースノートは次の内容を含みます。

RMI の一般的注意

  1. 2つの例によって RMI API の使い方を説明します。最初の分散システム版の Hello World プログラムの例には入門用のチュートリアルが付属して RMI の使い方の基本を説明します。2番目の例は株価モニタリングアプレットで、ポートフォリオに変動があったときにその通知を受け取り、アプレットがエクスポートしたオブジェクトからのコールバックを例示します。

  2. JDK 1.1 でリリースされる RMI を使って開発されたアプレットは appletviewer および HotJava 1.0 で実行することができます。 Java を実行できるブラウザ上での完全なサポートは、Java のライセンシーが JDK リリース 1.1 を組み込むことにより利用可能になります。経過措置として、JDK 1.0.2 上の RMI は Netscape への plug-in を備えており、RMI を使ったアプレットを Netscape3.0.1 で実行することができます。

直列化の一般的注意

  1. オブジェクトは、インタフェース java.io.Serializable またはインタフェース java.io.Externalizable を実装することにより ObjectOutputStream へ書き込み可能であることを陽に宣言しなければなりません。コアとなるクラスの多くは Serializable インタフェースを実装しています。

  2. インタフェース java.io.Externalizable を実装したオブジェクトはオブジェクトの全ての状態を保存するために writeExternal メソッドを実装しなければなりません。また、オブジェクトの全ての状態を復元するために readExternal メソッドを実装しなければなりません。

  3. クラスのバージョン管理のために、クラスの各バージョンは最初のバージョンを除いて変数 SerialVersionUID を指定しなければなりません。この変数は現在のクラスからストリームへの読み/書きが可能な最初のバージョンを示します。例:
          static final long serialVersionUID = 3487495895819393L; 
    

    この値を読取るためにはメソッド ObjectStreamClass.getSerialVersionUID またはツール serialver を使用します。

CGI プログラムを使ったファイアウオールを通しての RMI (特定の条件下でのみ必要)

ファイアウオールの外側にあり、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 インタープリタの格納されているパスが含まれていなければなりません。

現在までに知られている制限とバグ


Copyright (C) 1996 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA 94043-1100 USA. All rights reserved.