Websphere Liberty: сеансы JMS не работают - PullRequest
0 голосов
/ 06 марта 2020

Я мигрирую EJB-приложение из websphere 9.0 в Liberty. Я использую утилиту миграции сервера приложений, чтобы помочь мне с миграцией. Одна из перечисленных проблем:

Портированные сеансы JMS с локальной транзакцией не работают в Liberty

Я проверил детали, упомянутые в справке, но я не мог понять многое из деталей.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

API-интерфейсы JMS предоставляют методы для пакетирования нескольких сообщений, отправляемых и получаемых за одну транзакцию. Эти методы предназначены для использования в неуправляемых клиентских средах. Чтобы сделать это, нужно создать транзакционный сеанс (или JMSContext), а затем вызвать методы commit или rollback.

В управляемой среде спецификация фактически говорит, что вы не можете сделать это, а транзакционные параметры игнорируются , Это связано с тем, что если вы выполняете работу JMS в глобальной транзакции, то эту работу необходимо координировать с этой транзакцией, поэтому принятие / откат не имеет смысла.

Традиционный сервер приложений WebSphere (по историческим причинам c) , позволяет создавать транзакционный сеанс JMS и вызывать фиксацию и откат вне глобальной транзакции (если вы находитесь внутри нее, следуя предписанному поведению spe c) при использовании IBM MQ.

Правило, о котором идет речь ищет создание транзакционного сеанса JMS или JMSContext и сообщает о возможной проблеме.

Если ваш код выполняется в глобальной транзакции, это ложное срабатывание, и вы можете его игнорировать. Если вы работаете вне глобальной транзакции и используете провайдера MQ JMS, вам следует проверить свой код, чтобы выполнить одно из следующих действий:

  1. Переместить код в глобальную транзакцию
  2. Переписать код, чтобы перестать полагаться на методы фиксации / отката
0 голосов
/ 06 марта 2020

JMS-сессий в целом будут работать в Liberty. Однако транзакционные сеансы JMS не будут работать. Следовательно, приложения, использующие транзакционные сеансы JMS, которые перенесены в Liberty, не будут работать должным образом.

Транзакционный сеанс JMS позволяет клиенту собирать различные операции JMS (например, отправлять и потреблять сообщения) в одну единицу работы, которая фиксируется или откатывается атомарно.

Для ясности, транзакционный сеанс JMS использует так называемую «локальную» транзакцию, поскольку транзакция применяется только к указанному c соответствующему сеансу JMS. Это отличается от «глобальной» транзакции (иногда называемой транзакцией «JTA» или «XA»), которая может включать много разных видов ресурсов (например, JMS, JDB C и др. c.), И чей коммит и Откат - это атом c по всем этим ресурсам.

...