目次|| 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.