クラスタを生成するには,Cluster Managerインタフェースを使用します。ネーミングサーバの起動時に,Cluster Managerオブジェクトが一つだけ自動的に生成されます。Cluster Managerはネーミングサーバごとに一つだけあります。Cluster Managerの役割は,ネーミングサーバ内のクラスタの生成,検索,および状態の把握です。
. . .
ExtendedNamingContextFactory_var myFactory =
ExtendedNamingContextFactory::_bind(orb, "NamingService");
ClusterManager_var clusterMgr =
myFactory->get_cluster_manager();
Cluster_var clusterObj =
clusterMgr->create_cluster("RoundRobin");
clusterObj->bind(new NameComponent(
"member1", "aCluster"), obj1);
clusterObj->bind(new NameComponent(
"member2", "aCluster"), obj2);
clusterObj->bind(new NameComponent(
"member3", "aCluster"), obj3);
NameComponent_var myClusterName =
new NameComponent("ClusterName", "");
root->bind(myClusterName, clusterObj);
root->resolve(myClusterName);
// a member of the Cluster is returned
root->resolve(myClusterName);
// the next member of the Cluster is returned
root->resolve(myClusterName);
// the last member of the Cluster is returned
. . .
. . .
ExtendedNamingContextFactory myFactory =
ExtendedNamingContextFactoryHelper.bind(orb,
"NamingService");
ClusterManager clusterMgr = myFactory.get_cluster_manager();
Cluster clusterObj = clusterMgr.create_cluster("RoundRobin");
clusterObj.bind(new NameComponent("member1", "aCluster"),
obj1);
clusterObj.bind(new NameComponent("member2", "aCluster"),
obj2);
clusterObj.bind(new NameComponent("member3", "aCluster"),
obj3);
NameComponent myClusterName =
new NameComponent("ClusterName", "");
root.bind(myClusterName, clusterObj);
root.resolve(myClusterName) //
a member of the Cluster is returned.
root.resolve(myClusterName) //
the next member of the Cluster is returned.
root.resolve(myClusterName) //
the last member of the Cluster is returned.
. . .
クラスタ化機能はネーミングサービスに対して自動的にオンになります。注意点は,この機能がオンになると,オブジェクトをバインドするためにクラスタが透過的に生成されるということです。使用の方法はラウンドロビンに固定されます。この影響は,ネーミングサーバ内の同じ名前に幾つかのオブジェクトをバインドできるということです。反対に,この名前を解決すると,これらのオブジェクトの一つが返され,unbindオペレーションはその名前に対応するクラスタをデストラクトします。これは,ネーミングサービスがCORBAの仕様に準拠しなくなったという意味です。インターオペラブルネーミングサービスの仕様では,複数のオブジェクトを同じ名前でバインドする機能を明示的に禁止します。準拠しているネーミングサービスでは,クライアントが同じ名前を使用して異なるオブジェクトにバインドしようとすると,AlreadyBound例外が発生します。ユーザは最初から,個々のサーバにこの機能を使用するかどうかを決定する必要があり,その決定を守るべきです。
ネーミングサーバを暗黙的なクラスタ化機能と一緒に使用した場合,クラスタ化機能をオンにした状態でネーミングサーバを引き続き活性化してください。機能をオンにするには,構成ファイルに次のプロパティ値を定義してください。
vbroker.naming.propBindOn=1
examples/vbe/ins/implicit_clustering
examples/vbe/ins/explicit_clustering