Qual è il modo migliore per gestire le sessioni di Hibernate in un'applicazione Struts-1?

3

Ora sono il proprietario di un'applicazione Struts-1 e la gestione della sessione di Hibernate è dappertutto. Ho cercato la documentazione online ma non ho trovato una chiara spiegazione del modo migliore per gestire le sessioni di Hibernate in un'applicazione Struts. Presumibilmente, una sessione di ibernazione deve essere creata (o recuperata) all'inizio di ogni azione e una transazione viene aperta, quindi la transazione viene impegnata o annullata alla fine dell'azione. È corretto? Come può essere gestito per tutte le azioni senza duplicare il codice in ogni azione? Ogni azione deve recuperare oggetti dal DB, chiamare le funzioni del modello e quindi salvare gli oggetti, ala Ruby on Rails?

    
posta kevin cline 13.06.2011 - 16:20
fonte

1 risposta

4

Non penso che i montanti 1 siano dotati di un filtro OpenSessionInView, ma un modo per gestire le sessioni è l'apertura delle sessioni per ogni richiesta, a cui si accede tramite il pattern locale del thread.

Ciò manterrà la sessione aperta fino a quando la richiesta non avrà completato il rendering, il che significa che puoi utilizzare le raccolte istanziate pigramente nelle tue viste in modo sicuro.

Spring ships con un filtro opensessioninview, ecco un articolo su come usarlo , oppure, è relativamente semplice scriverlo come un filtro servlet standard.

per scrivere il tuo, scrivi ServletFilter che implementa Filter e implementa un metodo doFilter. assomiglierebbe a qualcosa:

void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) {
   Session session;
   try {
      session = // get my hibernate session here
      // do the request
      chain.doFilter(req, res);
   } catch (Whatever) {
   } finally {
     // close my session here
   }

dovresti registrare questo filtro nel tuo web.xml e applicarlo agli URL con i quali hai bisogno di sessioni. Questa non è la soluzione più elegante al mondo, ma funziona perfettamente.

    
risposta data 13.06.2011 - 16:41
fonte

Leggi altre domande sui tag