Я не могу точно сказать, имеет ли откат () в предложении catch какое-либо влияние, если commit () был в порядке, и sendEmail () выдал исключение.Самый быстрый способ проверить это - сгенерировать исключение из метода sendEmail () и посмотреть, была ли транзакция на самом деле зафиксирована.
Хотя я бы сказал, что это - отодвинуть вызов sendEmail () отваш блок try:
try {
transaction.begin()
...
transaction.commit()
} catch (Exception e) {
transaction.rollback();
}
try {
// point 1
Utility.sendEmail(...)
} catch (Exception e) {
// handle it
}
Таким образом, вы можете контролировать, что произойдет, если был выполнен откат.
Кроме того, я думаю, что отправка электронного письма в очередь JMS в большинстве случаевотличная идея.Если вы сделаете это, вы получите разрешение на код БД для продолжения и, возможно, дадите обратную связь вашему пользователю, что все прошло нормально, и электронное письмо будет отправлено, когда оно соответствует расписанию контроллера электронной почты.Например, может быть проблема с соединением с вашим почтовым сервером, и отправка электронной почты будет зависать, скажем, на 30 секунд, прежде чем выдать исключение, и ваш пользователь увидит это как очень длинный щелчок кнопки.