8.ネーミングサービスネーミングサービスはCORBAの規格で定義されているCORBAサービスのひとつです。 分散環境においてサーバオブジェクトのサービスを利用するために、まず何らかの手段でそのオブジェクト参照を取得しなければいけません。CORBAにはオブジェクトを検索するサービスや、ネットワーク上のオブジェクトを特定するための機構がいくつか用意されています。ネーミングサービスはオブジェクトの検索を行うサービスの一つです。
CORBA 8章 ネーミングサービス
8.1 ネーミンググラフネーミングサービスはその名前が示すとおり、オブジェクトに名前を付け、名前とオブジェクトの対応付けを行います。この対応付けのことをバインディングと呼びます。ネーミングサービスでは、UNIXファイルシステムのディレクトリ構造のような階層構造を持った名前空間によってオブジェクト参照を管理します。 ![]() この階層構造を表現した図をネーミンググラフといいます。 UNIXファイルシステムにディレクトリとファイルがあるように、ネーミンググラフにはオブジェクト参照とネーミングコンテキストという2種類の要素が存在します。
オブジェクト参照は名前と関連付けられたサーバオブジェクトへの参照です。ネーミングコンテキストはディレクトリのように、他のネーミングコンテキストやオブジェクト参照の入れ物となります。ネーミンググラフの最上位に位置するネーミングコンテキストのことをルートネーミングコンテキストといいます。 オブジェクト参照やネーミングコンテキストは、格納されているネーミングコンテキストの中で一意な名前により識別されます。つまり同じネーミングコンテキスト内では同じ名前のオブジェクト参照やネーミングコンテキストが複数存在することはできません。この名前はNameComponentという構造体よって表現されます。NameComponentは、オブジェクトの名前を示す"id"とオブジェクトの属性などを保持する"kind"の2つのstring型のメンバを持っています。kindは主に上位アプリケーションで使用されることを想定しており、ネーミングサービスにより参照されたり書き換えられたりはしません。ネーミングサービスにおいてはidが重要な意味を持ちます。 同じコンテキストで同じ名前のバインディングは許されませんが、ひとつのネーミンググラフの中で同じオブジェクトに対する複数のバインディングを作成することは許されます。異なるコンテキストで同じオブジェクト参照にバインディングしても良いし、同じコンテキスト内でも異なる名前を付ければ同じオブジェクト参照に対する複数のバインディングを作成することができます。 また、同じコンテキストを複数のコンテキストに所属させることもできますし、グラフがループを構成しても構いません。ネーミンググラフはツリーではなくグラフなのです。 ネーミンググラフ全体ですべてのオブジェクト参照やネーミングコンテキストを識別する一意な名前は、ルートネーミングコンテキストからたどっていく順番でネームコンポーネントを並べることによって表現します。例えば上記の例でKinkakuというオブジェクト参照は、Japan・Kyoto・Kinkakuと列挙することによってグラフ内での位置が明確に指定できます。IDLではこの目的でName型という独自の型が定義されています。Name型はNameComponent構造体を要素とするシーケンス型です。(シーケンス型とは可変長の配列です)。 8.2 ネーミングサービスのインタフェースネーミングサービス自体もIDLで表現されたインタフェースを持ったCORBAオブジェクトです。ネーミングサービスは他のオブジェクトに対して、オブジェクトのバインディング登録や、名前によるオブジェクト検索などのサービスを提供します。 ネーミングサービスを実現する主なインタフェースにNamingContextがあります。NamingContextはネーミンググラフにおけるネーミングコンテキストを表すオブジェクトです。 NamingContextインタフェースには以下のオペレーションが定義されています。
NamingContextインタフェース以外にも、ネーミングサービスを実現するためにいくつかのインタフェースや型が定義されています。これらはorg::omg::CosNamingモジュール内で定義されています。JavaマッピングではIDL
のモジュールはパッケージに対応しており、org.omg.CosNamingパッケージ内に、ネーミングサービスを扱うためのクラスが用意されています。
|
![]()
![]()
|