COM+同期の概念
一般に、シングルスレッドアパートメント(STA)がある場合は、アパートメントが同期を提供するため、同期は必要ありません。 マルチスレッドアパートメント(MTA)とフリースレッドオブジェクトがある場合は、同期が重要になります。 これまでは、フリースレッドオブジェクトでロックを処理する必要がありました。 コンポーネントの同期属性を設定することで、ロックを使用する必要をなくすことができます。
同期には、次のプロパティがあります。
- 一度に1人の呼び出し元がコンポーネントに入ることを許可します。
- プロセス間またはコンピューター間のフローを禁止します。
- プロセス内でコンポーネント間をフローします。
- 同じ呼び出し元からの再入を許可します。
アパートメントとは異なり、アクティビティは複数のプロセスとホストのコンテキストにまたがります。 同期は、オブジェクトを含むアクティビティを決定します。 オブジェクトは、次のいずれかのアクティビティに存在できます。
- 作成者のアクティビティ
- 新しいアクティビティ
- アクティビティなしです
COM+は、各アクティビティの一連のロックによってコンカレンシーを保証します。 呼び出し元が、別の呼び出し元によって既に使用されているCOM+同期コンポーネントを入力しようとすると、その呼び出しはロックが解放されるまでブロックされます。 このブロック動作はタイムアウトせず、タイムアウトするように構成することはできません。ロックが使用されていない場合は、ロックが取得され、呼び出しが処理されます。 完了後、次の呼び出し元に対してロックが解放されます。 デッドロックを防ぐために、COM+は、ネットワーク全体でチェーンされた入れ子になった一連の呼び出しによって、アクティビティ全体のすべてのオブジェクトへのアクセスを管理します。
COM+には、次の同期設定が用意されています。
- 無効
- サポートされていません
- サポートされています
- 必須
- 新規が必要
メモ
一部の同期設定は、他のCOM+コンポーネント設定と組み合わせて機能します。 例えば、COM+ジャストインタイム(JIT)アクティベーションサービスが有効である場合、同期が必要です。 トランザクションを有効にする場合JSTが必要であり、したがってCOM+のトランザクション処理でも同期が必要です。 そのため、JIT=Trueに設定されているクラスには、Synchronization=RequiredまたはSynchronization=RequiresNewのいずれかの設定も必要です。
コンポーネントサービス管理ツールを使用して同期オプションを設定する手順については、同期属性の設定に関する記事を参照してください。
同期オプションを設定するためのCOM+管理ライブラリの使用の詳細については、COM+管理の自動化に関する記事を参照してください。
関連トピック