Транзакция и отправка электронного письма

Рассмотрение обычного варианта использования, когда пользователь создает новую учетную запись в веб-приложении, и приложение отправляет электронное письмо с подтверждением на адрес пользователя. Из того, что я видел, это обычно реализуется одним из трех способов:

  1. Веб-контроллер вызывает метод службы, который создает учетную запись пользователя и отправляет электронное письмо в рамках одной транзакции.
  2. Веб-контроллер вызывает метод службы (с txprogation = never), который вызывает первый метод для себя для создания учетной записи пользователя в транзакции, а затем вызывает второй метод для себя для отправки электронного письма.
  3. Веб-контроллер вызывает первый метод. сервисный метод, который создает учетную запись пользователя в транзакции, затем второй сервисный метод, который отправляет электронное письмо.

1-й подход прост и понятен, но существует риск того, что транзакция будет отменена после отправки электронного письма, что сделает его недействительным. Второй подход более сложен, но он гарантирует, что электронное письмо будет отправлено только в том случае, если создание пользователя действительно прошло успешно. Третий подход прост, но обременяет веб-уровень бизнес-логикой, которую ему не нужно знать.

Нет более простого подхода, возможно, основанного на АОП, который гарантирует, что электронное письмо будет отправлено, только если пользователь транзакция создания действительно прошла успешно? Я параноик, полагая, что первый подход может потерпеть неудачу?

Мы используем стек Java EE + Spring и готовы интегрировать дополнительные API (AOP? Spring Integration?) Для достижения этой цели.

Ура!

5
задан Spiff 2 December 2010 в 03:30
поделиться