Разработка распределенных приложений в Microsoft.NET Framework

       

Распределенные транзакции


Одним из основных достоинств среды COM+ является поддержка распределенных транзакций на базе координатора распределенных транзакций. Настройки транзакции компоненты COM+ влияют на настройки синхронизации и активации. Любая включенная настройка транзакций, отличная от Not supported, требует использования JIT активации и ограничивает выбор настройки синхронизации не более чем вариантами Required и Requires new. При активации объекта среда COM+ определяет необходимость использования транзакций в соответствии с таблицей 6.2.

Таблица 6.2. Участие объекта COM+ в транзакции Настройка транзакции компоненты COM+Создатель объекта участвует в транзакции Создатель объекта не участвует в транзакции Не поддерживается (Not Supported) Поддерживается (Supported) Требуется (Required) Требуется новая (Requires new)
Вне транзакцииВне транзакции
Транзакция создателяВне транзакции
Транзакция создателя Новая транзакция
Новая транзакцияНовая транзакция

Если при создании объекта обнаружена потребность в создании новой транзакции, среда COM+ создает ее с помощью координатора транзакций и данный объект считается корнем транзакции (рис. 6.2). Поскольку требующие транзакцию объекты используют активацию одного вызова, то транзакция не может существовать дольше, чем один вызов метода корневого объекта клиентом COM+. В транзакции могут участвовать службы, имеющие свой менеджер ресурсов, в частности MSMQ и MS SQL. Для многих ресурсов при необходимости можно создать свой компенсирующий менеджер ресурсов.


Рис. 6.2.  Транзакция COM+

Каждый из участвующих в транзакции объектов должен в конце выполнения своего метода сообщить об успешности транзакции или ее неудаче. В случае, если все объекты объявили об успешности транзакции, служба COM+ оповещает все участвующие в транзакции внешние службы о необходимости сделать произведенные в рамках транзакции изменения постоянными (рис. 6.3).


Рис. 6.3.  Успешное завершение транзакции COM+



Содержание раздела