2.4 オペレーションの格納位置
前項で説明したように、CORBAオブジェクトを構成するデータはデータベースのレコードに格納されている場合があります。言い換えると、CORBAオブジェクトのデータはオブジェクトがメモリーでアクティブになったときのみ確立できます。この項では、CORBAオブジェクトのオペレーションを記述する方法、およびそのオペレーションをオブジェクトの一部とする方法を説明します。
特定のCORBAオブジェクトで記述されるオペレーションは、オブジェクトの実装とも呼ばれます。実装は、オブジェクトの振る舞いを実現するコードとみなすことができます。Oracle Tuxedo CORBAクライアント/サーバー・アプリケーションを作成する過程では、アプリケーションのOMG IDLファイルをコンパイルします。OMG IDLファイルには、アプリケーションのインタフェースおよびそのインタフェースで実行できるオペレーションを記述する文が格納されます。
C++でサーバー・アプリケーションを実装する場合、IDLコンパイラで必要に応じて生成されるファイルの1つに実装ファイルのテンプレートがあります。実装ファイルのテンプレートの内容は、アプリケーションのオブジェクトのデフォルトのコンストラクタとメソッド・シグネチャです。オブジェクトを実装するコードを記述する場所は、この実装ファイルです。つまり、このファイルには特定のインタフェースのオペレーションのビジネス・ロジックが格納されます。
Oracle Tuxedoシステムでは、インタフェースをCORBAオブジェクトとして実装します。IDLコンパイラでは、Oracle Tuxedo CORBAクライアント/サーバー・アプリケーションに組み込まれ、特定のオブジェクトに記述した実装が実行時に適切なオブジェクト・データに接続されるようにするほかのファイルも生成されます。
ここでサーバントの概念が登場します。サーバーントとは、オブジェクト・クラスのインスタンスのことです。つまり、サーバーントは実装ファイルの各オペレーションで記述したメソッド・コードのインスタンスです。Oracle Tuxedo CORBAクライアント/サーバー・アプリケーションの動作中に、アクティブではない(メモリーにない)オブジェクトに対するクライアントのリクエストがサーバー・アプリケーションに届くと、次のようにイベントが発生します。
- 必要なオブジェクトで利用可能なサーバントがない場合、Oracle TuxedoシステムではServerオブジェクトの
Server::create_servantメソッドを呼び出します。Server::create_servantメソッドは、ユーザーがすべてを記述します。Server::create_servantメソッドで記述するコードでは、必要なサーバントをインスタンス化します。コードでは、インタフェース名(Server::create_servantメソッドにパラメータとして渡される)を使用して、Oracle Tuxedoドメインによって作成されるサーバントの型を指定できます。Oracle Tuxedoドメインで作成されるサーバントは、特殊なサーバント・オブジェクト・インスタンスです(CORBAオブジェクトではありません)。このサーバントには、必要なCORBAオブジェクトを実装する、以前に記述したオペレーションの実行可能バージョンが格納されます。
- Oracle Tuxedoドメインでは、制御をサーバントに渡し、必要に応じてサーバントの
activate_objectメソッドを呼び出します(メソッドが実装されている場合)。次のように、activate_objectメソッドを呼び出すと、CORBAオブジェクトがアクティブになります。activate_objectメソッドのコードを記述します。activate_objectメソッドに渡すパラメータは、アクティブにするオブジェクトのオブジェクトIDの文字列値です。オブジェクトIDは、オブジェクトを初期化する方法を指定するために使用できます。- CORBAオブジェクトのデータを初期化します。その際には、永続ストレージ(データベースのレコードなど)から状態データを読み込む場合もあります。
- サーバントのオペレーションがデータにバインドされ、そのオペレーションとデータの結合によってアクティブなCORBAオブジェクトが確立されます。
ステップa、b、およびcが終わると、CORBAオブジェクトはアクティブと判断されます。
activate_objectメソッドは、必ずしも実装する必要はありません。どのような場合に実装する必要があるのかについては、Oracle Tuxedoオンライン・ドキュメントの『CORBAサーバー・アプリケーションの作成』を参照してください。
ノート:
サーバントはCORBAオブジェクトではありません。実際上、サーバントは言語オブジェクトとして表されます。サーバーでは、サーバントを通じてオブジェクトでオペレーションを実行します。オブジェクト実装作成の詳細は、Oracle Tuxedoオンライン・ドキュメントの『CORBAサーバー・アプリケーションの作成』を参照してください。
親トピック: CORBAオブジェクト