Java RMI-Introduction

広告

RMIはRemote Method Invocationの略です。 これは、あるシステム(JVM)に存在するオブジェクトが別のJVM上で実行されているオブジェクトにアクセス/呼び出すことを可能にするメカニズ

rmiは、分散アプリケーションを構築するために使用され、Javaプログラム間のリモート通信を提供します。 これは、パッケージjavaで提供されています。rmi

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の目標です−

  • アプリケーションの複雑さを最小限に抑えます。
  • 型の安全性を維持するために。
  • 分散ガベージコレクション。
  • ローカルオブジェクトとリモートオブジェクトの操作の違いを最小限に抑えます。



+