目次 | 前 の項目 | 次の項目 Java Remote Method Invocation


10.2 RMI トランスポートプロトコル

RMI のワイヤ形式は Stream で表現されます。ここで採用している用語は、クライアントからみたものです。Out は出力メッセージを表し、In は入力メッセージを表します。トランスポートヘッダの内容は、オブジェクト直列化を使用した形式ではありません。

Stream:

Out

In

RMI の入力と出力ストリームは対になっています。各 Out ストリームは、対応する In ストリームを持ちます。Out ストリームは、文法的にはソケットの出力ストリームにマッピングします (クライアントから見た場合)。In ストリームは、文法的には、対応するソケットの入力ストリームと対になります。出力ストリームと入力ストリームは対になっているので、入力ストリームで必 要になるヘッダ情報は、プロトコルを認識できたかどうかの確認だけです。 それ以外のヘッダ情報 (マジックナンバーやバージョン番号) は、ストリーム対のコンテキストに含めることが可能です。


10.2.1 出力ストリームの形式

RMI における出力ストリームは、トランスポート Header 情報とそれに続く Messages の並びから構成されます。交互に出力ストリームは HTTP プロトコルに組み込まれた呼び出しを含めることができます。

Out:

Header Messages
HttpMessage

Header:

0x4a 0x52 0x4d 0x49 Version Protocol

Version:

0x00 0x01

Protocol:

StreamProtocol
SingleOpProtocol
MultiplexProtocol

StreamProtocol:

0x4b

SingleOpProtocol:

0x4c

MultiplexProtocol:

0x4d

Messages:

Message
Messages Message

Message は、特定のプロトコル内で Protocol が指定する方法に従ってラップされます。SingleOpProtocol の場合は、Header に続く Message が 1 つしかない場合があり、Message がラップされる追加データが存在しないことがあります。SingleOpProtocol は HTTP リクエストに組み込まれた呼び出しのために使用されます。単一のリクエストと応答以上の相互作用はありません。

StreamProtocolMultiplexProtocol の場合は、プロトコルのサポートを通知するバイトコード 0x4e と、サーバが認識できるホスト名とポート番号を含んだ EndpointIdentifier は現在クライアントが使用中であることを、サーバが応答する必要があります。この情報を使ってクライアントは、セキュリティ上の理由でできない場合もあり ますが、自分のホスト名を知ることができます。クライアントはそのあと、もう 1 つの EndpointIdentifier で応答する必要があり、応答の中には接続を受け付けるときのデフォルトの終点が含まれます。MultiplexProtocol では、サーバはこの情報からクライアントを特定することができます。

StreamProtocol の場合は、このエンドポイントのネゴシエーションのあとに、それ以上のデータのラッピングを行うことなしに Messages が出力ストリームへ送られます。MultiplexProtocol の場合は、「10.6 RMI の多重プロトコル」で解説されているように、ソケット接続が多重接続 の実在する接続として使用されます。この多重化された接続上で開始された仮想接続は、次に説明される一連の Messages から構成されます。

現在、出力メッセージには、CallPing および DgcAck という 3 つのタイプがあります。Call は、メソッド呼び出しをエンコードします。Ping は、トランスポートレベルのメッセージであり、リモート仮想マシンの状態をテストします。DGCAck は、サーバの分散ガベージコレクタへ向けられた肯定応答であり、サーバからの戻り値に含まれるリモートオブジェクトがクライアントによって受け取られたこ とを示します。

Message:

Call
Ping
DgcAck

Call:

0x50 CallData

Ping:

0x52

DgcAck:

0x54 UniqueIdentifier


10.2.2 入力ストリームの形式

現在、入力メッセージには、ReturnDataHttpReturn、 および PingAck の 3 つのタイプがあります。ReturnData は「通常の」RMI 呼び出しの結果です。HttpReturn は HTTP プロトコルに組み込まれた呼び出しに対する戻り値です。PingAckPing メッセージに対する肯定応答です。

In:

ProtocolAck Returns
ProtocolNotSupported
HttpReturn

ProtocolAck:

0x4e

ProtocolNotSupported:

0x4f

戻り値:

Return
Returns Return

Return:

ReturnData
PingAck

ReturnData:

0x51 ReturnValue

PingAck:

0x53



目次 | 前の項目 | 次の項目
Copyright © 1997-2004 Sun Microsystems, Inc. All Rights Reserved.