クライアントアプリケーションは,NamingContextメソッドresolveを使用して,論理的なNameが与えられたオブジェクトリファレンスを取得します。Nameは一つ以上のNameComponentオブジェクトで構成されているので,解決プロセスは,Nameを構成するすべてのNameComponent構造体を調べなければなりません。
CosNaming::Name識別子は可読性やデータ交換に向かない形式です。この問題を解決するために,文字列化された名前が定義されています。文字列化された名前とは,文字列とCosNaming::Nameとの一対一のマッピングです。二つのCosNaming::Nameオブジェクトが等しければ,その文字列化された表記も等しく,これは逆の場合にも当てはまります。文字列化された名前では,スラント(/)はネームコンポーネントのセパレータとして,ピリオド(.)はid属性とkind属性のセパレータとして,¥記号はエスケープ文字としてそれぞれ使用されます。規定によって,空のkind属性を持ったNameComponentはピリオドを使用しません(Orderなど)。
"Borland.Company/Engineering.Department/Printer.Resource"
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」を持ったオブジェクトインプリメンテーションへと解決されます。
. . .
// 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));
. . .
. . .
// 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));
. . .