目次 | 前へ | 次へ Java Remote Method Invocation


7.1 概要

分散オブジェクトシステムは、ライフタイムの長い永続オブジェクトをサポートするように設計されています。たとえば、きわめて多数の永続オブジェクト (たとえば数百万個) で構成されている分散オブジェクトシステムがあるとします。このシステムで、オブジェクトの実装が起動されたあと、ずっと起動された状態のままであるなら、貴重なシステムリソースを無期限に占有し続けることになり、これは合理的ではありません。また、一般に分散オブジェクトへの参照は、そのオブジェクトが起動されている間だけ有効であるため、システムクラッシュ後にオブジェクト間の通信を確立し直すことができるように、クライアント側ではオブジェクトへの永続性のある参照を保持しておく機能が必要になります。

オブジェクト起動は、オブジェクトへの永続性のある参照を提供するとともに、オブジェクトの実装の実行を管理するためのメカニズムです。RMI では、起動により必要に応じてオブジェクトの実行を開始できるようになっています。メソッド呼び出しにより、起動可能なリモートオブジェクトへのアクセスがあったとき、そのリモートオブジェクトが現在実行中でない場合は、適切な JVM 内でそのオブジェクトの実行が開始されます。


7.1.1 用語

アクティブなオブジェクトとは、任意のシステム内の任意の JVM 上でインスタンスが生成され、エクスポートされたリモートオブジェクトを指します。パッシブなオブジェクトとは、JVM 上でまだインスタンスの生成 (またはエクスポート) は行われていないが、アクティブな状態に移行可能なリモートオブジェクトを指します。パッシブなオブジェクトをアクティブなオブジェクトにすることを、起動といいます。起動を行うためには、オブジェクトを JVM に関連付ける、つまり、そのオブジェクトのクラスを JVM にロードし、その永続状態を復元するオブジェクトを必要とします。

RMI システムでは、遅延起動が使用されています。遅延起動では、メソッドを呼び出すなど、クライアントがオブジェクトを最初に使用するまで、オブジェクトの起動が保留されます。


7.1.2 遅延起動

リモートオブジェクトの遅延起動は、フォルトリモート参照 (フォルトブロックとも呼ばれる) により実現されています。リモートオブジェクトへのフォルトリモート参照は、そのリモートオブジェクトに対してメソッド呼び出しが最初に行われたとき、アクティブなオブジェクトの参照で「障害を発生」させます。それぞれのフォルト参照は、対象となるリモートオブジェクトの永続ハンドル (起動識別子) と一時リモート参照の両方を保持しています。リモートオブジェクトの起動識別子には、該当するオブジェクトの起動時に第三者とやりとりするのに十分な情報が含まれています。一時参照は、動作中のオブジェクトへのアクセスに使用できる、アクティブなリモートオブジェクトへの実際の「ライブ」参照です。

フォルト参照では、リモートオブジェクトへのライブ参照が null の場合、そのオブジェクトはアクティブではないものと見なされます。メソッドの呼び出しが発生すると、該当するオブジェクトのフォルト参照は、起動プロトコルを使用して、新たに起動されたオブジェクトのリモート参照 (ユニキャストリモート参照など) である「ライブ」参照を取得します。フォルト参照は、ライブ参照を取得すると、メソッド呼び出しを背後のリモート参照に転送し、リモート参照は、今度はそれをリモートオブジェクトに転送します。

より具体的に言えば、リモートオブジェクトのスタブには、次の 2 つを含む「faulting」リモート参照型が含まれます。


注 - RMI システムでは、リモート呼び出しについては「最大で 1 回」というセマンティクスが遵守されます。言い換えれば、起動可能またはユニキャストなリモートオブジェクトの呼び出しは、最大で 1 回までしか送られないということです。したがって、リモートオブジェクトの呼び出しが失敗した場合 (RemoteException がスローされた場合)、クライアントは、そのリモートメソッドが最大で 1 回しか実行されていない (通常は 1 回も実行されていない) ということを判断できます。


目次 | 前へ | 次へ
Copyright 1997, 2010, Oracle and/or its affiliates. All rights reserved.