bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > CORBA 技術情報 > CORBA オブジェクト |
CORBA 技術情報
|
CORBA オブジェクト
CORBA プログラミングの説明を有意義にするには、まず、CORBA とは何なのかということと、BEA Tuxedo の情報で使われるオブジェクト用語を理解しておく必要があります。
ここでは、以下の内容について説明します。
オブジェクトの定義は、アーキテクチャやプログラミング言語によってさまざまです。たとえば C++ オブジェクトの概念は、CORBA オブジェクトの概念とは少し異なります。また、Component Object Model (COM) オブジェクトの概念も CORBA オブジェクトの概念とはかなり異なります。
最も重要なことは、この章の CORBA オブジェクトの概念が Object Management Group (OMG) によって提示されている定義と一致しているということです。OMG からは、オブジェクトの仕様やオブジェクトの細部を規定するほかの文書が多く発行されています。
CORBA オブジェクトの定義
CORBA オブジェクトは、単独では存在し得ないという意味において仮想のエンティティですが、その CORBA オブジェクトのリファレンスを利用し、クライアント・アプリケーションによってそのオブジェクトのオペレーションが要求された時点で実体化されます。CORBA オブジェクトのリファレンスは、オブジェクト・リファレンスと呼ばれます。オブジェクト・リファレンスは、BEA Tuxedo システムで CORBA オブジェクトを指定し操作できるようにする唯一の手段です。オブジェクト・リファレンスの詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
クライアント・アプリケーションまたはサーバ・アプリケーションによってオブジェクト・リファレンスを使用してオブジェクトに対する要求が発行されると、そのオブジェクトがまだメモリでアクティブになっていない場合は、BEA Tuxedo サーバ・アプリケーションでオブジェクト・リファレンスで指定されたオブジェクトのインスタンス化が行われます (要求は常にオブジェクトの特定のオペレーション呼び出しにマッピングされる)。
通常、オブジェクトをインスタンス化する過程では、サーバ・アプリケーションによってオブジェクトの状態が初期化されます。その際、オブジェクトの状態はデータベースなどの永続ストレージから読み込まれる場合もあります。
オブジェクトには、以下のために必要なすべてのデータが格納されます。
CORBA オブジェクトの実体化
CORBA オブジェクトを構成するデータは、データベースのレコードをベースとする場合があります。そのデータベースのレコードは、永続的なオブジェクトの状態です。このレコードは、次のように操作が行われたときに BEA Tuxedo ドメインの CORBA オブジェクトからアクセスできるようになります。
言語オブジェクトはアプリケーションの実行の境界内にのみ存在しますが、CORBA オブジェクトはプロセスやマシン・システムをまたがって存在できます。BEA Tuxedo システムには、オブジェクトを作成し、そのオブジェクトをアプリケーションからアクセス可能にするためのメカニズムがあります。
BEA Tuxedo CORBA サーバ・アプリケーションのプログラマは、オブジェクトの状態を初期化するコードとオブジェクトがアクティブでなくなったときにそのオブジェクトの状態を処理するコードを記述する必要があります。オブジェクトのデータが永続ストレージにある場合、このコードには永続ストレージのデータを読み書きするオペレーションが含まれます。サーバ・アプリケーション開発の詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
CORBA オブジェクトの構成要素
通常の CORBA オブジェクトの構成要素は次のとおりです (図も参照)。
以降の節では、オブジェクトの各構成要素を詳しく説明します。
オブジェクト ID
オブジェクト ID (OID) は、オブジェクトとその状態 (データベース・レコードなど) を関連付け、オブジェクトのインスタンスを識別します。ファクトリでオブジェクト・リファレンスが作成されると、そのオブジェクト・リファレンスの要求でファクトリに渡されるパラメータに基づいた OID が割り当てられます。
注記 サーバ・アプリケーションのプログラマは、BEA Tuxedo クライアント/サーバ・アプリケーションで使用されるファクトリを作成する必要があります。プログラマは、OID を割り当てるコードを記述しなければなりません。ファクトリの説明およびファクトリ作成の例については、『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
BEA Tuxedo システムでは、次の情報を利用してオブジェクトをインスタンス化する方法を指定できます。
オブジェクト・インターフェイス
オブジェクトのインターフェイス (アプリケーションの OMG IDL ファイルで記述) は、データおよびオブジェクトに対して実行できるオペレーションを識別します。たとえば、University 窓口オブジェクトのインターフェイスでは次のものが識別されます。
CORBA オブジェクトの特性の 1 つは、インターフェイスの定義が実行時にそのデータとオペレーションから切り離されることです。CORBA システムでは、CORBA オブジェクトのインターフェイス定義をインターフェイス・リポジトリというコンポーネントに配置できます。データとオペレーションはインターフェイス定義によって指定されますが、オブジェクトがアクティブになったときにそれらはサーバ・アプリケーションのプロセスに存在します。
オブジェクトのデータ
オブジェクトのデータには、オブジェクト・クラスまたはオブジェクト・インスタンスに固有の情報がすべて含まれます。たとえば、University アプリケーションのコンテキストの典型的なオブジェクトに窓口があります。窓口のデータとしては次のものが考えられます。
オブジェクトのデータは、属性を使用してアクセス可能な構造体に結合したりすることで効率的にカプセル化できます。属性は、オブジェクトのデータをオペレーションから切り離す典型的な手段です。
オブジェクトのオペレーション
オブジェクトのオペレーションは、オブジェクトのデータを使用して処理を実行できるルーチンのセットです。たとえば、窓口オブジェクトを使用して機能を実行するオペレーションとしては次のものが考えられます。
CORBA システムで、オブジェクトのオペレーションとして記述するコードはオブジェクト・インプリメンテーション (次節参照) と呼ばれることがあります。
オペレーションの格納位置
前節で説明したように、CORBA オブジェクトを構成するデータはデータベースのレコードに格納されている場合があります。言い換えると、CORBA オブジェクトのデータはオブジェクトがメモリでアクティブになったときのみ確立できます。この節では、CORBA オブジェクトのオペレーションを記述する方法、およびそのオペレーションをオブジェクトの一部とする方法を説明します。
特定の CORBA オブジェクトで記述されるオペレーションは、オブジェクトのインプリメンテーションとも呼ばれます。インプリメンテーションは、オブジェクトの振る舞いを実現するコードと見なすことができます。BEA Tuxedo CORBA クライアント/サーバ・アプリケーションを作成する過程では、アプリケーションの OMG IDL ファイルをコンパイルします。OMG IDL ファイルには、アプリケーションのインターフェイスおよびそのインターフェイスで実行できるオペレーションを記述する文が格納されます。
C++ でサーバ・アプリケーションをインプリメントする場合、IDL コンパイラで必要に応じて生成されるファイルの 1 つにインプリメンテーション・ファイルのテンプレートがあります。インプリメンテーション・ファイルのテンプレートの内容は、アプリケーションのオブジェクトのデフォルトのコンストラクタとメソッド・シグニチャです。オブジェクトをインプリメントするコードを記述する場所は、このインプリメンテーション・ファイルです。つまり、このファイルには特定のインターフェイスのオペレーションのビジネス・ロジックが格納されます。
BEA Tuxedo システムでは、インターフェイスを CORBA オブジェクトとしてインプリメントします。IDL コンパイラでは、BEA Tuxedo CORBA クライアント/サーバ・アプリケーションに組み込まれ、特定のオブジェクトに記述したインプリメンテーションが実行時に適切なオブジェクト・データに接続されるようにするほかのファイルも生成されます。
ここでサーバントの概念が登場します。サーバントとは、オブジェクト・クラスのインスタンスのことです。つまり、サーバントはインプリメンテーション・ファイルの各オペレーションで記述したメソッド・コードのインスタンスです。BEA Tuxedo CORBA クライアント/サーバ・アプリケーションの動作中に、アクティブではない (メモリにない) オブジェクトに対するクライアントの要求がサーバ・アプリケーションに届くと、以下のようにイベントが発生します。
Server::create_servant メソッドは、ユーザがすべてを記述します。Server::create_servant メソッドで記述するコードでは、必要なサーバントをインスタンス化します。コードでは、インターフェイス名 (Server::create_servant メソッドにパラメータとして渡される) を使用して、BEA Tuxedo ドメインによって作成されるサーバントの型を指定できます。
BEA Tuxedo ドメインで作成されるサーバントは、特殊なサーバント・オブジェクト・インスタンスです (CORBA オブジェクトではない)。このサーバントには、必要な CORBA オブジェクトをインプリメントする、以前に記述したオペレーションの実行可能バージョンが格納されます。
注記 サーバントは CORBA オブジェクトではありません。実際上、サーバントは言語オブジェクトとして表されます。サーバでは、サーバントを通じてオブジェクトでオペレーションを実行します。
オブジェクト・インプリメンテーション作成の詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
オブジェクト呼び出しのしくみ
CORBA オブジェクトは分散環境で機能するように意図されているので、OMG ではオブジェクト呼び出しのしくみに関するアーキテクチャが定義されています。CORBA オブジェクトは、次の 2 とおりの方法で呼び出すことができます。
動的起動のしくみについては、『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』を参照してください。この節では、動的起動よりも使いやすいスタブ・スタイル起動について説明します。
アプリケーションの OMG IDL ファイルをコンパイルするときには、クライアント・スタブというソース・ファイルがコンパイラによって生成されます。クライアント・スタブでは、オブジェクト型の OMG IDL オペレーション定義が、要求を満たすために BEA Tuxedo システムによって呼び出される CORBA サーバ・アプリケーションのオペレーションにマッピングされます。クライアント・スタブには、サーバ・アプリケーションに要求を送信するときに使用される、クライアント・アプリケーションのビルド・プロセスで生成されたコードが格納されます。クライアント・スタブのコードは絶対に修正しないでください。
IDL コンパイラでは、スケルトンというソース・ファイルも生成されます。スケルトンには、OMG IDL ファイルで指定された各インターフェイスのオペレーション呼び出しで使用されるコードが格納されます。スケルトンは、クライアントの要求を満たすことができる CORBA オブジェクト・インプリメンテーションの適切なコードを指し示すマップです。スケルトンは、オブジェクト・インプリメンテーションと BEA Tuxedo オブジェクト・リクエスト・ブローカの両方に接続されます。
次の図は、クライアント・アプリケーション、クライアント・スタブ、スケルトン、および CORBA オブジェクト・インプリメンテーションを示しています。
クライアント・アプリケーションから要求が送信されると、その要求はクライアント・スタブのオペレーションとしてインプリメントされます。クライアント・スタブで要求を受信すると、クライアント・スタブではその要求をオブジェクト・リクエスト・ブローカ (ORB) に送信します。ORB では、受信した要求を BEA Tuxedo システムを通じてスケルトンに送信します。ORB は、TP フレームワークおよびポータブル・オブジェクト・アダプタ (POA) と連携して適切なスケルトンとオブジェクト・インプリメンテーションを見つけます。 クライアント・スタブおよびスケルトンの生成については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』および『BEA Tuxedo C リファレンス』を参照してください。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |