HibernateSessionFactory

来源:互联网 发布:全国打拐dna数据库查询 编辑:程序博客网 时间:2024/05/21 17:44

package com.cse.common;

 

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
import net.sf.hibernate.cfg.Configuration;

 

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the Thread Local Session
 * pattern, see {@link http://hibernate.org/42.html }.
 */
public class HibernateSessionFactory {

    /**
     * Location of hibernate.cfg.xml file.
     * Location should be on the classpath as Hibernate uses 
     * #resourceAsStream style lookup for its configuration file.
     * The default classpath location of the hibernate config file is
     * in the default package. Use #setConfigFile() to update
     * the location of the configuration file for the current session.  
     */
    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();
    private static net.sf.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

 

   static {
     try {
       configuration.configure(configFile);
       sessionFactory = configuration.buildSessionFactory();
     } catch (Exception e) {
       System.err.println("%%%% Error Creating SessionFactory %%%%");
       e.printStackTrace();
     }
   }


    private HibernateSessionFactory() {
    }
 
   /**
     * 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 || !session.isOpen()) {
         if (sessionFactory == null) {
           rebuildSessionFactory();
        }
        session = (sessionFactory != null) ? sessionFactory.openSession() : null;
        threadLocal.set(session);
      }

        return session;
    }

 

  /**
     *  Rebuild hibernate session factory
     *
     */
 public static void rebuildSessionFactory() {
   try {
     configuration.configure(configFile);
     sessionFactory = configuration.buildSessionFactory();
   } catch (Exception e) {
     System.err.println("%%%% Error Creating SessionFactory %%%%");
     e.printStackTrace();
   }
 }

 

   /**
     *  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();
        }
    }

 

   /**
     *  return session factory
     *
     */
 public static net.sf.hibernate.SessionFactory getSessionFactory() {
   return sessionFactory;
 }

 

   /**
     *  return session factory
     *
     * session factory will be rebuilded in the next call
     */
 public static void setConfigFile(String configFile) {
   HibernateSessionFactory.configFile = configFile;
   sessionFactory = null;
 }

 

   /**
     *  return hibernate configuration
     *
     */
 public static Configuration getConfiguration() {
   return configuration;
 }

 

}

原创粉丝点击