Конфигурация Spring JTA - как установить TransactionManager?

Мы настраиваем нашу транзакцию Spring в конфигурации Spring как:

<tx:jta-transaction-manager/>

Я понимаю, это означает, что Spring автоматически обнаружит базовую реализацию JTA. Поэтому, когда мы запускаем JBoss, мы видим эти сообщения во время поиска Spring:

[JtaTransactionManager] [ ] No JTA TransactionManager found at fallback JNDI location [java:comp/Tran
sactionManager]
javax.naming.NameNotFoundException: TransactionManager not bound
<<Big stack trace>>    
<<More of the same>>

А потом в итоге увидим:

[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde

Вопрос в том, как мы можем отредактировать наш <tx:jta-transaction-manager/> тег для явной настройки java:/Transaction Manager Реализация JTA, поэтому мы избегаем всех этих следов стека в журналах? (Я бы предпочел не просто изменять уровни ведения журнала Log4J)


Обновление: я заменил <tx:jta-transaction-manager/> с приведенным ниже конфигом, и, кажется, работает.. Я думаю, это хорошо?

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>

2 ответа

Решение

Да, все в порядке. Трассировка стека, которую вы видели, также была в порядке: <tx:jta-transaction-manager/> пытается получить менеджер транзакций из нескольких разных стандартных местоположений; для каждого неудачного поиска JNDI вы увидите javax.naming.NameNotFoundException,

java:/TransactionManager где JBoss связывается по умолчанию; другие контейнеры сервлетов по умолчанию будут java:/comp/TransactionManagerЯ думаю, что это "стандартное" место для ТМ.

Из справочной документации Spring:

Для стандартных сценариев, включая WebLogic, WebSphere и OC4J, рассмотрите возможность использования удобных <tx:jta-transaction-manager/> элемент конфигурации. Это автоматически определит базовый сервер и выберет лучший менеджер транзакций, доступный для платформы. Это означает, что вам не нужно явно настраивать классы адаптера сервера (как обсуждено в следующих разделах); они скорее будут выбраны автоматически, со стандартным JtaTransactionManager как запасной вариант по умолчанию.

Распространенной "ошибкой" является объединение таких вещей, как jta.jar и / или jbossall-client.jar в развернутом компоненте J2EE. Дважды проверьте, пожалуйста, и удалите их, если это так.

Другие вопросы по тегам