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