13.1 ロケーションサービスとは
ロケーションサービスはCORBAの仕様に対する拡張機能で,オブジェクトインスタンスを見つける汎用機能を提供します。ロケーションサービスは,自身が知っているインスタンスのリストを格納しているカタログを保守するスマートエージェントと直接通信します。ロケーションサービスから問い合わせがあると,スマートエージェントはその問い合わせをほかのスマートエージェントに転送し,その応答を集めてロケーションサービスに返します。
ロケーションサービスは,BY_INSTANCEポリシーを指定したPOAに登録されたすべてのオブジェクトインスタンスについて知っています。これらのオブジェクトを含むサーバは,手動起動またはOADによる自動起動ができます。
図13-1はこの概念を表したものです。
- 注
-
サーバは,インスタンスを生成するときにインスタンスのスコープを指定します。グローバルにスコープされたインスタンスだけがスマートエージェントに登録されます。
ロケーションサービスは,スマートエージェントが各オブジェクトインスタンスについて保持している情報を使用できます。各オブジェクトインスタンスに対して,ロケーションサービスはIDLサンプル13-1のようなObjLocation::Desc構造体の中にカプセル化された情報を保持しています。
- IDLサンプル13-1 Desc構造体のIDL
struct Desc { Object ref; ::IIOP::ProfileBodyValue iiop_locator; string repository_id; string instance_name; boolean activable; string agent_hostname; }; typedef sequence<Desc> DescSeq;
Desc構造体のIDLには次のような情報が入っています。
-
オブジェクトリファレンスであるrefは,オブジェクトを呼び出すハンドルです。
-
iiop_locatorインタフェースは,インスタンスのサーバのホスト名およびポートへのアクセスをできるようにします。この情報は,唯一サポートされているプロトコルであるIIOPにオブジェクトが接続されている場合だけ意味があります。ホスト名はインスタンス記述内の文字列として返されます。
-
repository_idは,IR(インタフェースリポジトリ)とインプリメンテーションリポジトリの中で検索できるオブジェクトインスタンスのインタフェース指定です。一つのインスタンスが複数のインタフェースに応じる場合は,インタフェースごとに一つのインスタンスがあるかのように,カタログにはインタフェースごとにエントリが含まれます。
-
instance_nameは,そのサーバがオブジェクトに与えた名前です。
-
activableフラグは,OADが活性化できるインスタンスと,手動操作で起動されるインスタンスを識別します。
-
agent_hostnameは,インスタンスが登録されているスマートエージェント名です。
ロケーションサービスは負荷分散や監視などの目的に役立ちます。あるオブジェクトの複製が幾つかのホスト上にある場合,複製を提供するホスト名と各ホストの最近の負荷平均のキャッシュを維持するバインドインタセプタを配置できます。インタセプタは,オブジェクトのインスタンスを現在提供しているホストについてロケーションサービスに尋ねることでキャッシュを更新してから,ホストに問い合わせて負荷平均を取得します。そのあと,インタセプタは最も負荷が軽いホスト上の複製に対するオブジェクトリファレンスを返します。インタセプタの記述の詳細については,「19. ポータブルインタセプタの使用」を参照してください。