1 概要
1.1 Background
分散システムでは、異なるアドレス空間上、つまり潜在的には異なるホスト上で、実行されている計算が相互に通信できる必要があります。 通信のための基本的なメカニズムとして、JavaTM言語はソケットをサポートします。これは、柔軟性に富み一般的な通信には十分な機能を備えています。 しかし、ソケットでは、クライアントとサーバーは情報交換メッセージをエンコードおよびデコードするためにアプリケーション・レベルでのプロトコルに集中しなければならず、このようなプロトコルの設計は複雑でエラーを招きやすいものです。
ソケットに替わる手段としてRPC (Remote Procedure Call)があり、これは通信インタフェースをプロシージャ呼出しのレベルまで抽象化したものです。 直接ソケットを取り扱うのではなく、あたかもローカルなプロシージャ呼び出しとしてプログラムしますが、実際には、引数はパッケージ化されて呼出しの対象であるリモート・ターゲットへ送られます。 RPCシステムが、XDRのような外部データ表現を用いて、引数と戻り値をエンコードします。
しかし、RPCは、異なるアドレス空間に存在するプログラム・レベル・オブジェクト間の通信を必要とする、分散オブジェクト・システムに適合させるには難点があります。 オブジェクト呼出しのセマンティックスを適合させるために、分散オブジェクト・システムはRMI (Remote Method Invocation)を必要とします。 このようなシステムでは、ローカルな代理オブジェクト(スタブ)がリモート・オブジェクト呼出しを管理します。
この仕様書に記述されているJavaプラットフォームのRemote Method Invocationシステムは、Javaアプリケーション環境で動作させるために特別に設計されたものです。 Java言語のRMIシステムは、Java仮想マシン(JVM)から構成される同種環境を想定しているため、このシステムではJavaプラットフォームのオブジェクト・モデルの特性を最大限に活用できます。
1.2 システムの目標
Java言語での分散オブジェクト・サポートの目標を次に示します。
- 異なる仮想マシン上のオブジェクトへのシームレスなリモート呼出しをサポートする
- サーバーからアプレットへのコールバックをサポートする
- Java言語のオブジェクト・セマンティクスをできるだけ残しながら、分散オブジェクト・モデルを自然な方法でJava言語に統合する
- 分散オブジェクト・モデルとJavaプラットフォームのローカルなオブジェクトの差異を明瞭にする
- 信頼性の高い分散アプリケーションをできるかぎり簡明に記述できるようにする
- Javaプラットフォームの実行環境が持つ型の安全性を保つようにする
- リモート・オブジェクトの様々な参照セマンティクス(ライブ(非永続)参照、永続参照、遅延アクティブ化(ノート:アクティブ化は非推奨になり、将来のバージョンのプラットフォームから削除される可能性があります)など)をサポート
- セキュリティ・マネージャおよびクラス・ローダーが提供する、安全なJavaプラットフォーム環境の維持
つまり、これらの目標で要求されているのは、RMIモデルは単純(使いやすく)かつ自然(言語にフィットする)でなければならないということです。
この仕様の最初の2つの章では、Java言語における分散オブジェクト・モデルとシステム概要について記述しています。 そのあとの章では、Java SEプラットフォームの一部であるRMIクライアントおよびサーバー管理APIについて解説しています。