Io di solito uso il modello di gestione delle sessioni Hibernate ThreadLocal in progetti Web Java:Hibernate ThreadLocale Gestione della sessione compatibile con ForkJoinPool?
Il pattern Thread Local Session fa uso della classe java.lang.ThreadLocal per creare una sessione che è accessibile da una singola applicazione filo. Questo è particolarmente utile nelle applicazioni multithread , come le applicazioni web.
Nei progetti a implementare questo con
<property name="current_session_context_class">thread</property>
nel hibernate.xml
e utilizzando SessionFactory.getCurrentSession()
per ottenere una sessione ogni volta che ho bisogno di uno.
Ora ho un programma che è non un servlet, ma esegue l'elaborazione parallela pesante e l'interazione del database.
Voglio implementarlo con ForkJoinPool. Ora mi chiedo se sia un errore utilizzare la gestione della sessione ThreadLocal di Hibernate in questo scenario. Per quanto ho capito, ForkJoinPool utilizza un numero inferiore di thread e li condivide tra le attività in esecuzione mentre altre attività stanno dormendo. (Motivato dall'arresto/annoying delle connessioni "task in transaction",) Voglio chiudere() ogni Hibernate Session dopo un'unità di lavoro
Quindi .. quando chiamo HibernateSessionFactory.getThreadLocalSession(). Close() al fine del mio compito - e l'attività viene eseguita in un ForkJoinPool - sorgeranno problemi Devo abbandonare il modello ThreadLocal per i calcoli paralleli pesanti e gestire le Sessioni me
Grazie in anticipo per eventuali risposte
Si sta utilizzando SessionFactory.getCurrentSession() o .openSession() per ottenere gli oggetti Session? Se getCurrentSession, quale CurrentSessionContext stai usando? Sto indovinando ThreadLocalSessionContext, ma ti stai riferendo ad esso come un 'pattern' in contrasto con una classe. – sharakan
Grazie per l'esame di questo .. Ho aggiornato la domanda con maggiori dettagli. – alfonx