В чем смысл транзакционных не-xa сеансов JMS? - PullRequest
4 голосов
/ 09 февраля 2011

Это только я или JMS API не согласуется с тем, как он моделирует Transacted и XA Transacted эквиваленты?

Я не совсем понимаю, почему существуют формы XA для ConnectionFactory, QueueConnectionFactory, Session и т. Д. И так много дублирования:

Например

XAQueueConnection

    XAQueueSession
    createXAQueueSession() throws JMSException;

    QueueSession
    createQueueSession(boolean transacted,
                       int acknowledgeMode) throws JMSException;

содержит методы длясеанс без транзакций и транзакций?

  • Почему оба?
  • Если у меня есть XAQC, зачем мне не транзакционная QS?
  • Если я хотел этого, зачем мне создавать XAQueueConnection?

1 Ответ

4 голосов
/ 10 февраля 2011

Они обеспечивают градиент классов обслуживания.JMS допускает ...

  • Сообщения вне единицы работы
  • Сообщения внутри однофазной фиксации (1PC)
  • Сообщения внутри двух-фазный коммит (2PC / XA) ​​

Стоимость каждого из них увеличивается со степенью надежности.Как правило, вы хотите использовать метод с наименьшей стоимостью, который требуется приложению.Если у вас есть непостоянное, истекающее сообщение с предупреждением об истечении срока действия (например, событие биржевого тикера), помещение его в единицу работы является расточительным.Точно так же, если вам нужен транзакционный сеанс, но JMS - ваш единственный менеджер ресурсов, XA будет пустой тратой.

С другой стороны, если вам нужен XA для некоторых операций, это не означает, что вы должны затемиспользуйте XA для всех операций.Например, у вас может быть одно соединение, внутри которого вы поддерживаете один сеанс для транзакций XA и другой сеанс для обмена сообщениями не-XA.Первым из них является получение запросов на длительные процессы и обновление базы данных с подробностями процесса.Другой сеанс используется для отправки периодических обновлений статуса.Соединение должно быть XAConnection, но для повышения производительности вам необходим как сеанс XA, так и сеанс не XA под ним.Вы также можете поддерживать отдельные соединения, но этот метод позволяет вам осуществлять обмен сообщениями как XA, так и не XA в рамках одного соединения.Для брокеров со многими связями эта оптимизация может быть критической.

По общему признанию, это не очень распространенный вариант использования, но он все еще является допустимым и достаточно полезным, чтобы быть включенным в спецификацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...