Конфигурация Spring JTA – как настроить TransactionManager?
-
21-09-2019 - |
Вопрос
Мы настраиваем нашу транзакцию 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>
Решение
Да, все в порядке.Трассировка стека, которую вы видели, тоже была в порядке: <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.Проверьте еще раз и удалите их, если это так.