Книга: C# для профессионалов. Том II
Транзакции COM+
Назначение транзакций
Транзакция является множеством операций, которые завершаются успешно или отказывают как целое, то есть, если одна операция в множестве отказывает, то все остальные, завершившиеся ранее, должны вернуться в исходное состояние, которое было до начала транзакции. Практический пример будет представлен ниже.
Рассмотрим web-сайт, который занимается в основном обработкой кредитных карт для заказов. Если пользователь заказывает на сайте какой-то продукт, то требуется, чтобы не только было выполнено списание с его счета, но чтобы запись заказа была помещена в базу данных заказов. Если возникает проблема с вводом записи о заказе в базу данных, то списание средств с кредитной карты должно быть отменено и заказ также должен быть отменен, иначе пользователь заплатит за товар, который он никогда не получит.
public void PlaceOrder(OrderInfo, objOrderInfo, UserInfo objUserInfo) {
CreditCard objCreditCard=new CreditCard();
OrderTable objOrderTable=new OrderTable();
// Шаг 1: Списание средств с кредитной карты
objCreditCard.PlaceCharge(objOrderInfo, objUserInfo);
// Если здесь возникает ошибка между шагами 1 и 2,
// то заказчик не получит продукт, за который
// он заплатил
// Шаг 2: Записать заказ
objOrderTablе.RecordOrder(objOrderInfo, objUserInfo);
}
В старые времена разработчики должны были создавать свои собственные схемы обеспечения транзакций, чтобы получить разновидность функциональности, упомянутой выше. Эти схемы включали обычно много логических переменных и детально разработанные стратегии обработки ошибок, и были подвержены ошибкам. Уже недавно объект ADODB.Connection
предлагал поддержку транзакций в достаточно элегантной форме. Теперь, с помощью объекта ContextUtil
, который мы скоро рассмотрим, службы COM+ предоставляет разработчикам механизм транзакций, который является надежным, готовым к использованию и более простым, чем подход ADODB.Connection
.
- 10.5. Транзакции и пути доступа меню
- 12.5. Транзакции и пути доступа меню
- 15.11. Транзакции и пути доступа меню
- Листинг 4.6. (critical_section.c) Защита банковской транзакции с помощью критической секции
- Транзакции
- 2.6. Транзакции и пути доступа меню
- "Заинтересованные транзакции"
- 1.9. Транзакции и пути доступа меню
- 3.7. Транзакции и пути доступа меню
- 4.7. Транзакции и пути доступа меню
- 5.6. Транзакции и пути доступа меню
- 7.7. Транзакции и пути доступа меню