COM+オブジェクトプールの概念

オブジェクトプールは、COM+によって提供される自動サービスです。このサービスを使用すると、コンポーネントを要求するすべてのクライアントで使用できるように、コンポーネント自体のインスタンスをプール内でアクティブな状態に維持するようにコンポーネントを構成できます。 プールサイズや作成要求のタイムアウト値などの特性を指定して、特定のコンポーネントに対して保持されるプールを管理用に構成および監視できます。 アプリケーションの実行中は、COM+によってプールが管理され、指定した条件に従ってオブジェクトのアクティブ化と再利用の詳細が処理されます。

この方法でオブジェクトを再利用すると、特に再利用を最大限に活用するように記述されている場合に、パフォーマンスとスケーリングの面で非常に大きなメリットが得られます。 オブジェクトプールを使用すると、次の利点が得られます。

  • クライアントごとにオブジェクトの使用時間を短縮でき、時間のかかる初期化とリソースの取得を、オブジェクトがクライアントに対して実行する実際の作業から除外できます。
  • 高価なリソースの取得コストをすべてのクライアントで共有できます。
  • アプリケーションの起動時に、クライアント要求が受信される前に、オブジェクトを事前に割り当てることができます。
  • 管理プール管理を使用してリソースの使用を制御できます。たとえば、適切な最大プールレベルを設定することで、ライセンスを持っているデータベース接続の数だけ開いたままにすることができます。
  • 使用可能なハードウェアリソースを最大限に活用するようにプールを管理的に構成できます。使用可能なハードウェアリソースの変化に応じてプールの構成を簡単に調整できます。
  • Just-In-Time (JIT) アクティブ化を使用するオブジェクトの再アクティブ化時間を短縮し、リソースをクライアント専用にする方法を意図的に制御できます。

プール可能なオブジェクトの作成

プール可能なオブジェクトは、1つのオブジェクトインスタンスを複数のクライアントで使用できるようにするために、特定の要件を満たす必要があります。 たとえば、クライアントの状態を保持したり、スレッドアフィニティを持ったりすることはできません。 また、トランザクションオブジェクトには特定の要件があり、プールされたオブジェクトによって保持されているマネージリソースを手動でトランザクションに参加させる必要があります。

プールされたオブジェクトは、IObjectControlを実装して、再利用方法を制御できます。 これにより、特定のコンテキストでアクティブ化されたときに初期化を実行したり、非アクティブ化時にクライアントの状態をクリーンアップしたり、再利用できない状態になったことを示したりすることができます。

多くの場合、コンストラクター文字列を使用して管理上カスタマイズできるように、プール可能なオブジェクトをある程度汎用的な方法で記述すると便利です。 たとえば、コンストラクター文字列で特定のDSNを管理上指定して、汎用ODBC接続を保持するようにオブジェクトを記述することができます。

このセクションのトピックでは、次の表に示すように、COM+でのオブジェクトプールのしくみと、プール可能なオブジェクトを記述、構成、および実装する方法について説明します。

トピック 説明
オブジェクトプールのしくみ
基本的な概念について説明します。
オブジェクトプールによるパフォーマンスの向上
オブジェクトプールを最も効果的に使用する方法について詳しく説明します。
プール可能なオブジェクトの要件
プールするオブジェクトを記述する方法について詳しく説明します。
トランザクションオブジェクトのプール
プール可能なトランザクションオブジェクトに適用される特別な要件について詳しく説明します。
オブジェクトの有効期間と状態の制御
プールされたオブジェクトを実装して再利用方法を制御する方法について説明します。

COM+オブジェクトプールのタスク