17.1 動的起動インタフェースとは
DII(動的起動インタフェース)を使用すると,クライアントプログラムから,そのクライアントの作成時点では型がわからないCORBAオブジェクトに対してメソッドを起動できます。DIIはデフォルトの静的起動とは対照的です。静的起動ではクライアントソースコードに,そのクライアントから起動するCORBAオブジェクトの型ごとに一つずつコンパイラが生成したスタブを組み込む必要があります。つまり,静的起動を使用するクライアントは,起動するオブジェクトの型を事前に宣言します。DIIを使用するクライアントは,どのような種類のオブジェクトが起動されるかがプログラマにもわからないので,そのような宣言をしません。DIIの利点は柔軟性です。DIIを使用すると,クライアントをコンパイルした時点ではインタフェースが存在しなかったオブジェクトも含め,任意のオブジェクトを起動できる汎用的なクライアントを作成できます。DIIの短所は次の2点です。
-
プログラミングが難しい(実質的に,作成するコードはスタブの機能を果たさなければなりません)
-
ランタイムに多くの作業が行われるので起動に時間が掛かる
DIIは純粋にクライアントインタフェースであり,静的起動と動的起動はオブジェクトインプリメンテーションの観点から見れば同じものです。
DIIを使用すると,次のようなクライアントを作成できます。
-
スクリプト環境とCORBAオブジェクトの間のブリッジまたはアダプタ。例えば,スクリプトはブリッジを呼び出し,オブジェクトの識別子,メソッドの識別子,およびパラメタ値を引き渡します。ブリッジは動的リクエストを構築して発行し,結果を受け取り,それをスクリプト環境に返します。そのようなブリッジでは,スクリプト環境がどのような種類のオブジェクトを起動したいかが事前に開発者にわからないので,静的起動を使用できません。
-
汎用的なオブジェクトテスタ。例えば,あるクライアントが任意のオブジェクトの識別子を使用し,そのインタフェースをIR(インタフェースリポジトリ)から検索し(「16. インタフェースリポジトリの使用」参照),個々のメソッドを人為的な引数値を使用して起動するとします。このような汎用的なテスタも,静的起動では作成できません。
- 注
-
クライアントは,DIIリクエストの中で有効な引数を引き渡さなければなりません。それに失敗すると,サーバのクラッシュも含め,予期できない結果が生じるおそれがあります。IRを使用してパラメタ値の型を動的にチェックすることもできますが,パフォーマンスが低下します。最も効果的な方法は,DIIを使用するクライアントを起動するコード(例えば,スクリプト)の信頼性を高め,確実に有効な引数が引き渡されるようにすることです。