この特集のトップページへ
Chapter 5:ビジネスロジック層の構築

head1.gif5.1 COM+の仕組み

 まずは,COM+カタログに登録されたCOMコンポーネントがどのように実体化されるのかについて説明する。

 COMクライアントがCOM+カタログに登録されたCOMコンポーネントを実体化しようとするとき,その処理は,Fig.5-1のようになる。

Fig.5-1 COM+におけるCOMコンポーネントの実体化
fig5_01.gif

 COMクライアントによるCOMコンポーネントの実体化要求は,COM+ランタイム内のアクティベータにまず届けられる。アクティベータとは,「2.3.2 オブジェクトを実体化するときの処理」で説明したSCM(Service Control Manager)に相当するもので,COMコンポーネントを実体化するためのモジュールである。アクティベータは,COMクライアントから要求されたCOMコンポーネントがレジストリ(HKEY_CLASSES_ROOT\CLSID以下)またはCOM+カタログに登録されているかどうかを調べる。COM+カタログに登録されているかどうかを調べるには,カタログオブジェクト(ComAdmin.COMAdminCatarogオブジェクト)を利用する。カタログオブジェクトとは,COM+カタログへの登録や参照をサポートするCOMオブジェクトであり,コンポーネントサービス管理ツールもカタログオブジェクトを使ってCOM+カタログを管理している。開発者は,カタログオブジェクトを使ってCOM+アプリケーションをCOM+カタログに登録することもできるが,その方法については連載の最後に扱うことにして,ここでは説明しない。

 もし,COMコンポーネントがCOM+カタログに登録されている――すなわち,COM+の管理下にある――のであれば,アクティベータはまず,「コンテキスト」と呼ばれる領域(後述するが,コンテキストの実体はCOMオブジェクトである)を生成し,要求されたCOMコンポーネントから実体化されたCOMオブジェクトを,その領域に配置する。そして,コンテキストとCOMオブジェクトを包むように「インタセプタ」と呼ばれるCOMオブジェクトを生成し,COMクライアントにはインタセプタのインタフェースを返す。

 なお,もしCOMクライアントから要求されたCOMコンポーネントがCOM+カタログに登録されておらず,レジストリにのみ登録されている――つまり,COM+の管理下にない――とすると,COM+は単純にCOMコンポーネントを実体化し,そのインタフェースを返すだけである(コンテキストやインタセプタは生成されない)。このときの動作は,「2.3.2 オブジェクトを実体化するときの処理」で説明したSCMの動作とまったく同じである。

注意ただし,COM+の管理下にあるCOMオブジェクトが,COM+の管理下にないコンポーネントを実体化しようとしたときには,条件によってコンテキストが生成されることもある。

 以上が,COM+の概要である。COM+を理解するには,コンテキストとインタセプタの働きを理解すればよい。これらを理解すれば,COM+のすべてを理解したことになる。では,「コンテキストとは何なのか」,そして「インタセプタとは何をするものなのか」を説明しよう。

prevpg.gif Chapter 5-1 2/23 nextpg.gif