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

Messagesは特定のプロトコル内で、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

戻り値:

ReturnData
PingAck

ReturnData:

0x51 ReturnValue

PingAck:

0x53



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