Есть вопрос по поводу организации нескольких системных транзакций в одной бизнесс транзакции.
Как я понял для реализации бизнесс транзакции служит Unit of Work.
А для системных???
И как это можно откатить всю бизнесс транзакцию, если несколько системных транзакций прошли успешно, а некоторые провалились?
Или системные транзакции проводятся исключительно в памяти и в DB ничего не пишут, а когда фиксируется бизнесс транзакция то она уже и сбрасывает все изменения в базу, используя DB транзакцию???
Например:
Class UofW
{
private _tr as SqlTransaction;
private List _NewObjects as ArrayList = new ArrayList();
private List _DirtyObjects as ArrayList = new ArrayList();
private List _DeletedObjects as ArrayList = new ArrayList();
public void RegisterClean(DomainObject o);
public void RegisterNew(DomainObject o);
public void RegisterDirty(DomainObject o);
public void RegisterDeleted(DomainObject o);
public void Commit();
private void InsertNew();
private void DeleteRemoved();
private void UpdateDirty();
private void OpenDbTransaction();
private void CommitDbTransaction();
private void RollbackDbTransaction();
}
UofW.Commit()
{
try
{
OpenDbTransaction();
InsertNew();
DeleteRemoved();
UpdateDirty();
CommitDbTransaction();
}
catch (Exception ex)
{
RollbackDbTransaction();
Throw ex;
}
}
Или вопросами открытия, фиксации и роллбэка транзакций должен заниматься Бизнесс процесс, который создает UnitOfWork?
Тогда он-же должен открыть транзакцию и передать ее в UnitOfWork?
Заранее спасибо за разъяснения.
Re: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, val.maly, Вы писали:
VM>И как это можно откатить всю бизнесс транзакцию, если несколько системных транзакций прошли успешно, а некоторые провалились?
Вот это я совсем не понял Транзакция, она на то ведь и транзакция, что ACID. Те, что прошли успешно тоже откатить в таком случае надо.
Re: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, val.maly, Вы писали:
VM>Как я понял для реализации бизнесс транзакции служит Unit of Work. VM>А для системных???
Нет, для системных. Бизнес-транзакции определяются бизнес-логикой.
Что такое несколько системных транзакций на фоне одной бизнес.
Ну примерно такой сценарий:
1. Кассир забронировал билет(одна системная транзакция).
2. Кассир побалакал с клиентом и получил от него деньги.
3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).
Бывают транзакции которые пораждают несколько обращений, но это другая песня.
Re[2]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, val.maly, Вы писали:
VM>>Как я понял для реализации бизнесс транзакции служит Unit of Work. VM>>А для системных??? GZ>Нет, для системных. Бизнес-транзакции определяются бизнес-логикой.
GZ>Что такое несколько системных транзакций на фоне одной бизнес. GZ>Ну примерно такой сценарий: GZ>1. Кассир забронировал билет(одна системная транзакция). GZ>2. Кассир побалакал с клиентом и получил от него деньги. GZ>3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).
GZ>Бывают транзакции которые пораждают несколько обращений, но это другая песня.
Спасибо.
Но вот читаю у Фаулера:
"Типовое решение "Еденица Работы"позволяет контролировать все действия, выполняемые в рамках "бизнесс-ьранзакции""
Т.е Еденица работы используется для бизнесс-транзакций, которые выполняются в рамках ОДНОЙ системной транзакции?
И правильно ли я понимаю, что системная транзакция должна выглядеть примеро так:
Если да, то как тогда откатить Бизнесс транзакцию "Покупка билета", если 1 — Успешно (закоммитили в базу), 2- успешно (закоммитили в базу) а 3 — провал (роллбак).
Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???
Re[3]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
GZ>>Что такое несколько системных транзакций на фоне одной бизнес. GZ>>Ну примерно такой сценарий: GZ>>1. Кассир забронировал билет(одна системная транзакция). GZ>>2. Кассир побалакал с клиентом и получил от него деньги. GZ>>3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).
VM>Если да, то как тогда откатить Бизнесс транзакцию "Покупка билета", если 1 — Успешно (закоммитили в базу), 2- успешно (закоммитили в базу) а 3 — провал (роллбак).
VM>Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???
У меня такое ощущение, что в данном случае 1, 2 и 3 — это разные бизнес транзакции.
И откат их это тоже отдельные бизнес-транзакции.
Re[4]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, Аноним, Вы писали:
GZ>>>Что такое несколько системных транзакций на фоне одной бизнес. GZ>>>Ну примерно такой сценарий: GZ>>>1. Кассир забронировал билет(одна системная транзакция). GZ>>>2. Кассир побалакал с клиентом и получил от него деньги. GZ>>>3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).
VM>>Если да, то как тогда откатить Бизнесс транзакцию "Покупка билета", если 1 — Успешно (закоммитили в базу), 2- успешно (закоммитили в базу) а 3 — провал (роллбак).
VM>>Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???
А>У меня такое ощущение, что в данном случае 1, 2 и 3 — это разные бизнес транзакции. А>И откат их это тоже отдельные бизнес-транзакции.
Тогда получается, что твоя бизнес транзакция — это транзакция БД, то есть между ними нет различий, кроме названия, а это не так.
Бизнес-транзакция — покупка билета. Она завершена, когда человек приобрел билет и имеет его на руках.
Эта бизнес-транзакция включает в себя несколько транзакций БД:
1. Бронирование билета.
2. Оплата билета.
3. Билет — продан.
При срыве бизнес-транзакции, необходимо откатить все действия, произведенные с БД.
Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь).
How are YOU doin'?
Re[5]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От:
Аноним
Дата:
31.01.06 17:16
Оценка:
VM>>>Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???
А>>У меня такое ощущение, что в данном случае 1, 2 и 3 — это разные бизнес транзакции. А>>И откат их это тоже отдельные бизнес-транзакции.
MF>Тогда получается, что твоя бизнес транзакция — это транзакция БД, то есть между ними нет различий, кроме названия, а это не так.
MF>Бизнес-транзакция — покупка билета. Она завершена, когда человек приобрел билет и имеет его на руках. MF>Эта бизнес-транзакция включает в себя несколько транзакций БД: MF>1. Бронирование билета. MF>2. Оплата билета. MF>3. Билет — продан. MF>При срыве бизнес-транзакции, необходимо откатить все действия, произведенные с БД. MF>Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь).
Ну, тут есть варианты. В таком случае не обязательно откатывать транзакцию, если следующий человек готов купить этот билет.
Но вообще — в таком случае откаты нужно делать ручками.
Re[5]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, MatFiz, Вы писали:
MF>Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь).
Выполнив компенсирующую системную транзакцию.
... [RSDN@Home 1.2.0 alpha rev. 619]
Мы уже победили, просто это еще не так заметно...
Re[6]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
Здравствуйте, Merle, Вы писали:
M>Здравствуйте, MatFiz, Вы писали:
MF>>Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь). M>Выполнив компенсирующую системную транзакцию.