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

head1.gif 5.8 COM+に適したCOMコンポーネントとは

 以上で,ビジネスロジックをCOM+で構築するうえで最低限必要となる技術を説明したつもりである。COM+には,まだ説明していない機能として,QueueudコンポーネントやCOM+イベントといった魅力的な仕組みも用意されているが,それらについては別途改めて解説してゆく予定である。

 次回からは,実際にビジネスロジックを構築する手順を説明してゆく予定であるが,そのまえにCOM+に適したCOMコンポーネントをどのようにして構築するのかについてまとめておく。COM+は,基本的にCOMコンポーネントを管理するだけのものであるから,特別な処理を実装しなくとも動作させることはできる。しかし,COM+を前提とした設計にしてあるのと,そうでないのとでは,パフォーマンスに差が出ることも事実である。そこでここでは,COM+での動作を前提としたCOMコンポーネントを実装するには,どのようにすべきなのかについて説明する。

head2.gif 5.8.1 いままでのまとめ
 初めに,いままで説明してきた重要なポイントをまとめておく。COM+に対応したCOMコンポーネントを実装するにあたって重要な点は,次の4つである。

  1)ジャストインタイムアクティベータを前提とした設計
 トランザクションをサポートするCOMコンポーネントでは,おのずとジャストインタイムアクティベータの機能が有効になる。つまり,SetCompleteメソッドやSetAbortメソッドを呼び出してトランザクションの状態を決定したときには非アクティブ化されるので,COMオブジェクト内の変数が保持する値は破棄される。よって,トランザクションの状態が決まったあとで,COMオブジェクト内の変数に保存されている値を利用するようなCOMオブジェクトを設計してはならない。やむを得ない理由で,トランザクションの状態が決まったあとでも,まだCOMオブジェクト内に保存されている値を利用したいのであれば,共有プロパティを利用するしかない。
 また,COMオブジェクトの初期化時や終了時に処理をしたければ,クラスモジュールのInitializeメソッドやTerminateメソッドではなく,ObjectControlインタフェースを実装し,ActivateメソッドとDeactivateメソッドを使う必要がある(「5.3.3 ジャストインタイムアクティベータとイベント」を参照)。
 
  2)リソースマネージャを前提とした設計
 トランザクションに対応しているのは,MS DTCに対応しているリソースマネージャだけである。MS DTCに対応しているリソースマネージャには,SQL ServerやOracleといった製品がある(「5.4.2 COM+のトランザクション機構」を参照)。ちなみに,Microsoft Accessのデータベース(Jetエンジン)は,MS DTCに対応していないため,トランザクション機能は利用できない。
 
  3)リソースディスペンサを前提とした設計
 データベースにアクセスする場合,リソースディスペンサの機構によってデータベースへのコネクションがプーリングされる。プーリングをより効率的に機能させるには,データベースにアクセスする直前にデータベースに対するコネクションを張り,用がすんだら即座にコネクションを解放する,というプログラミングスタイルにしなければならない。
 
  4)セキュリティはロールで設定する
 COM+に管理されるCOMコンポーネントは,COM+アプリケーションのプロパティに存在する[ID]ページで,適当な実行アカウントを設定し,特定のユーザーの権限に基づいて実行させるのが普通である。そして,セキュリティはロールを単位として設定し,実ユーザーによって権限を判断するようなことはしない。
prevpg.gif Chapter 5-2 14/16 nextpg.gif