Учитывая общий случай использования пользователем, создающим новую учетную запись в веб-приложении, и приложением, отправляющим электронное письмо с подтверждением на адрес пользователя.Из того, что я видел, это обычно реализуется одним из 3 способов:
- Веб-контроллер вызывает сервисный метод, который создает учетную запись пользователя и отправляет электронное письмо, как в рамках одной транзакции.
- Веб-контроллер вызывает метод службы (с tx распространением = никогда), который вызывает 1-й метод для самого себя, чтобы создать учетную запись пользователя в транзакции, а затем вызывает 2-й метод для себя, чтобы отправить электронное письмо.
- Веб-контроллер вызывает 1-й сервисный метод, который создает учетную запись пользователя в транзакции, а затем 2-й сервисный метод, который отправляет электронную почту.
1-й подход прост и понятен, но существует риск того, что транзакция будет отменена после отправки электронного письма, что сделает его недействительным.Второй подход более сложный, но он гарантирует, что электронное письмо будет отправлено только в том случае, если создание пользователя действительно завершилось успешно.Третий подход прост, но обременяет веб-уровень бизнес-логикой, которую он не должен знать.
Существует ли более простой подход, возможно, управляемый AOP, который гарантирует, что письмо будет отправлено толькоесли транзакция создания пользователя действительно удалась?Неужели я не уверен, что первый подход может потерпеть неудачу?
Мы используем стек Java EE + Spring и готовы интегрировать дополнительные API (AOP? Spring Integration?) Для достижения этой цели.
Ура!