10.4.3 Containedインタフェース

次に示すContainedインタフェースは、ほかのインタフェース・リポジトリ・オブジェクトに包含されるインタフェース・リポジトリのすべてのインタフェースによって継承されます。ルート・オブジェクト(Repository)と無名定義(ArrayDef、StringDef、SequenceDef)以外の、インタフェース・リポジトリ内のすべてのオブジェクト、およびプリミティブ型が、ほかのオブジェクトに包含されます。

module CORBA {
   typedef string VersionSpec;

   interface Contained : IRObject {
       readonly attribute RepositoryId        id;
       readonly attribute Identifier          name;
       readonly attribute VersionSpec         version;
       readonly attribute Container           defined_in;
       readonly attribute ScopedName          absolute_name;
       readonly attribute Repository          containing_repository;
       struct Description {
          DefinitionKind              kind;
          any                         value;
         };
       Description describe ();
       };
};

別のオブジェクトに包含されるオブジェクトには、それをグローバルに識別するid属性と、包含するContainerオブジェクト内で一意に識別するname属性が付いています。また、同じ名前を持つ別バージョンのオブジェクトと区別するためのversion属性も付いています。Oracle Tuxedo CORBAインタフェース・リポジトリは、同名オブジェクトの同時包含、または複数バージョンの存在をサポートしていません。

包含されるオブジェクトには、それらが定義されるContainerを識別する、defined_in属性もあります。オブジェクトが包含されうる理由は、包含するオブジェクト内で定義される(たとえば、インタフェースがモジュール内で定義される)から、または包含するオブジェクトによって継承される(たとえば、あるインタフェースが別のインタフェースから操作を継承したことにより、その操作がそのインタフェース内に包含される)からです。オブジェクトが継承によって包含された場合は、defined_in属性によって、オブジェクトの継承元であるInterfaceDefまたはValueDefが識別されます。

absolute_name属性は、包含Repository内でContainedオブジェクトを一意に識別する、絶対ScopedNameです。このオブジェクトのdefined_in属性がRepositoryを参照している場合、文字列「::」と、このオブジェクトのname属性を結合することによって、absolute_nameが形成されます。それ以外の場合、absolute_nameの形成は、このオブジェクトのdefined_in属性によって参照されるオブジェクトのabsolute_name属性、文字列「::」、およびこのオブジェクトのname属性を結合することによって行われます。

containing_repository属性は、オブジェクトのdefined_in属性に再帰的に従うことによって最終的に到達されるRepositoryを識別します。

within操作は、オブジェクトを包含するオブジェクトのリストを返します。オブジェクトがインタフェースまたはモジュールである場合は、それを定義するオブジェクトによってのみ包含可能です。その他のオブジェクトは、それを定義するオブジェクトにも、継承するオブジェクトにも、包含可能です。

describe操作は、インタフェースの情報が格納された構造体を返します。各インタフェースと関連付けられた記述構造体は、インタフェース定義の下に置かれます。返された構造体に記述される定義の種類は、返された構造体と共に提供されます。たとえば、describe操作が属性オブジェクトに対して呼び出されると、kindフィールドにdk_Attributeが包含され、値フィールドにAttributeDescription構造体を含むanyが包含されます。