Hitachi

VisiBroker Version 5 Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド


13.2.1 ロケーションサービスエージェントとは

ロケーションサービスエージェントは,スマートエージェントのネットワークに接続されたオブジェクトを探索するメソッドの集まりです。IRのIDに基づいて,またはIRのIDとインスタンス名の組み合わせに基づいて問い合わせができます。問い合わせ結果はオブジェクトリファレンスとして,またはより詳細なインスタンスの情報として返されます。オブジェクトリファレンスは,スマートエージェントが見つけたオブジェクトの特定インスタンスのハンドルに過ぎません。インスタンス記述に含まれるのはオブジェクトリファレンス,インスタンスのインタフェース名,インスタンス名,ホスト名とポート番号,および状態に関する情報(実行中か活性化可能かなど)です。

該当するサービスはコアVisiBroker ORBに統合されたため,旧バージョンのようにlocserv実行形式ファイルはもう存在しません。

次のIDLサンプルが与えるIRのIDとインスタンス名の使用方法を図13-2に示します。

module Automobile {
         interface Car{...};
         interface Sedan:Car {...};
}
図13‒2 IRのIDとインスタンス名の使用

[図データ]

図13-3は,図13-2の例を使って,ネットワーク上のスマートエージェントとCarのインスタンスのリファレンスをわかりやすく示したものです。この例では,Kerri's CarのインスタンスとTom's Carの二つの複製という三つのインスタンスがあります。

図13‒3 一つのインタフェースのインスタンスを持つネットワーク上のスマートエージェント

[図データ]

以降,Agentクラスが提供したメソッドを使用してBorland Enterprise Server VisiBrokerスマートエージェントの情報を問い合わせる方法を説明します。それぞれの照会メソッドは,失敗の理由を示すFail例外を発生させることができます。

〈この項の構成〉

(1) スマートエージェントを実行するすべてのホスト名の取得

all_agent_locations()メソッドのHostnameSeq(C++)またはString[ ](Java)を使用して,Borland Enterprise Server VisiBrokerスマートエージェントのホストとして動作しているサーバを見つけられます。図13-3の例では,このメソッドはAthenaとZeusという二つのサーバの名前を返します。

(2) アクセス可能なすべてのインタフェースの検索

アクセス可能なインタフェースをすべて見つけるために,ネットワーク上のBorland Enterprise Server VisiBrokerスマートエージェントに問い合わせることができます。そのためにはall_repository_ids()メソッドのRepositoryIDSeq(C++),またはString[ ](Java)を使用できます。図13-3の例では,このメソッドはCarとSedanという二つのインタフェースのリポジトリIDを返します。

旧バージョンのVisiBroker ORBでは,IDLインタフェース名を使用してインタフェースを識別していましたが,ロケーションサービスは,その代わりにリポジトリIDを使用します。この違いを説明すると,インタフェース名が::module1::module2::interfaceの場合,これに等しいリポジトリIDはIDL:module1/module2/interface:1.0です。図13-2の例では,CarのリポジトリIDはIDL:Automobile/Car:1.0,SedanのリポジトリIDはIDL:Automobile/Sedan:1.0になります。

(3) あるインタフェースのインスタンスのリファレンスの取得

個々のインタフェースのすべての使用可能インスタンスを見つけるために,ネットワーク上のBorland Enterprise Server VisiBrokerスマートエージェントに問い合わせることができます。問い合わせる場合,表13-1または表13-2のメソッドのどれかを使用できます。

表13‒1 任意のインタフェースをインプリメントするオブジェクトのリファレンスの取得(C++)

メソッド

説明

CORBA::ObjectSeq* all_instances (const char*_repository_id)

このメソッドを使用すると,インタフェースのインスタンスのオブジェクトリファレンスが返されます。

DescSeq* all_instance_descs (const char*_repository_id)

このメソッドを使用すると,インタフェースのインスタンスのインスタンス記述が返されます。

表13‒2 任意のインタフェースをインプリメントするオブジェクトのリファレンスの取得(Java)

メソッド

説明

org.omg.CORBA.Object[ ] all_instances (String repository_id)

このメソッドを使用すると,インタフェースのインスタンスのオブジェクトリファレンスが返されます。

Desc[ ] all_instance_descs (String repository_id)

このメソッドを使用すると,インタフェースのインスタンスのインスタンス記述が返されます。

図13-3の例では,IDL:Automobile/Car:1.0というリクエストでどれかのメソッドを呼び出すと,Tom's Car on Athena,Tom's Car on ZeusおよびKerri's CarというCarインタフェースの三つのインスタンスが返されます。Tom's Carインスタンスは,二つの異なるスマートエージェントによって検索されるため,2度返されます。

(4) あるインタフェースの同名インスタンスに対するリファレンスの取得

表13-3または表13-4のメソッドの一つを使用して,特定のインスタンス名があればそれをすべて返すようにネットワーク上のBorland Enterprise Server VisiBrokerスマートエージェントに問い合わせることができます。

表13‒3 あるインタフェースの同名インスタンスに対するリファレンス(C++)

メソッド

説明

CORBA::ObjectSeq* all_replica (const char*_repository_id, const char*_instance_name)

このメソッドを使用すると,インタフェースの同名インスタンスのオブジェクトリファレンスが返されます。

DescSeq all_replica_descs (const char*_repository_id, const char*_instance_name)

このメソッドを使用すると,インタフェースの同名インスタンスのインスタンス記述が返されます。

表13‒4 あるインタフェースの同名インスタンスに対するリファレンス(Java)

メソッド

説明

org.omg.CORBA Object[ ] all_replica (String repository_id, String instance_name)

このメソッドを使用すると,インタフェースの同名インスタンスのオブジェクトリファレンスが返されます。

Desc[ ] all_replica_descs (String repository_id, String instance_name)

このメソッドを使用すると,インタフェースの同名インスタンスのインスタンス記述が返されます。

図13-3の例では,リポジトリIDにIDL:Automobile/Sedan:1.0を,インスタンス名にTom's Carを指定してどれかのメソッドを呼び出すと,二つのインスタンスが返されます。これは,二つの異なるスマートエージェントによってインスタンスが発生するためです。