Spring Конфигурация JTA - как установить TransactionManager?
Мы сконфигурируем транзакцию Spring в Spring config как:
<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
[email protected]
Вопрос: как мы можем отредактировать наш тег <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>
Ответы
Ответ 1
Да, это хорошо. Трассировка стека, которую вы видели, также была в порядке: <tx:jta-transaction-manager/>
пытается получить менеджера транзакций из нескольких разных стандартных местоположений; для каждого неудачного поиска JNDI вы увидите javax.naming.NameNotFoundException
.
java:/TransactionManager
- это то, где JBoss привязывается по умолчанию; другие контейнеры сервлетов будут по умолчанию равны java:/comp/TransactionManager
, которые, как я полагаю, должны быть "стандартным" местом для TM.
Из справочной документации Spring:
Для стандартных сценариев, включая WebLogic, WebSphere и OC4J, рассмотрим используя удобный <tx:jta-transaction-manager/>
элемент конфигурации. Это будет автоматически обнаруживают сервера и выберите лучшую транзакцию менеджер для платформы. Это означает, что вам не придется настроить серверный адаптер классов (как описано ниже разделы) явно; они скорее выбирается автоматически, при этом стандарт JtaTransactionManager
как сброс по умолчанию.
Ответ 2
Общей "ошибкой" является объединение таких вещей, как jta.jar
и/или jbossall-client.jar
в компоненте J2EE, который вы развертываете. Дважды проверьте пожалуйста и удалите их, если это так.