RMI リリースノート |
JavaTM 2 SDK, Standard Edition, v 1.3 の目次 |
RMI の拡張
- 64K を超える文字列を直列化できる (1.3 以降)
- 1.3 より前は、64K を超える文字列を直列化しようとすると、
java.io.UTFDataFormatException
がスローされました。1.3 では、64K を超える文字列を直列化できるように、直列化プロトコルが拡張されました。また、RMI では、1.3 に準拠した Java Virtual Machine* (JVM) 間で RMI 呼び出しを行うときに、64K を超える文字列を渡すことができます。ただし、1.2 以前の JVM で、1.3 に準拠した JVM で記述された長い文字列を読み込もうとすると、1.2 以前の JVM にjava.io.StreamCorruptedException
が返されます。
- 直列化のパフォーマンスの向上 (1.3 以降)
- 1.3 では、UTF の読み込みと書き込みのパフォーマンスが大幅に向上しました。また、デフォルトの直列化および直列化復元を行うときに、オブジェクトフィールドの書き込みおよび読み込みの速度が、最大で 20% 向上しました。その他の実装のパフォーマンスも、全体的に最大で 20% 向上しています。この結果、オブジェクトをパラメータまたは戻り値として渡す RMI 呼び出しのパフォーマンスが、全体的に向上しています。
- 例外報告の改善 (1.3 以降)
- 直列化復元のクラス解決処理中にクラスが検出されなかった場合は、汎用的な例外でなく、元の
java.lang.ClassNotFoundException
がスローされるようになりました。この結果、エラーについて詳細な情報を得られるようになりました。また、直列化復元の例外では、直列化復元中の上位クラスが報告されていましたが、検出されなかった実際のクラスの名前が保存されて報告されるようになりました。たとえば、RMI 呼び出しを行なったときに、スタブクラスは検出されたが、リモートインタフェースクラスが検出されないことがあります。この場合、現在の直列化機構では、検出されなかったクラスがそのインタフェースクラスであると正しく報告され、スタブクラスが検出されなかったという誤った報告は行われません。
RMI ツールの変更
java.rmi.activation.ActivationGroupDesc
(1.3 以降)- グループのクラス名を返す
getClassName
メソッドが、システムのデフォルトグループ実装を示すnull
を返すことが可能になりました。これまでは、記述子の構築時にデフォルトのグループ実装が選択された場合、getClassName
メソッドは内部の実装クラスの名前を返していました。この変更のために、JVM 1.3 で稼動するアプリケーションが新たな起動可能オブジェクトを
ActivationSystem
に登録する場合、rmid
も 1.3 を実行できるようにアップグレードする必要があります。これは、1.3 以前のrmid
では新たに登録された起動可能オブジェクトを起動できないためです。
- 起動可能オブジェクトのコンストラクタ (1.3 以降)
- 起動可能オブジェクトの「起動」コンストラクタ (
ActivationID
とMarshalledObject
を引数にとる) は、オブジェクトが起動されるたびにActivationInstantiator
により呼び出されます。この「起動」コンストラクタを、private
またはprotected
にできるようになりました。以前は、実装が許可していたのは、public
な起動コンストラクタだけでした。
- リモートオブジェクトの直列化 (1.2.2 以降)
- 1.2.2 より前は、アンエクスポートされたリモートオブジェクトを RMI 呼び出しに渡そうとすると、
java.rmi.StubNotFoundException
が返されました。RMI ランタイムでリモートオブジェクト実装を対応するスタブに置換しているときに、スタブオブジェクトの検索に失敗するとこの例外が発生していました。1.2.2 以降のリリースでは、アンエクスポートされたリモートオブジェクトを RMI 呼び出しに渡しても、例外は発生しません。スタブの代わりに、このリモートオブジェクトが直列化されます。リモートオブジェクト実装が直列化可能でない場合は、アンエクスポートされたオブジェクトを RMI 呼び出しに渡そうとすると、java.rmi.RemoteException
および入れ子にされた例外java.io.NotSerializableException
が返されます。
java.rmi.server.RMIClassLoader
(1.3 以降)java.rmi.server.RMIClassLoader
に、新しいメソッドgetClassLoader
が追加されました。このメソッドは、特定のコードベースの URL パスからクラスをロードするときに RMI によって使われるクラスローダを返します。この API は、RMI の整列化および非整列化の動作がすべて必要な実装で使うことができます。詳細は、java.rmi.server.RMIClassLoader
を参照してください。
- RMI スタブコンパイラ
rmic
rmic
では、スタブのデフォルトの生成先ディレクトリが、パッケージ名の付いた、現在の作業ディレクトリのサブディレクトリになりました。「-d」
オプションを指定しない場合は、現在の作業ディレクトリ「.」が引数として指定されていると見なされます。デフォルトの生成先ディレクトリをオーバーライドしても、「-d」
が使われます。- IDL および IIOP のスタブを生成するために、
「-idl」
と「-iiop」
オプションが追加されました。
- RMI 起動デーモン
rmid
- デフォルトでは、
rmid
は現在、セキュリティポリシーファイルを要求します。
* この Web サイトで使用されている用語「Java Virtual Machine」または「JVM」は、Java プラットフォーム用の仮想マシンを表します。
Copyright © 1999 Sun Microsystems, Inc. All Rights Reserved. コメントの送付先: rmi-comments@java.sun.com |