10.RMI over IIOPRMIはJava環境で標準的に用意されている分散オブジェクト技術です。RMIはもともとCORBAとは独立した技術として開発されました。しかし概念的にはCORBAと共通する点が多く、現在ではRMIとCORBAの相互運用も可能になっています。そこで、本章ではまずRMIの概要を述べ、RMIとCORBAの比較、および相互運用の技術について説明します。
CORBA 10章 RMI over IIOP
10.1 RMI (Remote Method Invocation)RMIは、CORBAと同じように分散環境においてリモートマシン上のオブジェクトのメソッドを呼び出す技術です。RMIはJavaに特化した技術であり、CORBAに比べて仕様はシンプルなものになっています。CORBAが言語独立であったのに対して、RMIではサーバやクライアントをすべてJavaで記述しなければなりません。CORBAほど多様な機能は持たないかわりに、CORBAと比べてより簡単に分散アプリケーションを構築することができます。新しい分散アプリケーションを作成する際に、Java以外の言語で記述されたソフトウェアコンポーネントを利用しなくても良い場合、RMIは良い選択肢になります。 アーキテクチャRMIの動作方法はCORBAの動作方法に非常によく似ています。以下にRMIのアーキテクチャを示します。 RMIにおいても、CORBAと同じようにスタブやスケルトンといったプロキシオブジェクトによって、リモートのオブジェクトに対する呼び出しが実現されます。クライアントアプリケーションはサーバオブジェクトがどのマシン上に存在するかを気にすることなく、あたかもローカルに存在するかのようにメソッド呼び出しを行うことができます。 CORBAでは、サーバオブジェクトのインタフェースを記述したIDLファイルをコンパイルしてスタブクラスやスケルトンクラスを生成していましたが、RMIではサーバオブジェクトのクラスファイルに対してrmicコンパイラを適用することによって生成します。ただし、RMIではサーバのインタフェースを記述しなくても良いわけではなく、やはり別にインタフェースを定義しなければいけません。インタフェース定義では外部に公開すべきインタフェースのみ記述します。インタフェース記述はIDLのような言語独立の別の言語を用いる必要はなく、Java言語におけるインタフェースで記述します。サーバクラスは、このインタフェースを実装したクラスとして定義します。 RMIにおける各クラスの関係を図に示します。ここではHelloというインタフェースを持つ、HelloImplというサーバ実装を作成しています。 ![]() ネーミングサービスRMIでは、オブジェクトを登録・検索するためにレジストリというものを用います。レジストリはスタンドアロンのJavaアプリケーションです。CORBAのネーミングサービスの様に、名前と関連づけてオブジェクト参照を登録する事ができます。レジストリには次の3つの機能があります。
|
![]()
![]()
|