4.CORBA概要(4)
CORBA 4章 CORBA概要(4)
4.1 動的起動と静的起動CORBAではクライアントとサーバ間の起動の方法として、静的起動と動的起動という2種類の方法をサポートしています。この2種類の方法はコンパイル時にメソッドの起動を静的に定義するか、実行時に動的にメソッドを見つけだすかの違いがあります。 静的起動は、クライアントのコンパイル時に、呼び出すサーバオブジェクトのメソッド(つまりインタフェース)が既知の場合に用いられる方法です。静的なインタフェースは、サーバオブジェクトのインターフェースを記述したIDLをコンパイルすることによって生成されるスタブによって提供されます。スタブは、コンパイル時にクライアントが起動する可能性のあるオペレーションを知るのに十分な情報を持っています。静的起動では、インタフェースがコンパイル時にクライアントプログラムと結合されるために、動的起動に対して以下のような特徴を持っています。
これとは対照的に、メソッドの動的起動はより柔軟性のある仕組みになっています。動的起動においては、クライアントプログラムのコンパイル時にサーバのインタフェースを知らなくても良く、実行時に動的に結合が行われます。この機能を利用すれば、クライアントアプリケーションを変更することなしに、新しいサービスを提供するサーバを追加したりすることができます。動的起動を用いれば非常に一般的なコードを書くことができますが、実際は多くのアプリケーションはここまでの柔軟性を要求していないため、静的起動のほうがよく用いられます。 これらのいずれの方法においても、クライアントはオブジェクトリファレンス(オブジェクトを一意に識別するための識別子)にアクセスすることによってサーバにリクエストを出し、メソッドを起動します。サーバ自体は静的起動と動的起動の違いを関知することはありません。サーバオブジェクトの実装、オブジェクトアダプタ、ORBなどは、これらの起動方法の違いによらず透過的なものになっています。動的起動の機能は、DII(Dynamic Invocation Interface)やDSI(Dynamic Skeleton Interface)などによって提供されます。 DII(動的起動インタフェース)クライアント側において、起動するべきメソッドを実行時に探し出すための機能です。サーバインタフェースを定義しているメタデータの探索、パラメータの作成、リモート呼び出しの発行、結果の返送などを行います。 DSI(動的スケルトンインタフェース)サーバ側において動的バインディングの機能を実現しています。通常のスケルトンが特定のオブジェクトに対応して定義されるのに対して、DSIは送られてきたメッセージ内のパラメータを調べ、そのメッセージのターゲットオブジェクトとメソッドを動的に判断します。 ![]() 4.2 CORBAメソッドの静的起動ここでは静的起動を用いたアプリケーション作成の一般的な過程を説明します。なお、この過程は典型的なものですが、必ずしもこの手順に従う必要はありません。部分的に他の方法を用いることもできます。 ![]() 1. IDLによりサーバのインタフェースを定義します。IDLはサーバにおいて使用可能なオペレーションや起動方法などを定義するものです。IDLにより、サーバオブジェクトの型やそのオブジェクトが持つ属性、外部から利用可能なメソッドやそのメソッドのパラメータを定義します。 2. インタフェースの定義をインタフェースリポジトリにバインドします。IDLコンパイラなどの機能により、IDLの情報をインタフェースリポジトリに登録します。 3. ターゲットとなる言語用のIDLコンパイラによりIDLファイルをコンパイルします。この処理により、ターゲット言語で記述されたクライアントスタブやサーバスケルトン、サーバ実装(サーバント)の雛形などが生成されます。 4. IDLコンパイラにより生成された雛形を元にサーバントを実装します。一般的にオブジェクト指向言語では雛形クラスを継承することによって実装を行います。継承以外には委譲という手法も用いることができます。 5. ターゲット言語用のコンパイラを用いてサーバプログラムをコンパイルします。 6. 実行時オブジェクトをインプリメンテーションリポジトリに登録します。 7. サーバのオブジェクトアダプタは、クライアントからのメソッド起動の要求を処理できるようにサーバオブジェクトをインスタンス化します。このほかに実行時に動的に起動するような方法もあります。 8. クライアントのコードを実装します。クライアントはスタブ内に作成されたメソッドを利用するプログラムとして実装されます。 9. ターゲット言語用のコンパイラを用いてクライアントプログラムをコンパイルします。 |
![]()
![]()
|