目次 | 前の項目 | 次の項目 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 は、トランスポートレベルのメッセージであり、リモート Virtual Machine が繋がっているかをテストします。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

Returns: Return Returns Return

Return: ReturnData PingAck

ReturnData: 0x51 ReturnValue

PingAck: 0x53



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