目次 前 次 PDF


CORBAインタフェース・リポジトリのインタフェース

CORBAインタフェース・リポジトリのインタフェース
この章では、Oracle Tuxedo CORBAインタフェース・リポジトリのインタフェースについて説明します。
注意:
この章に記載されている情報の大部分は、『Common Object Request Broker: Architecture and Specification, Revision 2.4.2』(2001年2月)の第10章からの引用です。OMG情報は、インタフェース・リポジトリのインタフェースのOracle Tuxedo CORBAでの実装を説明するために、必要に応じて変更されています。OMGの許可を得て使用されています。
Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、Tuxedo 9.xではサポートされなくなりました。 Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBのすべてのテキスト・リファレンスや関連するサンプル・コードは、以下の場合にのみ使用してください。
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやマニュアルは提供していません。
Oracle Tuxedo CORBAインタフェース・リポジトリには、Oracle Tuxedoドメイン内で実装されるCORBAオブジェクトのインタフェース記述が含まれています。
インタフェース・リポジトリは、インタフェース・リポジトリのCORBA定義に基づいています。これにより、CORBAで定義されるインタフェースの適切なサブセットが提供されます。つまり、プログラマが使用できるAPIは、『Common Object Request Broker: Architecture and Specification Revision 2.4』での定義に従って実装されます。ただし、すべてのインタフェースがサポートされるわけではありません。一般に、インタフェース・リポジトリからの読取りに必要なインタフェースはサポートされますが、インタフェース・リポジトリへの書込みに必要なインタフェースはサポートされません。また、すべてのTypeCodeインタフェースがサポートされるわけではありません。
インタフェース・リポジトリの管理は、Oracle Tuxedoソフトウェア固有のツールを使用して実行されます。システム管理者はこれらのツールを使用して、インタフェース・リポジトリを作成し、Object Management Groupインタフェース定義言語(OMG IDL)で指定された定義を挿入し、インタフェースを削除できます。加えて、管理者は、インタフェース・リポジトリ・サーバーが含まれるようにシステムを構成することが必要になる場合があります。インタフェース・リポジトリの管理コマンドの詳細は、『Oracle Tuxedoコマンド・リファレンス』および『Oracle Tuxedoアプリケーションの設定』を参照してください。
いくつかの抽象インタフェースが、インタフェース・リポジトリの他のオブジェクト用の基底インタフェースとして使用されます。インタフェース・リポジトリ内のオブジェクトを見つけるには、共通の操作のセットを使用します。これらの操作は、この章で説明する抽象インタフェースIRObject、ContainerおよびContainedで定義されます。インタフェース・リポジトリのオブジェクトはすべてIRObjectインタフェースから継承されます。これは、オブジェクトの実際の型を識別する操作を提供するインタフェースです。コンテナであるオブジェクトは、Containerインタフェースからナビゲーション操作を継承します。他のオブジェクトに包含されるオブジェクトは、ナビゲーション操作をContainedインタフェースから継承します。IDLTypeインタフェースは、インタフェース、typedefおよび無名の型などOMG IDLの型を表す、すべてのインタフェース・リポジトリ・オブジェクトによって継承されます。TypedefDefインタフェースは、名前付きのすべての非インタフェース型によって継承されます。
IRObject、Contained、Container、IDLType、およびTypedefDefインタフェースは、インスタンス化できません。
インタフェース・リポジトリ内の文字列データはすべて、ISO 8859-1文字セットの定義に従ってエンコードされます。
注意:
構造と使用方法
インタフェース・リポジトリは、データベースとサーバーという、2つの異なったコンポーネントで構成されています。サーバーは、データベースに対して操作を実行します。
インタフェース・リポジトリのデータベースは、idl2ir管理コマンドを使用して作成され、追加されます。このコマンドについては、『Oracle Tuxedoコマンド・リファレンス』および『Oracle Tuxedoアプリケーションの設定』を参照してください。プログラマ側からは、インタフェース・リポジトリに対する書込み権限はありません。CORBAで定義されている書込み操作や、読取り専用でない属性に対する設定操作で、サポートされているものはありません。
インタフェース・リポジトリ・データベースの読取り権限は、常にインタフェース・リポジトリ・サーバーから与えられます。つまり、クライアントはサーバーで実行されたメソッドを呼び出すことによって、データベースからの読取りを実行します。『CORBA Common Object Request Broker: Architecture and Specification, Revision 2.4』で定義されている読取り操作については、この章で説明します。
プログラミング情報
サーバーへのインタフェースは、OMG IDLファイルで定義されます。OMG IDLファイルへのアクセス方法は、ビルド中のクライアントの種類によって異なります。スタブ・ベースおよび動的起動インタフェース(DII)の3種類のクライアントが検討されます。
スタブスタイルの呼出しを使用するクライアント・アプリケーションでは、ビルド時にOMG IDLファイルが必要です。プログラマは、OMG IDLファイルを使用してスタブの生成などを実行できます。(詳細は、『CORBAクライアント・アプリケーションの作成』を参照してください。)インタフェース・リポジトリに対する、これ以外のアクセスは必要ありません。
動的起動インタフェース(DII)を使用するクライアント・アプリケーションは、インタフェース・リポジトリにプログラムでアクセスする必要があります。インタフェース・リポジトリへのインタフェースはこの章で定義されており、10-4ページの「クライアント・アプリケーションのビルド」に説明があります。インタフェース・リポジトリにアクセスするための正確な手順は、クライアントが特定のオブジェクトに関する情報を検索するのか、またはあるインタフェースを見つけるためにリポジトリを参照するのかによって異なります。クライアントが特定のオブジェクトに関する情報を得るには、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オブジェクトへのリファレンスを返します。Oracle Tuxedoクライアント・ソフトウェアを使用している場合は、このメカニズムを使用します。詳細は、「Tobj_Bootstrap::resolve_initial_references」という項を参照してください。
"CORBA::Repository"の値を持つCORBA::ORB::resolve_initial_references操作を呼び出します。この操作は、クライアント・アプリケーションが現在付属しているドメイン内にあるInterfaceRepositoryオブジェクトへのリファレンスを返します。サード・パーティ製のクライアントORBを使用している場合は、このメカニズムを使用します。詳細は、「CORBA::ORB::resolve_initial_references」という項を参照してください。
注意:
パフォーマンスへの影響
インタフェース・リポジトリへの実行時アクセスはすべて、インタフェース・リポジトリ・サーバーを経由します。リモート・サーバー・アプリケーションのリクエストでは、多大なオーバーヘッドが生じるため、設計者はこの点を認識しておく必要があります。たとえば、オブジェクト参照を使用する必要のある対話の例を示します。そのオブジェクト参照に対するDII呼出しを実行するために必要な情報を取得するとします。手順は次のとおりです。
1.
クライアント・アプリケーションが、CORBA::Objectの_get_interface操作を呼び出し、問題のオブジェクトに関連付けられたInterfaceDefオブジェクトを取得します。これにより、オブジェクト参照を作成したORBにメッセージが送信されます。
2.
3.
クライアントはオブジェクトの1つ以上の_is_a操作を呼び出し、このオブジェクトでサポートされているインタフェースの型を判断します。
4.
インタフェースを識別すると、クライアントはInterfaceオブジェクトのdescribe_interface操作を呼び出し、そのインタフェースの完全な記述(たとえばバージョン番号、属性およびパラメータ)を取得します。これにより、インタフェース・リポジトリにメッセージが送信され、応答が返ります。
5.
クライアント・アプリケーションのビルド
インタフェース・リポジトリを使用するクライアントは、インタフェース・リポジトリのスタブ内で、リンクしている必要があります。リンク方法は、ベンダーごとに異なります。クライアント・アプリケーションがOracle Tuxedo ORBを使用している場合、Oracle 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で定義されたインタフェースを使用します。この項では、Oracle Tuxedoソフトウェアで実装される各インタフェースについて説明します。
注意:
サポートしている型定義
いくつかの型が、インタフェース・リポジトリのインタフェース定義全体に使用されています。
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は、先頭にダブル・コロン(::)がなく、何らかのコンテキストを基準として解決される必要があります。
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属性も付いています。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が包含されます。
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と関連する定義を見つけます。そのようなオブジェクトが見つからなければ、nilオブジェクト参照が返されます。
contents操作は、オブジェクトに直接包含または継承されるオブジェクトのリストを返します。この操作は、オブジェクトの階層構造内を移動するのに使用されます。クライアントはこの操作を使用し、Repositoryオブジェクトを先頭に、Repositoryに包含されているすべてのオブジェクト、リポジトリ内のモジュールに包含されているすべてのオブジェクト、特定モジュール内のすべてのインタフェースおよび値型などをリストします。
limit_type
limit_typedk_allに設定されると、すべての型のオブジェクトが返されます。たとえばこれがInterfaceDefであれば、属性、操作、および例外オブジェクトがすべて返されます。limit_typeが特定のインタフェースに設定されると、
その型のオブジェクトのみが返されます。たとえば、limit_typedk_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の定義が含まれない場合、nilオブジェクト参照が返されます。
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は、IDLのValueBase型を表します。
継承されるtype属性は、プリミティブ型を記述します。
PrimitiveDefはすべて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構造体のシーケンスです。シーケンス中のParameterDescriptionの順序は重要です。各構造体のnameメンバーは、パラメータ名を指定します。typeメンバーは、パラメータの型を記述するTypeCodeです。type_defメンバーは、パラメータの型の定義を識別します。modeメンバーは、パラメータがinパラメータ、outパラメータ、またはinoutパラメータのうちどれであるのかを示します。
mode
操作のmodeは、一方向(つまり、出力が返されない)か、または通常です。
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 ©1994, 2017,Oracle and/or its affiliates. All rights reserved