Какое исключение следует выбросить из транзакционного метода в соответствии со стандартом JTA? - PullRequest
0 голосов
/ 25 мая 2018

Допустим, мы разрабатываем некоторую пользовательскую реализацию JTA.

Рассмотрим следующий метод:

@Transactional
public void foo() {
   em.save(...); // some interaction with EntityManager
   throw new IllegalStateException("Foo");
}

Допустим, что em.save(...) работает нормально, не вызывая исключения.Таким образом, мы всегда получаем throw new IllegalStateException("Foo").Ясно, что в этом случае транзакция должна быть откатана.

Вопрос в том, что во время выполнения, согласно стандарту JTA, должен вызываться метод foo(), который выбрасывает RollbackException или исходный IllegalStateException.?

Другими словами:

try {
   foo();
} catch (Exception e) {
   // What type of exception we should expect here?
}

Моя личная точка зрения заключается в том, что следует ожидать первоначального исключения (IllegalStateException("Foo") в данном случае).Однако я хотел бы получить ответ, строго основанный на документации JTA или других обычных контрактах.

1 Ответ

0 голосов
/ 25 мая 2018

Документация RollbackException (https://docs.oracle.com/javaee/7/api/javax/persistence/RollbackException.html) упоминает:

Выдается провайдером постоянства при сбое EntityTransaction.commit ().

Вваш случай, EntityTransaction.commit() никогда не должен вызываться, поэтому это исключение не должно быть выброшено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...