Tengo la anotación @Transactional en todos mis DAO, pero solo puedo definir un TransactionManager que tome solo una SessionFactory. Tengo una SessionFactory por cliente, una DataSource por cliente y aparentemente necesito cambiar TransactionManager para cada cliente. Pero, ¿cómo puedo obtener el administrador de transacciones correcto para el cliente, cuando solo puedo definir un nombre de Spring Bean para un TransactionManager?Multiple SessionFactories, Multiple DataSources e Hibernate TransactionManager solo pueden tomar un Sessionfactory
Respuesta
Este es un ejemplo de cómo la gestión de transacciones declarativa de Spring ya no es conveniente, y necesita cambiar a programmatic management para obtener la flexibilidad que necesita. Esto le permitirá inyectar, por ejemplo, un mapa de administradores de transacciones en su capa DAO, y seleccionar el correcto según corresponda, usando TransactionTemplate
para facilitar las cosas.
Alternativamente, si está ejecutando dentro de un contenedor que admite JTA, entonces puede usar Spring's JtaTransactionManager
. Esto delega la gestión de transacciones en el servidor de la aplicación, al tiempo que conserva la semántica de Spring API. También significa que un número arbitrario de DataSources y SessionFactories puede participar bajo un gerente de transacción. Sin embargo, esto significa que sus DataSources necesitan ser totalmente administrados por el servidor de aplicaciones, lo que probablemente no le funcione.
Puede crear un PlatformTransactionManager
que delegue llamadas a un administrador de transacciones específico del cliente para el cliente actual. El cliente actual se puede almacenar, por ejemplo, como una variable ThreadLocal
.
Spring 3 tiene soporte para múltiples administradores de transacciones, mientras se mantiene la delimitación @Transactional declarativa
¿No es esto lo que quieres?
Muy útil. Gracias. – CodeBlue
- 1. Multiple SessionFactories in Windows Service con NHibernate
- 2. Multiple DbContext, multiple Database.SetInitializer
- 3. Webrole - Multiple hostHeader en un solo enlace?
- 4. Alternativas a un solo elemento <select multiple = "multiple"> para grandes conjuntos de datos
- 5. Multiple DataKeyNames en un GridView
- 6. RequireJS: Multiple main.js?
- 7. C# Multiple BackgroundWorkers
- 8. Multiple Rails ORM
- 9. Symfony multiple sites
- 10. jQuery Multiple Forms Submit
- 11. Multiple NsfetchedResultsController en un UItableView
- 12. Multiple UICollectionView en un controlador
- 13. Multiple IntentService o un servicio
- 14. Apache multiple DocumentRoot
- 15. Multiple Backgroundworkers + C#
- 16. Multiple Views OnTouch Events
- 17. Multiple Ruby EventMachines en un solo proceso: ¿es posible?
- 18. jQuery - multiple $ (document) .ready ...?
- 19. MySQL Multiple Left Joins
- 20. Apache Multiple VirtualDocumentRoot
- 21. Android Multiple Notification
- 22. Ehcache multiple JVM - opensource?
- 23. Merge (Concat) Multiple JSONObjects
- 24. C# Regex.Replace Multiple Newlines
- 25. Cómo usar Multiple TouchDelegate
- 26. Multiple Replace en VB.NET
- 27. Listview Multiple Selection
- 28. Multiple instanceof cheques
- 29. Hashes vs. Multiple Params?
- 30. Cabal Multiple Executables
Quiero decir que tengo que ajustar cada método con transactionTemplate.execute (new TransactionCallback() {}); ¿código? – newbie
@newbie: Esencialmente, sí – skaffman