4.6.5.3 corbaname URLスキーム

corbaname URLスキームは、URLでネーミング・サービスのエントリを示せるようにcorbalocスキームの機能を拡張します。corbaname URLは、ORBコアにネーミング・サービスの実装がなくても解決できます。corbaname URLの例を次に示します。

corbaname:555objs.com#a/string/path/to/obj

このURLは、ホスト555objs.comでNamingContext型のオブジェクト(オブジェクト・キーがNamingService)を見つけることができるか、その位置で動作しているエージェントがNamingContextのリファレンスを返すことを示します。文字列化された名前a/string/path/to/objは、そのNamingContextのresolve操作の引数として使用されます。

corbaname URLはcorbaloc URLと似ていますが、corbaname URLにはネーミング・コンテキストのバインディングを識別する文字列化された名前が含まれます。#文字は、文字列化された名前の開始を示します。

URLのBNF構文は、次の表に示されています。

表4-10 URLのBNF構文

URL要素 書式 説明
<corbaname>
= “corbaname:”<corbaloc_obj>[
            “#”<string_name>]
corbaloc_objは、corbaname URLのネーミング・コンテキストを識別する部分です。構文は、corbaloc URLの場合と同じです。
<corbaloc_obj> <obj_addr_list>[“/”<key_string>] obj_addr_listの説明については、表4-9を参照してください。
<obj_addr_list> corbaloc URLの定義と同じ obj_addr_listの説明については、表4-9を参照してください。
<key_string> corbaloc URLの定義と同じ key_stringの説明については、表4-9を参照してください。
<string_name> Stringified Name | empty string string_nameの説明については、表4-9を参照してください。

corbaname URLの解決は、corbaloc URL処理の単純な拡張として実装されます。その実装を説明するために、次のcorbaname URLを使用します。

corbaname:<corbaloc_obj>[“#”<string_name>]

解決は次のように行われます:

  1. corbaname URLからcorbaloc:::<corbaloc_obj>形式のcorbaloc URLを作成します。
  2. CORBA::ORB::string_to_objectを呼び出してCosNaming::NamingContextオブジェクトを取得し、corbaloc URLをネーミング・コンテキストのオブジェクト参照に変換します。
  3. :<string_name>CosNaming::Nameに変換します。
  4. 作成したCosNaming::Nameを渡して、CosNaming::NamingContextのresolve操作を呼び出します。
  5. CosNaming::NamingContext::resolveから返されるオブジェクト参照は、呼出し側に返す必要があります。

この解決プロセスに従うことで、ネーミング・サービスに存在しないネーミング・コンテキストのオブジェクト参照を返すことがなくなります。この手法の1つの副作用は、ネーミング・サービスのスタブがORBコアの一部であるか、resolve操作のリクエストを送信する内部メカニズムがなければならないことです。複雑な手間を避けるため、ネーミング・サービスのスタブをORBコアに埋め込むことをお薦めします。