http://www.cnblogs.com/beyond_beyond/archive/2005/04/27/146435.html
- import net.sf.hibernate.HibernateException;
- import net.sf.hibernate.Session;
- import net.sf.hibernate.Transaction;
- import net.sf.hibernate.cfg.Configuration;
- public class HibernateUtil {
- private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
- /**//** Holds a single instance of Session */
- private static final ThreadLocal threadLocal = new ThreadLocal();
- private static final ThreadLocal threadTransaction = new ThreadLocal();
- /**//** The single instance of hibernate configuration */
- private static final Configuration cfg = new Configuration();
- /**//** The single instance of hibernate SessionFactory */
- private static net.sf.hibernate.SessionFactory sessionFactory;
- /**//**
- * Returns the ThreadLocal Session instance. Lazy initialize the
- * <code>SessionFactory</code> if needed.
- *
- * @return Session
- * @throws HibernateException
- */
- public static Session getSession() throws HibernateException {
- Session session = (Session) threadLocal.get();
- if (session == null) {
- if (sessionFactory == null) {
- try {
- cfg.configure(CONFIG_FILE_LOCATION);
- sessionFactory = cfg.buildSessionFactory();
- } catch (Exception e) {
- System.err.println("%%%% Error Creating SessionFactory %%%%");
- e.printStackTrace();
- }
- }
- session = sessionFactory.openSession();
- threadLocal.set(session);
- }
- return session;
- }
- /**//**
- * Close the single hibernate session instance.
- *
- * @throws HibernateException
- */
- public static void closeSession() throws HibernateException {
- Session session = (Session) threadLocal.get();
- threadLocal.set(null);
- if (session != null) {
- session.close();
- }
- }
- /**//**
- * Default constructor.
- */
- private HibernateUtil() {
- }
- public static void beginTransaction() throws HibernateException {
- Transaction tx = (Transaction) threadTransaction.get();
- try {
- if (tx == null) {
- tx = getSession().beginTransaction();
- threadTransaction.set(tx);
- }
- } catch (HibernateException ex) {
- throw new HibernateException(ex.toString());
- }
- }
- public static void commitTransaction() throws HibernateException {
- Transaction tx = (Transaction) threadTransaction.get();
- try {
- if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack())
- tx.commit();
- threadTransaction.set(null);
- } catch (HibernateException ex) {
- rollbackTransaction();
- throw new HibernateException(ex.toString());
- }
- }
- public static void rollbackTransaction() throws HibernateException {
- Transaction tx = (Transaction) threadTransaction.get();
- try {
- threadTransaction.set(null);
- if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
- tx.rollback();
- }
- } catch (HibernateException ex) {
- throw new HibernateException(ex.toString());
- } finally {
- closeSession();
- }
- }
- }