Конфигурация 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. Дважды проверьте, пожалуйста, и удалите их, если это так.