Ошибка настройки вызывающего устройства прослушивания сообщений JMS для очереди назначения: XYZ: нет доступных пользовательских транзакций JTA

Мы обновляем наш проект с Spring 2.5.6 до 3.2.3 и Hibernate/JPA до 4.2.3.

В spring-ds.xml для управления транзакциями мы заменили оригинальную конфигурацию ниже

<bean id="transactionManager"
            class="org.springframework.transaction.jta.WebSphereUowTransactionManager">
            <!-- This property is specifically required for JMS -->
            <property name="transactionManager" ref="baseTransactionManager" />
      </bean>

      <bean id="baseTransactionManager"
            class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean" />
      <tx:annotation-driven transaction-manager="transactionManager" />

ниже, поскольку класс WebSphereTransactionManagerFactoryBean заменяется в последней версии WAS:

<bean id="transactionManager"
class="org.springframework.transaction.jta.WebSphereUowTransactionManager" />

и конфигурация прослушивателя JMS msg выглядит следующим образом:

<bean id="xxtMsgListenerContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsxxConnectionFactory" />
        <property name="destination" ref="jmsxxQueue" />
        <property name="messageListener" ref="xxMessageListener" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="taskExecutor" ref="taskExecutor" />

    </bean>

С приведенной выше конфигурацией мы получаем следующую ошибку в журналах WAS:

Не удалось настроить вызывающий модуль прослушивателя сообщений JMS для очереди назначения://xxQueue?busName=zzBus. Попытка восстановления. Причина: нет доступных JTA UserTransaction — программное использование PlatformTransactionManager.getTransaction не поддерживается

Требуется ли какая-либо другая конфигурация/свойство для обновления до весны 3.2.3? или для настройки WebSphereUowTransactionManager нам нужно установить какое-либо свойство?


person Om P    schedule 17.07.2013    source источник


Ответы (2)


Если вы используете Hibernate в своем приложении, фактическая используемая версия Hibernate может быть основной причиной проблемы.

Мы потратили полдня на его отладку (на компьютере с WebSphere), а затем обнаружили, что проблема действительно возникла из-за обновления версии спящего режима (с from 4.2.7.Final до 4.2.12.Final), а не с JMS configuration.

ОБНОВЛЕНИЕ: похоже, что Hibernate включает API-интерфейс транзакции jboss-transaction-api_1.1_spec, который несовместим с тем, который присутствует в Websphere. Простое исключение этого из спящего режима решило проблему.

person Puneetsri    schedule 28.05.2014

на DefaultMessageListenerContainer попробуйте установить для свойства sessionTransacted значение true. это должно включить поддержку транзакций с WebSphere

person incomplete-co.de    schedule 17.07.2013