JavaRMI-はじめに
RMIは Remote Method Invocation。これは、あるシステム(JVM)にあるオブジェクトが、別のJVMで実行されているオブジェクトにアクセス/呼び出すことを可能にするメカニズムです。
RMIは、分散アプリケーションを構築するために使用されます。Javaプログラム間のリモート通信を提供します。パッケージで提供されますjava.rmi。
RMIアプリケーションのアーキテクチャ
RMIアプリケーションでは、2つのプログラムを記述します。 server program (サーバー上にあります)および client program (クライアントに常駐)。
サーバープログラム内で、リモートオブジェクトが作成され、そのオブジェクトの参照がクライアントで利用できるようになります(レジストリを使用)。
クライアントプログラムは、サーバー上のリモートオブジェクトを要求し、そのメソッドを呼び出そうとします。
次の図は、RMIアプリケーションのアーキテクチャーを示しています。
ここで、このアーキテクチャのコンポーネントについて説明します。
Transport Layer−この層は、クライアントとサーバーを接続します。既存の接続を管理し、新しい接続を設定します。
Stub−スタブは、クライアントでのリモートオブジェクトの表現(プロキシ)です。これはクライアントシステムにあります。クライアントプログラムのゲートウェイとして機能します。
Skeleton −これはサーバー側にあるオブジェクトです。 stub このスケルトンと通信して、リモートオブジェクトにリクエストを渡します。
RRL(Remote Reference Layer) −クライアントがリモートオブジェクトに対して行った参照を管理するレイヤーです。
RMIアプリケーションの動作
以下のポイントは、RMIアプリケーションがどのように機能するかをまとめたものです。
クライアントがリモートオブジェクトを呼び出すと、スタブによって受信され、最終的にこの要求がRRLに渡されます。
クライアント側のRRLはリクエストを受信すると、次のメソッドを呼び出します。 invoke() オブジェクトの remoteRef。サーバー側のRRLにリクエストを渡します。
サーバー側のRRLは、要求をスケルトン(サーバー上のプロキシ)に渡し、スケルトンは最終的にサーバー上の必要なオブジェクトを呼び出します。
結果はクライアントに返されます。
マーシャリングとアンマーシャリング
クライアントがリモートオブジェクトのパラメータを受け入れるメソッドを呼び出すたびに、パラメータはネットワーク経由で送信される前にメッセージにバンドルされます。これらのパラメーターは、プリミティブ型またはオブジェクトの場合があります。プリミティブ型の場合、パラメータがまとめられ、ヘッダーが付加されます。パラメータがオブジェクトの場合、それらはシリアル化されます。このプロセスは、marshalling。
サーバー側では、パックされたパラメーターがバンドル解除されてから、必要なメソッドが呼び出されます。このプロセスは、unmarshalling。
RMIレジストリ
RMIレジストリは、すべてのサーバーオブジェクトが配置される名前空間です。サーバーがオブジェクトを作成するたびに、サーバーはこのオブジェクトをRMIregistryに登録します(bind() または reBind()メソッド)。これらは、として知られている一意の名前を使用して登録されますbind name。
リモートオブジェクトを呼び出すには、クライアントはそのオブジェクトの参照を必要とします。その時点で、クライアントはバインド名を使用してレジストリからオブジェクトをフェッチします(lookup() 方法)。
次の図は、プロセス全体を説明しています-
RMIの目標
RMIの目標は次のとおりです-
- アプリケーションの複雑さを最小限に抑えるため。
- 型安全性を維持するため。
- 分散ガベージコレクション。
- ローカルオブジェクトとリモートオブジェクトの操作の違いを最小限に抑えます。