18.09.2003, 11:06 | #1 |
Участник
|
Вопрос про транзакции и исключения
Добрый день!
В документации написано: 1. Блоки транзакций могут быть вложенными 2. Исключение автоматически прерывает текущую транзакцию Исходя из этого я написал такой код: PHP код:
Может мне кто-нибудь объяснить ход выполнения программы? Почему изменения не проходят в базу? В модели MTS/Component services используется подход, очень похожий на аксаптовский, но там подобный код будет отрабатывать именно так, как я того ожидаю. |
|
18.09.2003, 11:32 | #2 |
----------------
|
ttsabort
Опыт показывает, что ttsabort и exception срубают транзакции всех уровней.
Почему - не знаю, почему об этом скромно умалчивается в руководстве разработчика - тоже не знаю. |
|
18.09.2003, 11:40 | #3 |
Участник
|
Это я уже заметил.
Интересует ход выполнения программы. По идее, если после выхода из catch транзакция отменена, то select/update должны отработать вне транзакции, а если не отменена, то в рамках нее. Или как-нить сругаться, хотя бы. А на деле возникает ощущение, что после throw управление передается за последний ttscommit. |
|
18.09.2003, 12:24 | #4 |
----------------
|
try & ttsbegin
Для такого кода
PHP код:
До error catch 2 После всего Т.е. управление передается в catch, который следует за блоком try, в котором была открыта первая транзакция. |
|
18.09.2003, 12:26 | #5 |
Участник
|
Большое спасибо!
Стало яснее. |
|