Поскольку отправка электронного письма не является транзакционной, я вижу две возможности:
- использовать глобальную транзакцию для обновления статуса поиска и получения сообщения JMS, указывающего, что электронное письмо должно быть отправлено.Оптимистичный параллелизм должен быть активирован для сущности документа (используя поле @Version).Таким образом, если транзакция завершается неудачно из-за оптимистической проверки параллелизма, сообщение JMS не отправляется.Конечно, вам нужен JMS-прослушиватель, чтобы фактически отправлять электронную почту при получении сообщения JMS
- , используя оптимистическую блокировку, и отправлять электронную почту из транзакции.Если транзакция завершается неудачно из-за оптимистической блокировки, электронное письмо не отправляется.Если это удается, электронное письмо отправляется.
Или вам просто все равно, и предположите, что одновременная загрузка в первый раз будет очень исключительной.Таким образом, вы можете получить два электронных письма вместо одного исключительно, и в этом случае вы просто удалите лишнее электронное письмо.