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>
Foi útil?

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ão JtaTransactionManager 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top