Вы можете использовать JMS и JTA (Java Transaction API) вместе - см. Здесь . При этом отправка сообщения JMS или использование полученного сообщения фактически происходит атомарно как часть фиксации транзакции.
Что это значит? Если транзакция завершается неудачно или откатывается, «отправленное» сообщение не исчезает, а любые «полученные» сообщения на самом деле не используются. Все они обрабатываются для вас вашим JMS и JTA провайдером.
Вам необходимо использовать реализацию JMS, которая поддерживает JTA. Похоже, вы уже используете транзакции, поэтому может потребоваться выполнить настройку, чтобы это произошло (энергично машет рукой ...).
У меня был опыт использования этого (BEA WebLogic 7 с BEA WebLogic Integration). Работал так, как рекламировалось - «внешний мир» не видел влияния JMS, который я пробовал, если транзакция не была успешно завершена.