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言語での分散オブジェクト・サポートの目標を次に示します。

つまり、これらの目標で要求されているのは、RMIモデルは単純(使いやすく)かつ自然(言語にフィットする)でなければならないということです。

この仕様の最初の2つの章では、Java言語における分散オブジェクト・モデルとシステム概要について記述しています。 そのあとの章では、Java SEプラットフォームの一部であるRMIクライアントおよびサーバー管理APIについて解説しています。