Управление автоматическими транзакциями в COM+
В модели программирования COM+ вы можете разработать компоненты, чтобы сделать то, что они делают лучше всего, позволяя бизнес-логике или устанавливать подключение к базе данных, и полагаться на платформу обработки транзакций Microsoft Windows для автоматизации транзакций.
Запуск транзакции
COM+ автоматически запускает транзакцию при возникновении любого из следующих условий:
- Если клиент, отличный от транзакций, вызывает компонент, требующий транзакции или требующий новой транзакции.
- Когда транзакционный клиент вызывает компонент, требующий новой транзакции.
Если COM+ определяет, что объект должен иметь новую транзакцию, он начинает транзакцию сначала, а затем помещает объект в него. Этот процесс состоит из следующих шагов.
- COM+ создает объект контекста, задает атрибуты активации JIT и синхронизации в значение "Обязательный" и задает согласованные и выполненные флаги в значение True и False соответственно.
- COM+ взаимодействует с координатором распределенных транзакций (DTC), чтобы начать транзакцию. DTC координирует физическую транзакцию.
- DTC создает идентификатор транзакции и передает его обратно в COM+. Идентификатор транзакции устанавливает границу транзакции. Все объекты, участвующие в транзакции, имеют одинаковый идентификатор.
- Когда клиент создает объект, COM+ активирует его в пределах границы транзакции.
Завершение транзакции
COM+ завершает автоматическую транзакцию путем фиксации или прерывания ее при возникновении одного из следующих условий:
- Корневой объект транзакции завершает работу, и COM+ освобождает его. После деактивации корневого объекта транзакция пытается зафиксировать.
- Клиент освобождает корневой объект. Без ссылки корневой объект деактивирует и транзакция пытается зафиксировать.
- Транзакция превышает пороговое время ожидания. Транзакция прерывается автоматически, если не зафиксирована в течение периода ожидания транзакции, деактивируя все объекты, связанные с транзакцией. Время ожидания транзакции по умолчанию — 60 секунд.
См. также