Допустим, мы разрабатываем некоторую пользовательскую реализацию 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 или других обычных контрактах.