//
// (C) Copyright 2007 VeriSign, Inc. All Rights Reserved.
//
// VeriSign, Inc. shall have no responsibility, financial or
// otherwise, for any consequences arising out of the use of
// this material. The program material is provided on an "AS IS"
// BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
// express or implied.
//
// Distributed under an Apache License
// http://www.apache.org/licenses/LICENSE-2.0
//
package org.verisign.joid.db;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* Manages Hibernate connections to our underlying database.
*
* Typical usecase:
* <pre>
* Session session = HibernateUtil.currentSession();
* Transaction tx = session.beginTransaction();
* ... do something with session ...
* tx.commit();
* HibernateUtil.closeSession();
* </pre>
*/
public class HibernateUtil
{
private static final SessionFactory sessionFactory;
private HibernateUtil() {}
static {
try {
Configuration config = new Configuration()/*{
protected InputStream
getConfigurationInputStream(String resource)
throws HibernateException
{
InputStream stream = null;
stream = getClass().getResourceAsStream(resource);
if (stream == null) {
throw new HibernateException(resource
+ " not found");
}
return stream;
}
}*/;
config.configure("org.verisign.joid.db.hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
ex.printStackTrace();
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
private static final ThreadLocal session = new ThreadLocal();
/**
* Returns the current database session. Opens a new session, if this
* thread has none yet.
*
* @return the current database session.
*
* @throws HibernateException if the Hibernate layer chokes.
*/
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
/**
* Closes the current database session.
*
* @throws HibernateException if the Hibernate layer chokes.
*/
public static void closeSession() throws HibernateException
{
Session s = (Session) session.get();
session.set(null);
if (s != null) {
s.close();
}
}
}