вторник, 14 февраля 2012 г.

Теория расспространения транзакций

Вот пример на Java, в котором применены пропагейшины(расспространения):


 @Transaction( propagation=... )
void method1() {
  ...
}

@Transaction( propagation=... )
void method2() {
  ...
  method1();
  ...
}



!!! Две транзакции в один момент времени работать не могут.

Возможные варианты Propagation:

1. Mandatory
    если есть уже открытая транзакция - используется
    нет - ошибка

2. Required
    если есть - используем
    если нет - создаем

3. RequiresNew
    если есть - то пауза в существующей, создается новая и ипользуется она для данного метода
    если нет - то создаем

method2
----------->                 --------------->
             --------------->
              method1

4. Supports
    если есть - используем
    если нет - то без TX

5. NotSupported
    если есть - то пауза, и без TX в поточном методе
    нет - просто без TX

6. Never
    Если есть - то ошибка
    нет - то без TX

7. Nested (в Spring встречается)
Передается менеджеру БД всю ответсвенность за транзакции с надеждой, что он умеет с ними работать.

Термины:
TX - commit, rollback, begin transaction
DDL - create, alter, drop
DML - insert, update, delete
QUERY - select
XA - транзакции двухфазного коммита(сначала каждай подтразакция отдельно, а потом общий коммит, если хоть одна сорвалась, все откатываются)

Transaction demarkation - это CREATE TRANSACTION ....(все что между ними)... END

Можно почитать:
JTA
spring referance (TX)


   

Комментариев нет:

Отправить комментарий