Sto eseguendo il debug della nostra webapp. È configurato per creare un bean DataSourceTransactionManager e anche un bean HibernateTransactionManager all'avvio. Questo non è intenzionale ma è causato da una dipendenza di terze parti. L'effetto sembra essere benigno. Quello che vedo tramite il debugging è che quando persistiamo un oggetto tramite un DAO basato su Hibernate, viene richiamato il DataSourceTransactionManager e non l'HibernateTransactionManager (entrambi i bean sono chiamati 'transactionManager'). Il Javadoc di Primavera implica (penso, rileggendolo ora) questo va bene per le risorse locali - che è la nostra situazione. Cioè non è un ambiente basato su JTA distribuito.È corretto utilizzare DataSourceTransactionManager per la persistenza ORM anziché HibernateTransactionManager?
La mia domanda è: c'è qualche impatto negativo sul non utilizzo di HibernateTransactionManager per la persistenza basata su ORM. Posso modificare la configurazione per utilizzare HibernateTransactionManager tramite un qualificatore sull'annotazione @Transactional sui nostri DAO.
Le cose stanno funzionando bene con semplici test di unità, setup di test di integrazione, ma sono più preoccupato di ridimensionare a volumi di produzione completi quando avremo migliaia di utenti e un alto livello di concorrenza.
TIA, sperare che questo non sia troppo oscuro.
Spring 3.0.x BTW.
Questo è nei documenti Spring 3.1.
Sec 11,9 "Soluzioni a problemi comuni".
Utilizzare l'implementazione PlatformTransactionManager corretta basata su la scelta di tecnologie e requisiti transazionali.
+1 Hmm. interessante. grazie. proverò uno di questi test. Quello che sto vedendo è che le chiamate DAO avvengono all'interno delle transazioni e il DAO chiama getSession() - quindi Spring SessionFactoryUtils restituisce una nuova sessione e tutto sembra a posto. ma come dici tu, quanto spesso ci ricordiamo di riposare il rollback. –
Bello. Ho provato questo test. Causata un'eccezione dopo un salvataggio, con Hibernate tx mgr il salvataggio è stato ripristinato. Con il DataSourceTransactionManager non lo era. –
Puoi fornire il documento ufficiale che supporta la tua parola "Senza il gestore di hmpernate txn tutte le chiamate fatte a HibernateOperations saranno al di fuori di una transazione e in una sessione separata"? Sto usando DataSourceTransactionManager + Hibernate. – DerekY