Configuração do JTA da primavera - Como definir o TransactionManager?
-
21-09-2019 - |
Pergunta
Configuramos nossa transação de primavera na configuração da primavera como:
<tx:jta-transaction-manager/>
Concluo isso significa que a primavera descobrirá automaticamente a implementação do JTA subjacente. Então, quando começamos o JBoss, vemos essas mensagens enquanto as pesquisas de primavera:
[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>>
E então finalmente veja:
[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
A pergunta é - como podemos editar nosso <tx:jta-transaction-manager/>
tag para configurar explicitamente o java:/Transaction Manager
Implementação do JTA para evitar todos esses traços de pilha nos logs? (Eu prefiro não apenas alterar os níveis de registro LOG4J)
Atualizar: Eu substituí <tx:jta-transaction-manager/>
com a configuração abaixo e parece funcionar .. Estou supondo que isso esteja bem?
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
Solução
Sim, tudo bem. O traço da pilha que você estava vendo também estava bem: <tx:jta-transaction-manager/>
tenta adquirir o gerente de transação de vários locais padrão; Para cada pesquisa JNDI fracassada, você verá o javax.naming.NameNotFoundException
.
java:/TransactionManager
é para onde Jboss se liga por padrão; Outros contêineres de servlet vão padrão para java:/comp/TransactionManager
, o que eu acho que deveria ser o local "padrão" para a TM.
De Documentação de referência da primavera:
Para cenários padrão, incluindo WebLogic, WebSphere e OC4J, considere usar o conveniente
<tx:jta-transaction-manager/>
Elemento de configuração. Isso detectará automaticamente o servidor subjacente e escolherá o melhor gerenciador de transações disponível para a plataforma. Isso significa que você não precisará configurar classes adaptadoras específicas do servidor (conforme discutido nas seções a seguir) explicitamente; Eles preferem ser escolhidos automaticamente, com o padrãoJtaTransactionManager
como fallback padrão.
Outras dicas
Um "erro" comum é agrupar coisas como jta.jar
e/ou jbossall-client.jar
No componente J2EE que você implanta. Verifique duas vezes e remova -as se for esse o caso.