configuración del resorte JTA - cómo establecer TransactionManager?
-
21-09-2019 - |
Pregunta
Configuramos nuestra transacción de primavera en primavera config como:
<tx:jta-transaction-manager/>
recojo esto significa que la primavera va a descubrir automáticamente la implementación JTA subyacente. Así que cuando ponemos en marcha JBoss vemos estos mensajes, mientras que las búsquedas 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>>
Y luego, finalmente, ver:
[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
La pregunta es - ¿cómo podemos modificar nuestra etiqueta <tx:jta-transaction-manager/>
a configurar de forma explícita la aplicación java:/Transaction Manager
JTA así que evitar todos estos seguimientos de pila en los registros? (I prefiere no acabo de cambiar los niveles de registro Log4J)
Actualizar :? He sustituido <tx:jta-transaction-manager/>
con el siguiente config y parece que funciona .. supongo que esto está bien
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
Solución
Sí, eso está bien. El seguimiento de pila que estaban viendo era también bien: <tx:jta-transaction-manager/>
intenta adquirir el administrador de transacciones de una serie de diferentes lugares estándar; para cada fallidos JNDI de búsqueda, verá el javax.naming.NameNotFoundException
.
java:/TransactionManager
es donde JBoss se une a por defecto; otros contenedores servlet por defecto a java:/comp/TransactionManager
, que creo que se supone que es la ubicación "estándar" para el TM.
Desde el referencia primavera documentación :
Para escenarios estándar, incluyendo WebLogic, WebSphere y OC4J, considere mediante el conveniente
<tx:jta-transaction-manager/>
elemento de configuración. Esta voluntad detectará automáticamente el subyacente servidor y elegir la mejor transacción gerente disponible para la plataforma. Esto significa que usted no tendrá que adaptador de servidor de configuración específica clases (como se discute en la siguiente secciones) de manera explícita; más bien se ser elegido de forma automática, con elJtaTransactionManager
estándar defecto de reserva.
Otros consejos
Un común "error" es agrupar cosas como jta.jar
y / o jbossall-client.jar
en el componente de J2EE de implementar. Verifique por favor, y eliminarlos si este es el caso.