package com.cv.hibernate.cache.util; 
 
import org.apache.log4j.Logger; 
import org.hibernate.HibernateException; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 
import org.hibernate.cfg.Configuration; 
 
import com.cv.hibernate.cache.model.EmployeeBean; 
 
 
/** 
 * 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 HibernateUtil { 
  private final static Logger logger = Logger.getLogger(HibernateUtil.class); 
 
  /** 
   * 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 SessionFactory sessionFactory; 
 
  static { 
    try { 
      configuration = configuration.configure(CONFIG_FILE_LOCATION); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder() 
          .applySettings(configuration.getProperties()); 
      sessionFactory = configuration.buildSessionFactory(builder.build()); 
      logger.info("%%%% Connection successful %%%%"); 
    } catch (Exception e) { 
      logger.error("%%%% Error Creating SessionFactory %%%%"); 
      e.printStackTrace(); 
    } 
  } 
 
  private HibernateUtil() { 
  } 
 
  /** 
   * 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 = configuration.configure(CONFIG_FILE_LOCATION); 
      StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder() 
          .applySettings(configuration.getProperties()); 
      sessionFactory = configuration.buildSessionFactory(builder.build()); 
      logger.info("%%%% Connection successful %%%%"); 
    } catch (Exception e) { 
      logger.error("%%%% 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 SessionFactory getSessionFactory() { 
    return sessionFactory; 
  } 
 
  /** 
   * return hibernate configuration 
   * 
   */ 
  public static Configuration getConfiguration() { 
    return configuration; 
  } 
 
  public static void saveOrUpdate() { 
    Session ses = getSession(); 
    EmployeeBean eb = new EmployeeBean(); 
    eb.setId(new Long(101)); 
    eb.setFirstName("chandra"); 
    eb.setLastName("vardhan"); 
    eb.setEmail("meetkodam@gmail.com"); 
    Transaction tx = ses.beginTransaction(); 
    ses.saveOrUpdate(eb); 
    logger.info("Saved successful..."); 
    tx.commit(); 
    ses.close(); 
  } 
}  | 
No comments:
Post a Comment