Одна идея заключается в использовании JMS как «двигатель», и вы можете использовать JMS транзакции (которые могут вступать в существующие операции, например, DB). Это начинает приводить к асинхронной архитектуре, управляемой событиями, что, вероятно, хорошо, если мы не говорим о простых приложениях - в этом случае вам, вероятно, не нужно задавать вопрос.
Примером этого может быть создание простой учетной записи. Для этого вы хотите сохранить данные учетной записи в БД, а также отправить пользователю электронное письмо для активации - но вы хотите, чтобы они были в одной транзакции по понятным причинам.
Вы не должны указывать код отправки электронной почты в транзакции, потому что, даже если вы можете отправить транзакцию транзакции по электронной почте - db, может произойти по той или иной причине. Вы также не должны отправлять электронную почту за пределы транзакции (после фиксации), потому что отправка электронной почты может привести к сбою, ведущему к сиротской учетной записи.
Чтобы использовать JMS в этом сценарии - поставьте JMS-код отправки в транзакции БД и присоедините его к этой транзакции. Вам гарантирована доставка сообщений. На другом конце есть что-то, потребляющее очередь отправки электронных писем. В случае сбоя отправки по электронной почте лучшим вариантом является регистрация/повышение оповещения - JMS откатится и вернет сообщение в очередь для последующего потребления. т. е. попытаться повторно отправить электронную почту, как только вы, надеюсь, исправите проблему.
Критическая вещь - запись в формате DB согласована, и в конечном итоге электронная почта отправляется.
Как вы откатываете электронное письмо? – mbeckish
возможно отправка отзыва :) –
Отказ будет работать. Теоретически я мог вырвать его из сервера Exchange, как будто этого не произошло, но это может стать подозрительным. –