Управление автоматическими транзакциями в COM+

В модели программирования COM+ вы можете разработать компоненты, чтобы сделать то, что они делают лучше всего, позволяя бизнес-логике или устанавливать подключение к базе данных, и полагаться на платформу обработки транзакций Microsoft Windows для автоматизации транзакций.

Запуск транзакции

COM+ автоматически запускает транзакцию при возникновении любого из следующих условий:

  • Если клиент, отличный от транзакций, вызывает компонент, требующий транзакции или требующий новой транзакции.
  • Когда транзакционный клиент вызывает компонент, требующий новой транзакции.

Если COM+ определяет, что объект должен иметь новую транзакцию, он начинает транзакцию сначала, а затем помещает объект в него. Этот процесс состоит из следующих шагов.

  1. COM+ создает объект контекста, задает атрибуты активации JIT и синхронизации в значение "Обязательный" и задает согласованные и выполненные флаги в значение True и False соответственно.
  2. COM+ взаимодействует с координатором распределенных транзакций (DTC), чтобы начать транзакцию. DTC координирует физическую транзакцию.
  3. DTC создает идентификатор транзакции и передает его обратно в COM+. Идентификатор транзакции устанавливает границу транзакции. Все объекты, участвующие в транзакции, имеют одинаковый идентификатор.
  4. Когда клиент создает объект, COM+ активирует его в пределах границы транзакции.

Завершение транзакции

COM+ завершает автоматическую транзакцию путем фиксации или прерывания ее при возникновении одного из следующих условий:

  • Корневой объект транзакции завершает работу, и COM+ освобождает его. После деактивации корневого объекта транзакция пытается зафиксировать.
  • Клиент освобождает корневой объект. Без ссылки корневой объект деактивирует и транзакция пытается зафиксировать.
  • Транзакция превышает пороговое время ожидания. Транзакция прерывается автоматически, если не зафиксирована в течение периода ожидания транзакции, деактивируя все объекты, связанные с транзакцией. Время ожидания транзакции по умолчанию — 60 секунд.

Согласованные и выполненные флаги

Ускорение транзакций путем уведомления корневого объекта

Завершение автоматической транзакции путем вызова setComplete