目次 前項目 次項目
入門
分散システムでは異なるアドレス空間上、そして多くの場合異なるホスト上で実行されている計算が相互に通信できることが必要です。通信のための基本メカニズムとして、Java 言語はソケットをサポートします。これは柔軟性に富み一般的通信には十分な機能を備えています。
しかし、ソケットではクライアントとサーバは情報交換メッセージをエンコード、デコードするためにアプリケーションレベルでのプロトコルを必要とし、このようなプロトコルの設計はやっかいでエラーを招きがちなものです。
ソケットに替わる手段として RPC (Remote Procedure Call) があり、これは通信インタフェースをプロシージャ呼び出しのレベルまで抽象化したものです。
直接ソケットを取り扱うのではなく、あたかもローカルなプロシージャコールとしてプログラムしますが、実際は引数はパッケージ化されてコールの対象であるリモートターゲットへ送られます。
PRC システムが引数をエンコードし、値を返すときは XDRのような外部データ表現を用います。
しかし、PRCは異なるアドレス空間に存在するプログラムレベルオブジェクト間の通信を必要とする分散オブジェクトシステムに適合させるには難点があります。
オブジェクト呼び出しのセマンティクスを一致させるために、分散オブジェクトシステムは RMI (Remote Method Invocation) を必要とします。
このようなシステムでは、ローカルな代理オブジェクト (スタブ) がリモートオブジェクト呼び出しを管理します。
この仕様書で説明される Java RMI システムは Java 環境で動作させるために特別に設計されたものです。他の RMI システムを適用して Java オブジェクトを取り扱うことも可能ですが、それらは別な言語との相互運用性を考慮しているため Java システムと完全に滑らかに接続することは一般にできません。例えば、CORBA はヘテロジニアスな多重言語環境を指向しているため、言語に中立なオブジェクトモデルを使います。対照的に、Java 言語の RMI システムは Java 仮想マシンから構成されるホモジニアスな環境を仮定し、Java オブジェクトモデルの特性を可能な限り積極的に活用するように設計されています。
Java 言語における分散オブジェクトサポートの目標は:
- 異なる仮想マシン上のオブジェクトへの繋ぎ目のない呼び出しをサポートする。
- サーバからアプレットへのコールバックをサポートする。
- Java 言語のオブジェクトセマンティクスをできるだけ残しながら、分散オブジェクトモデルを自然な方法でJava言語に統合する。
- 分散オブジェクトモデルとローカルな Java オブジェクトの差異を明瞭にする。
- 信頼性の高い分散アプリケーションをできる限り簡明に記述できるようにする。
- Java のランタイム環境が持つ安全性を保つようにする。
これらの目標の下に共通に横たわるのは、RMI モデルは単純(使いやすい)かつ自然(言語にフィットする)でなければならないという要請です。
これに加えて、RMI システムはリモートオブジェクトのガーベッジコレクション、サーバの複製、呼び出しへのサービスのための持続オブジェクト活性化などへの機能拡張が可能でなければなりません。これらの拡張機能はクライアントから見て透過的であるべきであり、それを使用するサーバへの実装上の負担はできるだけ小さなものであるべきです。拡張機能をサポートするために、システムは次のようなサポートを必要とします。
- 複数の呼び出しメカニズム:例えば、単一オブジェクトへの単純呼び出し、複数の場所にある複製オブジェクト呼び出しなど。また、システムは別な呼び出しパラダイムも許容できるように拡張可能でなければならない。
- リモートオブジェクト参照のための種々のセマンティクス;例えばライブ(非持続性の)参照、持続参照、そして lazy アクティベーションなど。
- セキュリティマネージャとクラスローダが提供する安全性の高い Java 環境。
- アクティブオブジェクトのための分散ガーベッジコレクション。
- 多重トランスポートのサポート機能。
本仕様の最初の2つの章は Java 言語における分散オブジェクトモデルとシステムアーキテクチャを説明します。残りの章では RMI クライアントと、JDK 1.1 の一部である可視 (visible) API を解説します。
目次 前項目 次項目
Copyright (C) 1996, 1997 Sun Microsystems, Inc. All rights
reserved.