![]() |
![]() |
|
|
CORBA インターフェイス・リポジトリのインターフェイス
この章では、BEA Tuxedo CORBA インターフェイス・リポジトリのインターフェイスについて説明します。
注記 この章に記載されている情報の大部分は、「Common Object Request Broker: Architecture and Specification, Revision 2.4.2」(2001 年 2 月) の第 10 章からの引用ですOMG 情報は、インターフェイス・リポジトリのインターフェイスの BEA Tuxedo CORBA でのインプリメンテーションを説明するために、必要に応じて変更されています。使用にあたっては OMG の許可を得ています。
BEA Tuxedo CORBA インターフェイス・リポジトリには、BEA Tuxedo ドメイン内でインプリメントされる CORBA オブジェクトのインターフェイス記述が含まれています。
インターフェイス・リポジトリは、インターフェイス・リポジトリの CORBA 定義に基づいています。これにより、CORBA で定義されるインターフェイスの適切なサブセットが提供されます。つまり、プログラマが利用できる API は、「Common Object Request Broker: Architecture and Specification Revision 2.4」での定義に従ってインプリメントされます。ただし、すべてのインターフェイスがサポートされるわけではありません。一般に、インターフェイス・リポジトリからの読み取りに必要なインターフェイスはサポートされますが、インターフェイス・リポジトリへの書き込みに必要なインターフェイスはサポートされません。また、すべての TypeCode インターフェイスがサポートされるわけではありません。
インターフェイス・リポジトリの管理は、BEA Tuxedo ソフトウェア固有のツールを使用して行われます。システム管理者はこれらのツールを使用して、インターフェイス・リポジトリを作成し、Object Management Group インターフェイス定義言語 (OMG IDL) で指定された定義を挿入し、インターフェイスを削除することができます。加えて、管理者はインターフェイス・リポジトリ・サーバが含まれるようにシステムをコンフィギュレーションしなければならない場合があります。インターフェイス・リポジトリの管理コマンドについては、『BEA Tuxedo コマンド・リファレンス
』および『BEA Tuxedo アプリケーションの設定』を参照してください。いくつかの抽象インターフェイスが、インターフェイス・リポジトリのほかのオブジェクト用の基底インターフェイスとして使用されます。インターフェイス・リポジトリ内のオブジェクトを見つけるには、共通のオペレーションのセットを使用します。これらのオペレーションは、この章で説明する抽象インターフェイス IRObject、Container、および Contained で定義されます。インターフェイス・リポジトリのオブジェクトはすべて IRObject インターフェイスから継承されます。これは、オブジェクトの実際の型を識別するオペレーションを提供するインターフェイスです。コンテナであるオブジェクトは、Container インターフェイスからナビゲーション・オペレーションを継承します。ほかのオブジェクトに包含されるオブジェクトは、ナビゲーション・オペレーションを Contained インターフェイスから継承します。IDLType インターフェイスは、インターフェイス、typedef、および無名の型など OMG IDL の型を表す、すべてのインターフェイス・リポジトリ・オブジェクトから継承されます。TypedefDef インターフェイスは、名前の付いたすべての 非インターフェイス型から継承されます。
IRObject、Contained、Container、IDLType、および TypedefDef インターフェイスは、インスタンス化できません。
インターフェイス・リポジトリ内の文字列データはすべて、ISO 8859-1 文字セットの定義に従って符号化されます。
注記 BEA Tuxedo ソフトウェアは、インターフェイス・リポジトリへの読み取り権限のみをサポートしているため、この章では Write インターフェイスには言及していません。インターフェイス・リポジトリに対して Write インターフェイスを使用しようとすると、CORBA::NO_IMPLEMENT
例外が発生します。
構造と使用方法
インターフェイス・リポジトリは、データベースとサーバという、2 つの異なったコンポーネントで構成されています。サーバは、データベースに対してオペレーションを実行します。
インターフェイス・リポジトリのデータベースは、idl2ir
管理コマンドを使用して作成され、追加されます。このコマンドについては、『BEA Tuxedo コマンド・リファレンス』および『BEA Tuxedo アプリケーションの設定』を参照してください。プログラマ側からは、インターフェイス・リポジトリに対する書き込み権限はありません。CORBA で定義されている書き込みオペレーションや、読み取り専用でない属性に対する設定オペレーションで、サポートされているものはありません。
インターフェイス・リポジトリ・データベースの読み取り権限は、常にインターフェイス・リポジトリ・サーバから与えられます。つまり、クライアントはサーバで実行されたメソッドを呼び出すことによって、データからの読み取りを行います。「CORBA Common Object Request Broker: Architecture and Specification, Revision 2.4」で定義されている読み取りオペレーションについては、この章で説明します。
プログラミング情報
サーバへのインターフェイスは、OMG IDL ファイルで定義します。OMG IDL ファイルへのアクセス方法は、ビルドされているクライアントの種類に応じて変わります。ここではスタブ・ベース、動的起動インターフェイス (DII)、および ActiveX の 3 種類のクライアントについて検討します。
スタブ・スタイルの呼び出しを使用するクライアント・アプリケーションでは、ビルド時に OMG IDL ファイルが必要です。プログラマは OMG IDL ファイルを使用して、スタブなどを生成できます。詳細については、『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』を参照してください。インターフェイス・リポジトリに対する、これ以外のアクセスは必要ありません。
動的起動インターフェイス (DII) を使用するクライアント・アプリケーションは、インターフェイス・リポジトリにプログラマティックにアクセスする必要があります。インターフェイス・リポジトリへのインターフェイスの定義はこの章に記載しています。 クライアント・アプリケーションのビルドに説明があります。インターフェイス・リポジトリにアクセスするための正確な手順は、クライアントが特定のオブジェクトに関する情報を検索するのか、またはあるインターフェイスを見つけるためにリポジトリを参照するのかによって異なります。クライアントが特定のオブジェクトに関する情報を得るには、CORBA::Object::_get_interface
メソッドを使用して InterfaceDef オブジェクトを取得します。このメソッドの記述については、「CORBA::Object::_get_interface
」を参照してください。InterfaceDef オブジェクトを使用して、クライアントはインターフェイスに関する完全な情報を取得できます。
DII クライアントがインターフェイス・リポジトリを参照できるようになるには、検索を開始するためのインターフェイス・リポジトリのオブジェクト・リファレンスを取得する必要があります。
DII クライアントは、Bootstrap オブジェクトを使用してオブジェクト・リファレンスを取得します。このメソッドについては、「Tobj_Bootstrap::register_callback_port」を参照してください。クライアントはオブジェクト・リファレンスを取得すると、インターフェイス・リポジトリ内をルートから参照できるようになります。
クライアント・アプリケーションが関連付けられているドメイン内のインターフェイス・リポジトリへのリファレンスを取得するには、クライアント・アプリケーションは次の 2 つのブートストラップ処理メカニズムのうち、どちらかを使用します。
"CORBA::Repository"
の値を持つ Tobj_Bootstrap::resolve_initial_references
オペレーションを呼び出します。このオペレーションは、クライアント・アプリケーションが現在付属しているドメイン内にある InterfaceRepository オブジェクトへのリファレンスを返します。BEA Tuxedo クライアント・ソフトウェアを使用している場合は、このメカニズムを使用します。詳細については、「Tobj_Bootstrap::resolve_initial_references」を参照してください。"CORBA::Repository"
の値を持つ CORBA::ORB::resolve_initial_references
オペレーションを呼び出します。このオペレーションは、クライアント・アプリケーションが現在付属しているドメイン内にある InterfaceRepository オブジェクトへのリファレンスを返します。サード・パーティ製のクライアント ORB を使用している場合は、このメカニズムを使用します。詳細については、「CORBA::ORB::resolve_initial_references」を参照してください。注記 DII を使用するには、OMG IDL ファイルがインターフェイス・リポジトリ内に格納されている必要があります。
ActiveX を使用するクライアント・アプリケーションは、インターフェイス・リポジトリを使用していることを認識しません。インターフェイス・リポジトリ側から見れば、Active X クライアントと DII クライアントの間に差はありません。ActiveX クライアントには、Visual Basic コードによる Bootstrap オブジェクトが含まれます。DII クライアントと同様に、ActiveX クライアントは Bootstrap オブジェクトを使用してインターフェイス・リポジトリのオブジェクト・リファレンスを取得します。このメソッドについては、「Tobj_Bootstrap::resolve_initial_references」を参照してください。クライアントはオブジェクト・リファレンスを取得すると、インターフェイス・リポジトリ内をルートから参照できるようになります。
注記 ActiveX クライアントを使用するには、OMG IDL ファイルがインターフェイス・リポジトリ内に格納されている必要があります。
パフォーマンスへの影響
インターフェイス・リポジトリへの実行時アクセスはすべて、インターフェイス・リポジトリ・サーバを介して行われます。リモート・サーバ・アプリケーションの要求では、かなりのオーバーヘッドが生じるので、設計者はこの点を認識しておく必要があります。たとえば、オブジェクト・リファレンスを使用して、オブジェクト・リファレンスに対する DII 呼び出しを行うのに必要な情報を取得するために要求される対話について以下で考察します。手順は、次のとおりです。
CORBA::Object
の _get_interface
オ
ペレーションを呼び出し、問題のオブジェクトに関連付けられた
InterfaceDef オブジェクトを取得します。これにより、オブジェクト・リ
ファレンスを作成した ORB にメッセージが送信されます。
is_a
オペレーションを呼
び出し、このオブジェクトでサポートされているインターフェイスの型を判
断します。
describe_interface
オペレーションを呼び出し、そのインターフェイスの
完全な記述 (たとえばバージョン番号、属性、およびパラメータ) を取得し
ます。これにより、インターフェイス・リポジトリにメッセージが送信さ
れ、応答が返ります。
クライアント・アプリケーションのビルド
インターフェイス・リポジトリを使用するクライアントは、インターフェイス・リポジトリのスタブ内で、リンクしている必要があります。リンク方法は、ベンダごとに異なります。クライアント・アプリケーションが BEA Tuxedo ORB を使用している場合、BEA Tuxedo ソフトウェアはスタブをライブラリ形式で提供します。したがって、プログラマはスタブの構築に、インターフェイス・リポジトリ OMG IDL ファイルを使用する必要がありません。インターフェイス・リポジトリ定義は CORBA.h
ファイルにありますが、デフォルトでは包含されていません。
注記 インターフェイス・リポジトリ定義を使用するには、クライアント・アプリケーション・コードに CORBA.h
を包含する前に、ORB_INCLUDE_REPOSITORY
マクロを定義する必要があります (例: #Define ORB_INCLUDE_REPOSITORY
)。
クライアント・アプリケーションがサード・パーティ製の ORB (たとえば ORBIX) を使用している場合、プログラマはそのベンダが提供しているメカニズムを使用しなければなりません。これには、ベンダが提供している IDL コンパイラを使用して OMG IDL ファイルからスタブを生成すること、または単にベンダが提供しているスタブに対するリンクを行うことなどのメカニズムが含まれます。
一部のサード・パーティ製 ORB には、ローカル・インターフェイス・リポジトリ機能が付属しています。この場合、ローカル・インターフェイス・リポジトリはそのベンダによって提供されたものであり、そのクライアントが必要とするインターフェイス定義が追加されています。
InterfaceRepository オブジェクトへの初期リファレンスの取得
InterfaceRepository オブジェクトへの初期リファレンスを取得するには、Bootstrap オブジェクトを使用します。Bootstrap オブジェクト・メソッドについては、「Tobj_Bootstrap::resolve_initial_references」を参照してください。
インターフェイス・リポジトリのインターフェイス
クライアント・アプリケーションは、インターフェイス・リポジトリへのアクセスに、CORBA で定義されたインターフェイスを使用します。この節では、BEA Tuxedo ソフトウェアでインプリメントされる各インターフェイスについて説明します。
注記 インターフェイス・リポジトリの BEA Tuxedo CORBA インプリメンテーションは、インターフェイスに対する読み取りオペレーションしかサポートしません。書き込みオペレーションは、インプリメントされません。
サポートしている型定義
いくつかの型が、インターフェイス・リポジトリのインターフェイス定義全体に使用されています。
module CORBA {
typedef string Identifier;
typedef string ScopedName;
typedef string RepositoryId;
enum DefinitionKind {
dk_none, dk_all,
dk_Attribute, dk_Constant, dk_Exception, dk_Interface,
dk_Module, dk_Operation, dk_Typedef,
dk_Alias, dk_Struct, dk_Union, dk_Enum,
dk_Primitive, dk_String, dk_Sequence, dk_Array,
dk_Repository,
dk_Wstring, dk_Fixed,
dk_Value, dk_ValueBox, dk_ValueMember,
dk_Native
};
};
Identifiers
は、モジュール、インターフェイス、値型、値メンバ、値ボックス、定数、typedef、例外、属性、オペレーション、およびネイティブ型を識別する、単純な名前です。ちょうど OMG IDL の識別子に対応します。Identifier
は、インターフェイス・リポジトリ全体では必ずしも一意ではありません。特定の Repository、ModuleDef、InterfaceDef、ValueDef、または OperationDef 内でのみ、一意です。
ScopedName
は、ダブルコロン (::) で区切られた、1 つまたは複数の識別子で構成される名前です。OMG IDL のスコープ指定された名前に対応します。絶対ScopedName
とは、先頭にダブルコロン (::) があり、Repository 内で定義を明確に識別するものを言います。Repository 内の絶対 ScopedName
は、OMG IDL ファイルのグローバル名に対応します。相対 ScopedName
は、先頭にダブルコロン (::) がなく、何らかのコンテキストを基準として解決される必要があります。
A RepositoryId
は、モジュール、インターフェイス、値型、値メンバ、値ボックス、ネイティブ型、定数、typedef、例外、属性、またはオペレーションを一意かつグローバルに識別するために使用される識別子です。RepositoryId は文字列として定義されるため、言語バインディングの文字列操作ルーチンで操作 (たとえばコピーや比較) が可能です。
DefinitionKind
は、インターフェイス・リポジトリ・オブジェクトの型を識別します。
IRObject インターフェイス
次に示す基底インターフェイス IRObject は、最も汎用性の高いインターフェイスを表します。ここから、Repository 自体を含む、インターフェイス・リポジトリのほかのすべてのインターフェイスが派正します。
module CORBA {
};
interface IRObject {
readonly attribute DefinitionKind def_kind;
};
def_kind
属性は、定義の型を識別します。
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
属性も付いています。BEA 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
が包含されます。
Container インターフェイス
基底インターフェイス Container は、インターフェイス・リポジトリ内に包含の階層構造を形成するために使用されます。Container は、Contained インターフェイスから派生した任意の数のオブジェクトを包含できます。Repository を除く Container はすべて、Contained からも派生します。
module CORBA {
typedef sequence <Contained> ContainedSeq;
interface Container : IRObject {
Contained lookup (in ScopedName search_name);
ContainedSeq contents (
in DefinitionKind limit_type,
in boolean exclude_inherited
);
ContainedSeq lookup_name (
in Identifier search_name,
in long levels_to_search,
in DefinitionKind limit_type,
in boolean exclude_inherited
);
struct Description {
Contained contained_object;
DefinitionKind kind;
any value;
};
typedef sequence<Description> DescriptionSeq;
DescriptionSeq describe_contents (
in DefinitionKind limit_type,
in boolean exclude_inherited,
in long max_returned_objs
);
};
};
lookup
オペレーションは、スコープ指定された名前を指定されて、このコンテナと関連する定義を見つけます。名前のスコープ指定には、OMG IDL 規則が使用されます。ダブルコロン (::) が先頭に付く、絶対スコープ指定された名前は、包含 Repository と関連する定義を見つけます。そのようなオブジェクトが見つからなければ、ニル・オブジェクト・リファレンスが返されます。
contents
オペレーションは、オブジェクトに直接包含または継承されるオブジェクトのリストを返します。このオペレーションは、オブジェクトの階層構造内を移動するのに使用されます。クライアントはこのオペレーションを使用し、Repository オブジェクトを先頭に、Repository に包含されているすべてのオブジェクト、リポジトリ内のモジュールに包含されているすべてのオブジェクト、特定モジュール内のすべてのインターフェイスおよび値型などを、リストします。
limit_type
dk_all
に limit_type
が設定されると、すべての型のオブジェクトが返されます。たとえばこれが InterfaceDef であれば、属性、オペレーション、および例外オブジェクトがすべて返されます。limit_type
が特定のインターフェイスに設定されると、その型のオブジェクトのみが返されます。
たとえば、limit_type
が dk_Attribute
に設定されると、属性オブジェクトのみが返されます。
exclude_inherited
TRUE
に設定された継承オブジェクトは、存在したとしても、返されません。FALSE に設定されている場合、継承されたために包含されているオブジェクトも、オブジェクト内で定義されたために包含されているオブジェクトも、すべて返されます。
あるオブジェクトを、特定のオブジェクト内またはそのオブジェクトに包含されているオブジェクト内で名前を指定して見つけるには、lookup_name
オペレーションを使用します。describe_contents
オペレーションは、contents
オペレーションと describe
オペレーションを組み合わせます。contents オペレーションから返された各オブジェクトについて、そのオブジェクトの記述が返されます。つまり、そのオブジェクトの describe
オペレーションが呼び出され、その結果が返されます。
あるオブジェクトを、特定のオブジェクト内またはそのオブジェクトに包含されているオブジェクト内で名前を指定して見つけるには、lookup_name
オペレーションを使用します。
search_name
検索する名前を指定します。
levels_to_search
ルックアップの対象をオペレーションの呼び出し先のオブジェクトに限定するのか、そのオブジェクトに包含されている各オブジェクトを検索するのかを制御します。levels_to_search
を -1 に設定すると、現在のオブジェクトと、すべての包含オブジェクトが検索されます。levels_to_search
を 1 に設定すると、現在のオブジェクトのみが検索されます。0 または -1 以外の負数とした levels_to_search
の値の使用は、未定義です。
describe_contents
オペレーションは、contents オペレーションと describe
オペレーションを組み合わせます。contents オペレーションから返された各オブジェクトについて、そのオブジェクトの記述が返されます。つまり、そのオブジェクトの describe オペレーションが呼び出され、その結果が返されます。
max_returned_objs
呼び出しで返されるオブジェクト数を、指定された数に制限します。パラメータを -1 に設定すると、包含オブジェクトがすべて返されます。
IDLType インターフェイス
次に示す基底インターフェイス IDLType は、OMG IDL の型を表すすべてのインターフェイス・リポジトリ・オブジェクトによって継承されます。これは型を記述する TypeCode へのアクセスを提供し、IDL 型定義への参照が必要な場合には常に、ほかのインターフェイスの定義に使用されます。
module CORBA {
interface IDLType : IRObject {
readonly attribute TypeCode type;
};
};
type
属性は、IDLType から派生したオブジェクトによって定義される型を記述します。
Repository インターフェイス
次に示す Repository は、インターフェイス・リポジトリへのグローバル・アクセスを提供するインターフェイスです。Repository オブジェクトには、定数、typedef、例外、インターフェイス、値型、値ボックス、ネイティブ型、およびモジュールを含めることができます。これは Container から継承されるので、name
と id
のどちらによっても、任意の定義の参照に使用できます。この定義は、グローバルな定義でも、モジュールまたはインターフェイス内での定義でもかまいません。
Repository は、Container からのみ派生するものであって、Contained からは派生しないので、RepositoryId が関連付けられることはありません。これはデフォルトでは、Repository オブジェクトに直接包含されている ModuleDef、InterfaceDef、ValueDef、ValueBoxDef、TypedefDef、ExceptionDef、および ConstantDef の記述構造体における defined_in フィールドに値を割り当てる目的で、RepositoryId ""
(空の文字列) を備えていると見なされます。
module CORBA {
interface Repository : Container {
Contained lookup_id (in RepositoryId search_id);
TypeCode get_canonical_typecode(in TypeCode tc);
PrimitiveDef get_primitive (in PrimitiveKind kind);
};
};
lookup_id
オペレーションは、RepositoryId
を指定して、Repository 内のオブジェクトを検索する際に使用します。Repository に search_id
の定義が含まれない場合、ニル・オブジェクト・リファレンスが返されます。
get_canonical_typecode
オペレーションは、インターフェイス・リポジトリ内の TypeCode を調べ、すべてのリポジトリの ID、名前、および member_names が含まれる同等な TypeCode を返します。配列およびシーケンスの TypeCode や以前の ORB からの TypeCode の場合など、最上位の TypeCode が RepositoryId を含まない場合、またはターゲット・リポジトリ内に見つからない RepositoryId を含む場合、元の TypeCode の各メンバ TypeCode に対して get_canonical_typecode
を再帰的に呼び出すことによって、新規の TypeCode が構築されます。
get_primitive
オペレーションは、指定した kind 属性を備えた PrimitiveDef へのリファレンスを返します。PrimitiveDefs はすべて不変のものであり、Repository によって所有されます。
ModuleDef インターフェイス
次に示す ModuleDef は、定数、typedef、例外、インターフェイス、値型、値ボックス、ネイティブ型、およびその他のモジュール・オブジェクトを包含することができます。
module CORBA {
interface ModuleDef : Container, Contained {
};
struct ModuleDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
};
};
継承される ModuleDef オブジェクトの describe
オペレーションは、ModuleDescription を返します。
ConstantDef インターフェイス
次に示す ConstantDef オブジェクトは、名前の付いた定数を定義します。
module CORBA {
interface ConstantDef : Contained {
readonly attribute TypeCode type;
readonly attribute IDLType type_def;
readonly attribute any value;
};
struct ConstantDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
TypeCode type;
any value;
};
};
type
定数の型を記述する TypeCode を指定します。定数の型は、単純な型 (long、short、float、char、string、octet など) の 1 つとします。
type_def
定数の型定義を識別します。
value
定数の値が含まれます。値の計算 (たとえば、「1+2」と定義されたという事実) は含みません。
ConstantDef オブジェクトの describe
オペレーションは、ConstantDescription を返します。
TypedefDef インターフェイス
次に示す TypedefDef は、すべての名前の付いた非オブジェクト型 (構造体、共用体、列挙、およびエイリアス) の基底インターフェイスとして使用される、抽象インターフェイスです。TypedefDef インターフェイスは、プリミティブまたは無名型の定義オブジェクトによっては継承されません。
module CORBA {
interface TypedefDef : Contained, IDLType {
};
struct TypeDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
TypeCode type;
};
};
継承される TypedefDef から派生したインターフェイスのための describe
オペレーションは、TypeDescription を返します。
StructDef
次に示す StructDef は、OMG IDL の構造体定義を表します。これには struct のメンバが包含されます。
module CORBA {
struct StructMember {
Identifier name;
TypeCode type;
IDLType type_def;
};
typedef sequence <StructMember> StructMemberSeq;
interface StructDef : TypedefDef, Container{
readonly attribute StructMemberSeq members;
};
};
members
属性には、各構造体メンバの記述が包含されます。
継承される type
属性は、構造体を記述する tk_struct
TypeCode です。
UnionDef
次に示す UnionDef は、OMG IDL の共用体定義を表します。これには共用体のメンバが包含されます。
module CORBA {
struct UnionMember {
Identifier name;
any label;
TypeCode type;
IDLType type_def;
};
typedef sequence <UnionMember> UnionMemberSeq;
interface UnionDef : TypedefDef, Container {
readonly attribute TypeCode discriminator_type;
readonly attribute IDLType discriminator_type_def;
readonly attribute UnionMemberSeq members;
};
};
discriminator_type および discriminator_type_def
共用体の区別子型を記述および識別します。
members
各共用体メンバの記述が包含されます。各 UnionMemberDescription のラベルは、discriminator_type
のそれぞれ異なる値です。隣接するメンバは、同じ名前を持つことができます。同名のメンバ同士は、型も同じである必要があります。octet 型で値が 0 のラベルは、デフォルトの共用体メンバであることを示します。
継承される type
属性は、共用体を記述する tk_union
TypeCode です。
EnumDef
次に示す EnumDef は、OMG IDL の列挙の定義を表します。
module CORBA {
typedef sequence <Identifier> EnumMemberSeq;
interface EnumDef : TypedefDef {
readonly attribute EnumMemberSeq members;
};
};
members
列挙値の各々として考えられる個別の名前が包含されます。
継承される type
属性は、列挙を記述する tk_enum
TypeCode です。
AliasDef
次に示す AliasDef は、ほかの定義のエイリアスを行う OMG IDL の typedef を表します。
module CORBA {
interface AliasDef : TypedefDef {
readonly attribute IDLType original_type_def;
};
};
original_type_def
エイリアスの対象となる型を識別します。
継承される type
属性は、エイリアスを記述する tk_alias
TypeCode です。
PrimitiveDef
次に示す PrimitiveDef は、OMG IDL のプリミティブ型の 1 つを表します。プリミティブ型には名前が付かないので、このインターフェイスは TypedefDef
からも Contained
からも派生しません。
module CORBA {
enum PrimitiveKind {
pk_null, pk_void, pk_short, pk_long, pk_ushort, pk_ulong,
pk_float, pk_double, pk_boolean, pk_char, pk_octet,
pk_any, pk_TypeCode, pk_Principal, pk_string, pk_objref,
pk_longlong, pk_ulonglong, pk_longdouble, pk_wchar, pk_wstring,
pk_value_base
};
interface PrimitiveDef: IDLType {
readonly attribute PrimitiveKind kind;
};
};
kind
PrimitiveDef で表されるプリミティブ型を示します。種類が pk_null
の PrimitiveDef はありません。種類が pk_string
の PrimitiveDef は、アンバウンディッド文字列を表します。
種類が pk_objref
の PrimitiveDef は、OMG IDL の Object 型を表します。種類が pk_value_base
の PrimitiveDef は、OMG IDL の ValueBase 型を表します。
継承される type
属性は、プリミティブ型を記述します。
PrimitiveDefs はすべて Repository によって所有されます。これらに対するリファレンスは、Repository::get_primitive
を使用して取得されます。
StringDef
StringDef は、IDL のバインドされた文字列型を表します。アンバウンディッド文字列型は、PrimitiveDef として表されます。文字列型は無名なので、このインターフェイスは TypedefDef からも Contained からも派生しません。
module CORBA {
interface StringDef : IDLType {
attribute unsigned long bound;
};
};
bound
属性は、文字列内の最大文字数を指定します。0 にはできません。
継承される type
属性は、文字列を記述する tk_string
TypeCode です。
WstringDef
WstringDef は、IDL の ワイド文字列を表します。バインドされていないワイド文字列型は、PrimitiveDef として表されます。ワイド文字列型は無名なので、このインターフェイスは TypedefDef からも Contained からも派生しません。
module CORBA {
interface WstringDef : IDLType {
attribute unsigned long bound;
};
};
bound
属性は、ワイド文字列内のワイド文字の最大数を指定します。0 にはできません。
継承される type
属性は、ワイド文字列を記述する tk_wstring
TypeCode です。
ExceptionDef
次に示す ExceptionDef は、例外定義を表します。構造体、共用体、および enum を包含することができます。
module CORBA {
interface ExceptionDef : Contained, Container {
readonly attribute TypeCode type;
readonly attribute StructMemberSeq members;
};
struct ExceptionDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
TypeCode type;
};
};
type
例外を記述する tk_except
TypeCode です。
members
任意の例外メンバを記述します。
ExceptionDef オブジェクトの describe
オペレーションは、ExceptionDescription を返します。
AttributeDef
次に示す AttributeDef は、インターフェイスの属性を定義する情報を表します。
module CORBA {
enum AttributeMode {ATTR_NORMAL, ATTR_READONLY};
interface AttributeDef : Contained {
readonly attribute TypeCode type;
attribute IDLType type_def;
attribute AttributeMode mode;
};
struct AttributeDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
TypeCode type;
AttributeMode mode;
};
};
type
この属性のの型を記述する TypeCode を指定します。
type_def
この属性の型を定義するオブジェクトを識別します。
mode
この属性を読み取り専用に指定するか、または読み取り/書き込みの権限を指定します。
AttributeDef オブジェクトの describe
オペレーションは、AttributeDescription を返します。
OperationDef
次に示す OperationDef は、インターフェイスのオペレーションを定義するのに必要な情報を表します。
module CORBA {
enum OperationMode {OP_NORMAL, OP_ONEWAY};
enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT};
struct ParameterDescription {
Identifier name;
TypeCode type;
IDLType type_def;
ParameterMode mode;
};
typedef sequence <ParameterDescription> ParDescriptionSeq;
typedef Identifier ContextIdentifier;
typedef sequence <ContextIdentifier> ContextIdSeq;
typedef sequence <ExceptionDef> ExceptionDefSeq;
typedef sequence <ExceptionDescription> ExcDescriptionSeq;
interface OperationDef : Contained {
readonly attribute TypeCode result;
readonly attribute IDLType result_def;
readonly attribute ParDescriptionSeq params;
readonly attribute OperationMode mode;
readonly attribute ContextIdSeq contexts;
readonly attribute ExceptionDefSeq exceptions;
};
struct OperationDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
TypeCode result;
OperationMode mode;
ContextIdSeq contexts;
ParDescriptionSeq parameters;
ExcDescriptionSeq exceptions;
};
};
result
オペレーションの戻り値の型を記述する TypeCode です。
result_def
戻り値の型の定義を識別します。
params
オペレーションのパラメータを記述します。ParameterDescription 構造体のシーケンスです。シーケンス中の ParameterDescriptions の順序は重要です。各構造体の name
メンバは、パラメータ名を指定します。type
メンバは、パラメータの型を記述する TypeCode です。type_def
メンバは、パラメータの型の定義を識別します。mode
メンバは、パラメータが in パラメータ、out パラメータ、または inout パラメータのうちどれであるのかを示します。
mode
オペレーションの mode
は、oneway であるか、normal であるかのどちらかです。oneway の場合、出力は返りません。
contexts
オペレーションに適用されるコンテキスト識別子のリストを指定します。
exceptions
オペレーションによって生じる可能性のある例外の型のリストを指定します。
継承される OperationDef オブジェクトの describe
オペレーションは、OperationDescription を返します。
継承される describe_contents
オペレーションは、このオペレーションについて定義されている各パラメータの記述をはじめとする、このオペレーションの完全な記述を提供します。
InterfaceDef
次に示す InterfaceDef オブジェクトは、インターフェイス定義を表します。定数、typedef、例外、オペレーション、および属性を包含することができます。
module CORBA {
interface InterfaceDef;
typedef sequence <InterfaceDef> InterfaceDefSeq;
typedef sequence <RepositoryId> RepositoryIdSeq;
typedef sequence <OperationDescription> OpDescriptionSeq;
typedef sequence <AttributeDescription> AttrDescriptionSeq;
interface InterfaceDef : Container, Contained, IDLType {
readonly attribute InterfaceDefSeq base_interfaces;
readonly attribute boolean is_abstract;
boolean is_a (in RepositoryId interface_id);
struct FullInterfaceDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
OpDescriptionSeq operations;
AttrDescriptionSeq attributes;
RepositoryIdSeq base_interfaces;
TypeCode type;
boolean is_abstract;
};
FullInterfaceDescription describe_interface();
};
struct InterfaceDescription {
Identifier name;
RepositoryId id;
RepositoryId defined_in;
VersionSpec version;
RepositoryIdSeq base_interfaces;
boolean is_abstract;
};
};
base_interfaces
属性は、このインターフェイスの継承元であるすべてのインターフェイスをリストします。
インターフェイスが抽象インターフェイス型である場合、is_abstract
属性は TRUE
です。
is_a
オペレーションは、呼び出し先のインターフェイスが、interface_id
パラメータによって識別されたインターフェイスと同一であるか、このインターフェイスから直接的または間接的に継承したものである場合は、TRUE
を返します。それ以外の場合には、FALSE
を返します。
describe_interface
オペレーションは、インターフェイスを記述する FullInterfaceDescription を返します。これには、オペレーションや属性も含まれています。FullInterfaceDescription 構造体のオペレーションおよび属性の各フィールドには、記述されているインターフェイスの継承グラフの推移閉包におけるすべてのオペレーションと属性が含まれます。
継承される InterfaceDef の describe
オペレーションは、InterfaceDescription を返します。
継承される contents
オペレーションは、この InterfaceDef で定義される定数、typedef、および例外のリストと、この InterfaceDef で定義または継承される属性およびオペレーションのリストを返します。exclude_inherited
パラメータが TRUE
に設定されていれば、このインターフェイス内で定義された属性とオペレーションのみが返されます。exclude_inherited
パラメータが FALSE
に設定されていれば、すべての属性とオペレーションが返されます。
![]() |
![]() |
![]() |
|
Copyright © 2001, BEA Systems, Inc. All rights reserved.
|