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が包含されます。
親トピック: インタフェース・リポジトリのインタフェース