Hitachi

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


14.2.4 ネーム解決

クライアントアプリケーションは,NamingContextメソッドresolveを使用して,論理的なNameが与えられたオブジェクトリファレンスを取得します。Nameは一つ以上のNameComponentオブジェクトで構成されているので,解決プロセスは,Nameを構成するすべてのNameComponent構造体を調べなければなりません。

〈この項の構成〉

(1) 文字列化された名前

CosNaming::Name識別子は可読性やデータ交換に向かない形式です。この問題を解決するために,文字列化された名前が定義されています。文字列化された名前とは,文字列とCosNaming::Nameとの一対一のマッピングです。二つのCosNaming::Nameオブジェクトが等しければ,その文字列化された表記も等しく,これは逆の場合にも当てはまります。文字列化された名前では,スラント(/)はネームコンポーネントのセパレータとして,ピリオド(.)はid属性とkind属性のセパレータとして,\記号はエスケープ文字としてそれぞれ使用されます。規定によって,空のkind属性を持ったNameComponentはピリオドを使用しません(Orderなど)。

コードサンプル14-1 文字列化された名前の例
"Borland.Company/Engineering.Department/Printer.Resource"

以降のサンプルでは,NameComponent構造体は文字列化された表記で示されます。

(2) 単純名と複合名

Billingのような単純名はNameComponentを一つしか持たないで,常にターゲットのネーミングコンテキスト上で解決されます。単純名はオブジェクトインプリメンテーションまたはNamingContextにバインドできます。

NorthAmerica/ShippingDepartment/Inventoryのような複合名は三つのNameComponent構造体のシーケンスで構成されます。n個のNameComponentオブジェクトで構成される複合名をオブジェクトインプリメンテーションにバインドすると,シーケンス内の最初の(n-1)個のNameComponentオブジェクトはそれぞれNamingContextへと解決され,最後のNameComponentオブジェクトはオブジェクトインプリメンテーションへと解決されなければなりません。

NameをNamingContextにバインドすると,シーケンス内の各NameComponent構造体はNamingContextを参照しなければなりません。

コードサンプル14-2は,三つのコンポーネントで構成され,CORBAオブジェクトにバインドされた複合名を示します。この名前に相当する文字列化された名前はNorthAmerica/SalesDepartment/Orderです。いちばん上のネーミングコンテキスト内で解決されると,この複合名の最初の二つのコンポーネントはNamingContextオブジェクトへと解決され,最後のコンポーネントは論理名称「Order」を持ったオブジェクトインプリメンテーションへと解決されます。

コードサンプル14-2 VisiBroker ORBオブジェクトにバインドされた複合名の例(C++)
. . .
// Name stringifies to "NorthAmerica/SalesDepartment/Order"
CosNaming::Name_var continentName = 
      rootNamingContext->to_name("NorthAmerica");
CosNaming::NamingContext_var continentContext = 
      rootNamingContext->bind_new_context(continentName);
CosNaming::Name_var departmentName = 
      continentContext->to_name("SalesDepartment");
CosNaming::NamingContext_var departmentContext = 
      continentContext->bind_new_context(departmentName);
CosNaming::Name_var objectName = 
      departmentContext->to_name("Order");
departmentContext->rebind(objectName, myPOA->
      servant_to_reference(managerServant));
. . .
コードサンプル14-3 VisiBroker ORBオブジェクトにバインドされた複合名の例(Java)
. . .
// Name stringifies to "NorthAmerica/SalesDepartment/Order "
NameComponent[ ] continentName =
                     { new NameComponent("NorthAmerica", "")};
NamingContext continentContext =
          rootNamingContext.bind_new_context(continentName);
NameComponent[ ] departmentName =
                  { new NameComponent("SalesDepartment", "")};
NamingContext departmentContext =
          continentContext.bind_new_context(departmentName);
NameComponent[ ] objectName = { new NameComponent("Order", "")};
departmentContext.rebind(
     objectName, myPOA.servant_to_reference(managerServant));
. . .