Personellement, j'utilise ce HibernateUtil :
Code:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Crée la SessionFactory
sessionFactory =
new Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Problème de configuration : "
+ ex.getMessage(), ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession()
throws HibernateException {
Session s = (Session) session.get();
// Ouvre une nouvelle Session, si ce Thread n'en a aucune
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession()
throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
Qui me permet, vu que je suis en univers J2EE donc plusieur thread d'avoir à chaque instant une session par thread qui la demande (ThreadLocal)
C'est d'ailleur un des point qui me fait poser des questions car j'utilise HibernateUtil dans une classe singleton HibernateManager et je ne suis pas sur de bien gerer les session lorque mon applis era en production et qu'il y aura plusieur utilisateur à la fois :
Exemple de recuperation de session et de fermeture (je suppose que le ThreadLocal de HibernateUtil me permet d'avoir bien une session differente par requète simultané)
Code:
public Session startSession() throws HibernateException {
return HibernateUtil.currentSession();
}
public void closeSession() throws HibernateException {
HibernateUtil.closeSession();
}
Exemple d'utilisation :
Code:
try {
s = accessManager.startSession();
accessManager.startTransaction(s);
us = accessManager.recupererUser(identifiantUser,s);
authenticated = us.getAuthentification().verifPass(passUser,us.getTel());
}
catch (HibernateException e){
e.printStackTrace();
throw e;
}
Comment avec le HibernteUtil de la doc puis-je retrouver ma protection pour un univers web et donc des requète de plusieur client en même temps et que certains traitements ne ferment pas la session qu'utilise d'autres traitements ?