Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

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