サーバ側のマッピング

7


7.1 はじめに

この章では、実装によってオブジェクトが作成され、ORB のランタイムに登録される仕組みについて説明します。

この章の内容は、サーバ側の移植性のある RFP についての最終提案において記述されるサーバフレームワークアーキテクチャに従って改訂される予定です。


問題点 - この章は、移植性のある RFP についての提案の結果を待って改訂されます。

7.2 一時オブジェクト

この最初の提案では、アプリケーション開発者による一時 ORB オブジェクトの実装を可能にする、最低限の API だけが記述されています。移植性に関する提案作業の結果として、大幅な変更が加えられる予定はありません。

7.2.1 サーバント基底クラス

IDL インタフェース <interface_name> のそれぞれについて、マッピングでは次のように Java クラスが定義されます。

// Java
public class _<interface_name>ImplBase implements <interface_name> {
}

7.2.2 サーバントクラス

各インタフェースについて、開発者はサーバントクラスを記述する必要があります。サーバントクラスのインスタンスは、ORB オブジェクトを実装するものです。各インスタンスは単一の ORB オブジェクトを実装し、各 ORB オブジェクトは単一のサーバントによって実装されます。

各オブジェクトは、ほとんどの IDL インタフェースを派生した ORB オブジェクトを実装します。このインタフェースが <interface_name> である場合、サーバントクラスは _<interface_name>ImplBase を継承する必要があります。

IDL インタフェースのマッピング仕様で定義されているように、サーバントクラスには、オブジェクトの実装がサポートする IDL インタフェースのオペレーションと属性に対応する public メソッドを定義する必要があります。_<interface_name>ImplBase によって定義されるすべての abstract メソッドの要件を満たすには、これらのメソッドを提供するだけで十分です。

7.2.3 一時 ORB オブジェクトの作成

オブジェクト実装のインスタンスを生成するには、サーバントクラスのインスタンスを生成する必要があります。

7.2.4 一時 ORB オブジェクトへの接続

オブジェクトの実装 (オブジェクト参照) は、ORB の connect() メソッドを呼び出すことで、ORB に明示的に接続されます (「6.12 ORB」を参照)。

また、オブジェクトの実装は、それ自体はローカルな (Java) オブジェクトとして実装されていない (マッピングされた) IDL オペレーションに (マッピングされた IDL の) パラメータとして渡された場合も、自動的かつ暗黙的に ORB に接続されます。つまり、オブジェクトの実装は、整列化されて、プロセスのアドレス空間の外側に送られなければなりません。ベンダーは、「早い段階で」(たとえば、インスタンスの生成の時点で) そのようなオブジェクト実装を接続することは自由ですが、少なくとも上記のようにオブジェクトが渡される時点では、実装を ORB に接続する必要があります。

オブジェクトがすでに接続されている状態で connect() メソッドを呼び出しても、何も行われません。

7.2.5 一時 ORB オブジェクトの切断

ORB の disconnect() メソッドを呼び出すことにより、サーバントを ORB から切断できます (「6.12 ORB」を参照)。このメソッドから返ったあとでは、着信する要求は、ORB が出す例外 CORBA::OBJECT_NOT_EXIST によって拒否されます。このメソッドを使用すると、リモートクライアントに対して、ORB オブジェクトが破壊されたように見せることができます。

オブジェクトが接続されていない状態で disconnect() メソッドを呼び出しても、何も行われません。

ただし、サーバントを直接使って (たとえば、実装の this ポインタを使って) 発行された要求は、ORB には渡りません。このような要求は、引き続きサーバントによって処理されます。

7.3 持続性オブジェクト


問題点 - 移植性の仕様に依存します。