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