5.2.4.1 名前ライブラリ・インタフェースの擬似OMG IDL

ノート:

この情報は、「CORBAservices: Common Object Services Specification」の3-14ページから18ページから引用しました。改訂版: 1995年3月31日。更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。

既存のクライアント・アプリケーションに影響を与えることなく名前の表現が進化できるようにするには、クライアント・アプリケーションから名前の表現を隠すことをお薦めします。名前自体がオブジェクトとなることが理想ですが、名前は作成、操作、送信が効率的に行える、ライト・ウェイトのエンティティでなければなりません。したがって、名前は名前ライブラリからプログラムに提示されます。

名前ライブラリは、名前を擬似オブジェクトとして実装します。クライアント・アプリケーションは、通常のオブジェクトを呼び出す場合と同じやり方で、擬似オブジェクトに対し呼出しを行います。ライブラリ名は、擬似IDLで記述されます。これにより、適切な言語バインディングが示唆されます。C++クライアント・アプリケーションは、擬似IDL (PIDL)でも、IDLの場合と同じクライアント言語バインディングを使用します。

擬似オブジェクト参照は、OMG IDLインタフェース間で渡すことはできません。「CORBAservices: Common Object Services Specification」の第3章の「The CosNaming Module」で説明されるように、CORBAサービス・ネーミング・サービスは、NamingContext OMG IDLインタフェースをサポートしています。名前ライブラリは、NamingContextインタフェースを通じてライブラリ名をネーム・サービスに渡せる値に変換する操作をサポートしています。

ノート:

CORBAサービス・ネーミング・サービスを使用するのに、名前ライブラリの使用は必須ではありません。

名前ライブラリは、次のコード・スニペットに示すように、LNameComponentインタフェースおよびLNameインタフェースという2つの疑似IDLインタフェースで構成されています。

interface LNameComponent { // PIDL
        const short MAX_LNAME_STRLEN = 128;
        exception NotSet {};
        exception OverFlow {};
        string get_id
        raises(NotSet);
        void set_id(in string i)
        raises(OverFlow);
        string get_kind()
        raises(NotSet);
        void set_kind(in string k)
        raises(OverFlow);
        void destroy();
};
interface LName { // PIDL
        exception NoComponent {};
        exception OverFlow {};
        exception InvalidName {};
        LName insert_component(in unsigned long i,
                in LNameComponent n)
        raises(NoComponent, OverFlow);
        LNameComponent get_component(in unsigned long i)
        raises(NoComponent);
        LNameComponent delete_component(in unsigned long i)
        raises(NoComponent);
        unsigned long num_components();
        boolean equal(in LName ln);
        boolean less_than(in LName ln);
        Name to_idl_form()
        raises(InvalidName);
        void from_idl_form(in Name n);
        void destroy();
};
LName create_lname(); // C/C++
LNameComponent create_lname_component(); // C/C++