JTA-транзакция: что произойдет, если произойдет исключение, но откат для транзакции не будет вызван? - PullRequest
0 голосов
/ 19 мая 2010

У нас есть какой-то сторонний код, в котором они делают следующее

  1. Элемент списка

    Создание пользовательской транзакции, например

     txn = (UserTransaction)ctx.lookup( "UserTransaction" );
     txn.begin(  );
    
  2. Выполнить некоторую работу с сохранением базы данных (через JPA) в базе данных MySQL

  3. txn.commit()

У них есть блоки исключений, но никто из них не вызывает txn.rollback. Хорошая практика кодирования говорит, что они должны вызвать откат, если возникает исключение, но мой вопрос Если txn не зафиксирован, и возникает исключение, каково их отрицательное влияние, НЕ вызывающее откат?

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Транзакция остается активной, пока вы не наберете commit() или rollback(). Он будет продолжать удерживать блокировки, и вы можете заблокировать ваше приложение (фактически, базу данных).

1 голос
/ 06 ноября 2012

IMO транзакция JTA должна в конечном итоге истечь (на основе установленного или установленного по умолчанию транзакции времени) и автоматически откатиться.

...