Я знаю, что есть много вопросов о message driven beans
и транзакциях, однако я не смог найти ответ на (как мне кажется) общий сценарий.Ведомые ведомые бобы и транзакции
У меня есть служба, которую можно вызвать для отправки электронной почты. Когда он вызывается, он создает запись электронной почты в таблице и затем подталкивает идентификатор к ActiveMQ
для обработки. Пока все хорошо, но очередь выбирает идентификатор и пытается отправить электронное письмо до совершения транзакции, а электронная почта не является в базе данных.
Служба сама по себе является транзакционной, но она также может быть частью более крупной транзакции.
Каков наилучший способ справиться с этим сценарием? Я использую Thread.sleep в данный момент в Consumer
, который работает; Однако это чувствует себя грязным ...
(я не использую Spring)
это сервис EJB и кто звонит в эту службу? –
Это сервис CDI (ApplicationScoped) и будет вызываться из любой другой службы CDI. Транзакции - это DeltaSpike (к сожалению, я не могу использовать функцию '@ Observes' TransactionPhase ... JavaEE). – StuPointerException
, если у вас есть поддержка XA, вы можете попробовать с XADatasource и XAConnectionFactory.Or, поскольку TT предложил отправить сообщение в очередь из класса, который вызывает службу ur после вызова службы возврата. –