Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: val.maly Канада  
Дата: 28.01.06 21:24
Оценка:
Доброго времени суток.

Вот читаю Фаулура...

Есть вопрос по поводу организации нескольких системных транзакций в одной бизнесс транзакции.

Как я понял для реализации бизнесс транзакции служит 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: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: Sh1ZoID Россия http://vkontakte.ru/id6263850
Дата: 30.01.06 10:41
Оценка:
Здравствуйте, val.maly, Вы писали:

VM>И как это можно откатить всю бизнесс транзакцию, если несколько системных транзакций прошли успешно, а некоторые провалились?


Вот это я совсем не понял Транзакция, она на то ведь и транзакция, что ACID. Те, что прошли успешно тоже откатить в таком случае надо.
Re: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: GlebZ Россия  
Дата: 30.01.06 15:04
Оценка:
Здравствуйте, val.maly, Вы писали:

VM>Как я понял для реализации бизнесс транзакции служит Unit of Work.

VM>А для системных???
Нет, для системных. Бизнес-транзакции определяются бизнес-логикой.

Что такое несколько системных транзакций на фоне одной бизнес.
Ну примерно такой сценарий:
1. Кассир забронировал билет(одна системная транзакция).
2. Кассир побалакал с клиентом и получил от него деньги.
3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).

Бывают транзакции которые пораждают несколько обращений, но это другая песня.
Re[2]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: val.maly Канада  
Дата: 31.01.06 03:19
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, val.maly, Вы писали:


VM>>Как я понял для реализации бизнесс транзакции служит Unit of Work.

VM>>А для системных???
GZ>Нет, для системных. Бизнес-транзакции определяются бизнес-логикой.

GZ>Что такое несколько системных транзакций на фоне одной бизнес.

GZ>Ну примерно такой сценарий:
GZ>1. Кассир забронировал билет(одна системная транзакция).
GZ>2. Кассир побалакал с клиентом и получил от него деньги.
GZ>3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).

GZ>Бывают транзакции которые пораждают несколько обращений, но это другая песня.


Спасибо.

Но вот читаю у Фаулера:

"Типовое решение "Еденица Работы"позволяет контролировать все действия, выполняемые в рамках "бизнесс-ьранзакции""

Т.е Еденица работы используется для бизнесс-транзакций, которые выполняются в рамках ОДНОЙ системной транзакции?

И правильно ли я понимаю, что системная транзакция должна выглядеть примеро так:


SystemTransaction.Execute()
{

    try
    {

        BeginDbTransaction();
    
            WrorkWithDB();

        CommitDbTransaction();

    }
    catch(ex)
    {
        RollbackDbTransaction()
    }

}


???

Если да, то как тогда откатить Бизнесс транзакцию "Покупка билета", если 1 — Успешно (закоммитили в базу), 2- успешно (закоммитили в базу) а 3 — провал (роллбак).

Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???
Re[3]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: Аноним  
Дата: 31.01.06 08:25
Оценка: -1
GZ>>Что такое несколько системных транзакций на фоне одной бизнес.
GZ>>Ну примерно такой сценарий:
GZ>>1. Кассир забронировал билет(одна системная транзакция).
GZ>>2. Кассир побалакал с клиентом и получил от него деньги.
GZ>>3. Кассир перевел забронированные им билеты в состояние продано.(еще одна системная транзакция).

VM>Если да, то как тогда откатить Бизнесс транзакцию "Покупка билета", если 1 — Успешно (закоммитили в базу), 2- успешно (закоммитили в базу) а 3 — провал (роллбак).


VM>Как бать с закоммиченными 1 и 2, которые уже видны другим пользователям и они их юзают???


У меня такое ощущение, что в данном случае 1, 2 и 3 — это разные бизнес транзакции.
И откат их это тоже отдельные бизнес-транзакции.
Re[4]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: MatFiz Россия  
Дата: 31.01.06 09:06
Оценка:
Здравствуйте, Аноним, Вы писали:

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]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: Merle Австрия http://rsdn.ru
Дата: 31.01.06 17:58
Оценка: +2
Здравствуйте, MatFiz, Вы писали:

MF>Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь).

Выполнив компенсирующую системную транзакцию.
... [RSDN@Home 1.2.0 alpha rev. 619]
Мы уже победили, просто это еще не так заметно...
Re[6]: Несколько СИСТЕМНЫХ транзакций в одной БИЗНЕСС.
От: MatFiz Россия  
Дата: 31.01.06 19:47
Оценка:
Здравствуйте, Merle, Вы писали:

M>Здравствуйте, MatFiz, Вы писали:


MF>>Например, человек понял, что денег на билет у него не хватает — тогда бизнес-транзакция обломалась и ее нужно откатить (в данном случае снять бронь).

M>Выполнив компенсирующую системную транзакцию.

Да. Спасибо за новый термин!
How are YOU doin'?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.