CORBAプログラミング・リファレンス

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

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文字セットの定義に従ってエンコードされます。

注意: Oracle Tuxedoソフトウェアは、インタフェース・リポジトリへの読取り権限のみをサポートしているため、この章ではWriteインタフェースには言及していません。インタフェース・リポジトリに対してWriteインタフェースを使用しようとすると、CORBA::NO_IMPLEMENT例外が発生します。

 


構造と使用方法

インタフェース・リポジトリは、データベースとサーバーという、2つの異なったコンポーネントで構成されています。サーバーは、データベースに対してオペレーションを実行します。

インタフェース・リポジトリのデータベースは、idl2ir管理コマンドを使用して作成され、追加されます。このコマンドについては、『Oracle Tuxedoコマンド・リファレンス』および『Oracle Tuxedoアプリケーションの設定』を参照してください。プログラマ側からは、インタフェース・リポジトリに対する書込み権限はありません。CORBAで定義されている書込みオペレーションや、読取り専用でない属性に対する設定オペレーションで、サポートされているものはありません。

インタフェース・リポジトリ・データベースの読取り権限は、常にインタフェース・リポジトリ・サーバーから与えられます。つまり、クライアントはサーバーで実行されたメソッドを呼び出すことによって、データからの読取りを行います。「CORBA Common Object Request Broker: Architecture and Specification, Revision 2.4」で定義されている読取りオペレーションについては、この章で説明します。

プログラミング情報

サーバーへのインタフェースは、OMG IDLファイルで定義します。OMG IDLファイルへのアクセス方法は、ビルドされているクライアントの種類に応じて変わります。ここではスタブ・ベースおよび動的起動インタフェース(DII)の2種類のクライアントについて検討します。

スタブ・スタイルの呼出しを使用するクライアント・アプリケーションでは、ビルド時にOMG IDLファイルが必要です。プログラマはOMG IDLファイルを使用して、スタブなどを生成できます。詳細は、『CORBAクライアント・アプリケーションの作成』を参照してください。インタフェース・リポジトリに対する、これ以外のアクセスは必要ありません。

動的起動インタフェース(DII)を使用するクライアント・アプリケーションは、インタフェース・リポジトリにプログラマティックにアクセスする必要があります。インタフェース・リポジトリへのインタフェースはこの章で定義されており、「クライアント・アプリケーションのビルド」に説明があります。インタフェース・リポジトリにアクセスするための正確な手順は、クライアントが特定のオブジェクトに関する情報を検索するのか、またはあるインタフェースを見つけるためにリポジトリを参照するのかによって異なります。クライアントが特定のオブジェクトに関する情報を得るには、CORBA::Object::_get_interfaceメソッドを使用してInterfaceDefオブジェクトを取得します。(このメソッドの説明は、「CORBA::Object::_get_interface」を参照してください。)InterfaceDefオブジェクトを使用して、クライアントはインタフェースに関する完全な情報を取得できます。

DIIクライアントがインタフェース・リポジトリを参照できるようになるには、検索を開始するためのインタフェース・リポジトリのオブジェクト参照を取得する必要があります。

DIIクライアントは、Bootstrapオブジェクトを使用してオブジェクト参照を取得します。このメソッドについては、「Tobj_Bootstrap::register_callback_port」を参照してください。クライアントはオブジェクト参照を取得すると、インタフェース・リポジトリ内をルートから参照できるようになります。

クライアント・アプリケーションが関連付けられているドメイン内のインタフェース・リポジトリへのリファレンスを取得するには、クライアント・アプリケーションは次の2つのブートストラップ処理メカニズムのうち、どちらかを使用します。

注意: DIIを使用するには、OMG IDLファイルがインタフェース・リポジトリ内に格納されている必要があります。

パフォーマンスへの影響

インタフェース・リポジトリへの実行時アクセスはすべて、インタフェース・リポジトリ・サーバーを介して行われます。リモート・サーバー・アプリケーションのリクエストでは、かなりのオーバーヘッドが生じるので、設計者はこの点を認識しておく必要があります。たとえば、オブジェクト参照を使用して、オブジェクト参照に対するDII呼出しを行うのに必要な情報を取得するために要求される対話について以下で考察します。手順は、次のとおりです。

  1. クライアント・アプリケーションが、CORBA::Objectの_get_interfaceオペレーションを呼び出し、問題のオブジェクトに関連付けられたInterfaceDefオブジェクトを取得します。これにより、オブジェクト参照を作成したORBにメッセージが送信されます。
  2. ORBは、クライアントにInterfaceDefオブジェクトを返します。
  3. クライアントはオブジェクトの1つまたは複数の_is_aオペレーションを呼び出し、このオブジェクトでサポートされているインタフェースの型を判断します。
  4. インタフェースを識別すると、クライアントはInterfaceオブジェクトのdescribe_interfaceオペレーションを呼び出し、そのインタフェースの完全な記述(たとえばバージョン番号、属性、およびパラメータ)を取得します。これにより、インタフェース・リポジトリにメッセージが送信され、応答が返ります。
  5. これで、クライアントがDIIリクエストを構成する準備が整いました。

 


クライアント・アプリケーションのビルド

インタフェース・リポジトリを使用するクライアントは、インタフェース・リポジトリのスタブ内で、リンクしている必要があります。リンク方法は、ベンダーごとに異なります。クライアント・アプリケーションが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ソフトウェアで実装される各インタフェースについて説明します。

注意: インタフェース・リポジトリのOracle 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は、先頭にダブル・コロン(::)がなく、何らかのコンテキストを基準として解決される必要があります。

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

dk_alllimit_typeが設定されると、すべての型のオブジェクトが返されます。たとえばこれが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から継承されるので、nameidのどちらによっても、任意の定義のルックアップに使用できます。

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は、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に設定されていれば、すべての属性とオペレーションが返されます。


  先頭に戻る       前  次