Я ожидаю, что какое-либо сообщение будет заблокировано во время выполнения транзакции, и дубликаты не должны отправляться, поскольку спецификация JMS требует:
4.4.15 Производство дублирующихся сообщений: провайдеры JMSникогда не должен создавать дубликаты сообщений.Это означает, что клиент, который создает сообщение, может полагаться на своего провайдера JMS, чтобы гарантировать, что потребители сообщения получат его только один раз.
, поэтому я думаю, что вы можете положиться на провайдера обмена сообщениями, чтобы гарантировать, чтоMDB не получает вторую копию сообщения, если только первая явно не откатывается или транзакция не выполняется по тайм-ауту и неявно откатывается.Обе эти операции должны «разблокировать» сообщение и сделать его доступным для повторной доставки в MDB, при этом для JMSRedelivered установлено значение true и значение JMSXDeliveryCount увеличено.
Я подозреваю, что есть дополнительные требования для дополнения спецификации JMS в одном (илиподробнее) спецификаций EJB, JCA или JTA (или J2EE, если на то пошло) я не проверял.