Sto usando Hibernate con Spring su Tomcat. Ho letto e riletto spesso l'argomento JBoss wiki page sull'argomento e questo è stato utile. Ma mi lascia con alcune domande.Hibernate Open Session in View: Transaction per Request?
L'idea di avviare una transazione per ogni richiesta mi turba. Immagino di poter limitare il filtro a certi controller, magari mettendo tutti i miei controller che hanno bisogno di una transazione sotto un percorso pseudo "tx" o qualcosa del genere. Ma non è una cattiva idea usare le transazioni se non sai se ne avrai bisogno? E se sto solo leggendo alcune richieste - si legge che molto probabilmente potrebbero provenire da una cache - non sto meglio senza una transazione?
Ho letto post che menzionano come hanno gestito le transazioni a livello di servizio, e mi piacerebbe farlo con Spring. Ma allora come appare il codice del filtro? Voglio comunque che la sessione sia disponibile a mio avviso per un caricamento lento.
Se tutto ciò che devo fare è chiamare il
sessionFactory.getCurrentSession()
nel mio filtro, come viene "liberato" di nuovo alla fabbrica di sessione per il riutilizzo? (Mi aspettavo di vedere unosession.close()
o qualcosa del genere, anche quando si usano le transazioni.) Chi sta dicendo alla fabbrica della sessione che quella sessione può essere riutilizzata?Forse è la chiamata
beginTransaction()
che associa una data connessione di database a una data sessione per la durata di una richiesta? Altrimenti, una sessione estrae le connessioni db dal pool, se necessario, giusto?
Grazie per la vostra pazienza con tutte le mie domande.
(E se la tua risposta sarà un link alla documentazione di Spring, mi farai piangere, non vuoi, vero? Pagherò soldi veri se la gente smetterebbe di rispondere a Spring in questo senso.)
Sono andato da qui a lì e poi a lì, saltando sul web su questo argomento per una settimana ... ed è la prima volta che ho letto che Spring ha un filtro OpenSessionInView. Grazie. – Marvo
L'uomo, che funziona così bene. Grazie! – Marvo
Ho sempre pensato che avrebbe funzionato come una transazione. Ma in realtà la transazione è limitata da SpringTransactional. Grazie per la spiegazione. –