Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

8.ネーミングサービス

 ネーミングサービスはCORBAの規格で定義されているCORBAサービスのひとつです。 分散環境においてサーバオブジェクトのサービスを利用するために、まず何らかの手段でそのオブジェクト参照を取得しなければいけません。CORBAにはオブジェクトを検索するサービスや、ネットワーク上のオブジェクトを特定するための機構がいくつか用意されています。ネーミングサービスはオブジェクトの検索を行うサービスの一つです。

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インタフェースには以下のオペレーションが定義されています。

オペレーション 機能

bind
rebind

オブジェクト参照を、指定されたバインディング名でネーミングサービスに登録します。rebindは、既にある名前が別のオブジェクトにバインディングされているとき、バインドするオブジェクトを変更するときに用いられます。bindは名前が重複したときは例外が発生します。

bind_context
rebind_context

指定されたネーミングコンテキストを、指定されたバインディング名でネーミングサービスに登録します。
bind_new_context 新規にネーミングコンテキストを作成し、このネーミングコンテキストを指定されたバインディング名でネーミングサービスに登録します。
unbind

指定されたバインディングをネーミングサービスから削除します。

resolve 指定されたバインディング名に関係付けられたオブジェクト参照を獲得します。
list このネーミングコンテキストに格納されているオブジェクト参照なネーミングコンテキストのバインディングのリストを獲得します。
destroy このネーミングコンテキストを削除します。
 NamingContextインタフェース以外にも、ネーミングサービスを実現するためにいくつかのインタフェースや型が定義されています。これらはorg::omg::CosNamingモジュール内で定義されています。JavaマッピングではIDL のモジュールはパッケージに対応しており、org.omg.CosNamingパッケージ内に、ネーミングサービスを扱うためのクラスが用意されています。


次のページへ TECHSCOREのTOPページへ 次のページへ
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa