Estoy depurando nuestra aplicación web. Está configurado para crear un bean DataSourceTransactionManager y también un bean HibernateTransactionManager en el inicio. Esto no es intencional sino que es causado por una dependencia de terceros. El efecto parece ser benigno. Lo que estoy viendo a través de la depuración es que cuando persistimos en un objeto a través de un DAO basado en Hibernate, se invoca el DataSourceTransactionManager y no el HibernateTransactionManager (los beans se llaman 'transactionManager'). El Spring Javadoc implica (creo, volver a leerlo ahora) esto está bien para los recursos locales, que es nuestra situación. Es decir. no es un entorno basado en JTA distribuido.¿Está bien utilizar DataSourceTransactionManager para persistencia ORM en lugar de HibernateTransactionManager?
Mi pregunta es: ¿hay algún impacto negativo de no utilizar el HibernateTransactionManager para la persistencia basada en ORM. Puedo cambiar la configuración para hacer que el HibernateTransactionManager se use a través de un calificador en la anotación @Transactional en nuestros DAO.
Las cosas funcionan bien en pruebas unitarias simples, configuración de prueba de integración, pero estoy más preocupado por escalar a volúmenes de producción completos cuando tendremos miles de usuarios y un alto nivel de concurrencia.
TIA, Espero que esto no sea demasiado oscuro.
Spring 3.0.x BTW.
Esto está en Spring 3.1 docs.
Sec 11.9 "Soluciones a los problemas comunes".
Utilice la implementación PlatformTransactionManager correcta basada en su elección de tecnologías y requisitos transaccionales.
+1 Hmm. interesante. gracias. probará una de estas pruebas. Lo que veo es que las llamadas DAO se llevan a cabo dentro de las transacciones, y el DAO llama a getSession(), por lo que Spring SessionFactoryUtils devuelve una nueva sesión y todo parece estar bien. pero como dices, ¿con qué frecuencia recordamos desandarnos? –
Bueno. He intentado esta prueba. Causó una excepción después de guardar, con Hibernate tx mgr se guardó el guardado. Con DataSourceTransactionManager no fue así. –
¿Podría proporcionar el documento oficial que respalda su palabra "Sin el administrador hibernate txn todas las llamadas realizadas a HibernateOperations estarán fuera de una transacción y en una sesión separada"? Estoy usando DataSourceTransactionManager + Hibernate. – DerekY