Они обеспечивают градиент классов обслуживания.JMS допускает ...
- Сообщения вне единицы работы
- Сообщения внутри однофазной фиксации (1PC)
- Сообщения внутри двух-фазный коммит (2PC / XA)
Стоимость каждого из них увеличивается со степенью надежности.Как правило, вы хотите использовать метод с наименьшей стоимостью, который требуется приложению.Если у вас есть непостоянное, истекающее сообщение с предупреждением об истечении срока действия (например, событие биржевого тикера), помещение его в единицу работы является расточительным.Точно так же, если вам нужен транзакционный сеанс, но JMS - ваш единственный менеджер ресурсов, XA будет пустой тратой.
С другой стороны, если вам нужен XA для некоторых операций, это не означает, что вы должны затемиспользуйте XA для всех операций.Например, у вас может быть одно соединение, внутри которого вы поддерживаете один сеанс для транзакций XA и другой сеанс для обмена сообщениями не-XA.Первым из них является получение запросов на длительные процессы и обновление базы данных с подробностями процесса.Другой сеанс используется для отправки периодических обновлений статуса.Соединение должно быть XAConnection, но для повышения производительности вам необходим как сеанс XA, так и сеанс не XA под ним.Вы также можете поддерживать отдельные соединения, но этот метод позволяет вам осуществлять обмен сообщениями как XA, так и не XA в рамках одного соединения.Для брокеров со многими связями эта оптимизация может быть критической.
По общему признанию, это не очень распространенный вариант использования, но он все еще является допустимым и достаточно полезным, чтобы быть включенным в спецификацию.