1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
package com.obia.safe.database.utils;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils
{
private static final SessionFactory sessionFactory;
private static final Logger logger = Logger.getLogger(HibernateUtils.class);
static
{
try
{
logger.debug("Création Session Factory Hibernate");
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch (HibernateException ex)
{
logger.error("Erreur lors de la création de la Session Factory Hibernate : " + ex.getMessage());
throw new RuntimeException("Problème de configuration : " + ex.getMessage(), ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
/**
* Récupération de la session Hibernate
*/
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)
{
logger.debug("Acquisition d'une nouvelle Session Hibernate pour le Thread " + Thread.currentThread().hashCode());
s = sessionFactory.openSession();
session.set(s);
}
logger.debug("Récupération de la Session Hibernate " + s.hashCode() + " pour le Thread " + Thread.currentThread().hashCode());
return s;
}
/**
* Fermeture de la session Hibernate
*/
public static void closeSession() throws HibernateException
{
Session s = (Session) session.get();
if ( s == null ) return ;
logger.debug("Fermeture de la Session Hibernate " + s.hashCode() + " pour le Thread " + Thread.currentThread().hashCode());
session.set(null);
s.close();
}
} |