Java tutorial
/** * $Id: HibernateUtil.java,v 1.3 2007/09/17 13:32:08 civilis Exp $ * Created in 2006 by tryggvil * * Copyright (C) 2000-2006 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.hibernate; import java.sql.Connection; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.persistence.EntityManagerFactory; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; import org.hibernate.ejb.HibernateEntityManagerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.idega.data.DatastoreInterface; import com.idega.util.StringUtil; import com.idega.util.database.ConnectionBroker; import com.idega.util.database.PoolManager; import com.idega.util.expression.ELUtil; /** * <p> * Class to initialize hibernate in eplatform * </p> * Last modified: $Date: 2007/09/17 13:32:08 $ by $Author: civilis $ * * Last modified: $Date: 2007/09/17 13:32:08 $ by $Author: civilis $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.3 $ */ public class HibernateUtil { private static Map<String, SessionFactory> initializedSessionFactories; private static Map<String, SessionFactory> getInitializedSessionFactories() { if (initializedSessionFactories == null) initializedSessionFactories = new HashMap<String, SessionFactory>(); return initializedSessionFactories; } public static SessionFactory configure() { try { Logger loggerRoot = Logger.getLogger(HibernateUtil.class.getName()); Logger loggerConnect = Logger.getLogger("Connect"); loggerRoot.fine("In HibernateUtil try-clause"); loggerRoot.warning("In HibernateUtil try-clause"); loggerConnect.fine("In HibernateUtil try-clause via loggerConnect DEBUG*****"); // Create the SessionFactory from hibernate.cfg.xml Properties properties = getProperties(); Configuration configuration = new Configuration(); configuration.setProperties(properties); return configuration.buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } private static SessionFactory configure(String cfgPath) { try { Configuration configuration = new AnnotationConfiguration(); if (cfgPath == null) configuration.configure(); else configuration.configure(cfgPath); return configuration.buildSessionFactory(); } catch (Throwable ex) { Logger.getLogger(HibernateUtil.class.getName()).log(Level.SEVERE, "Initial SessionFactory creation failed for cfg path: " + cfgPath, ex); throw new ExceptionInInitializerError(ex); } } private static Properties getProperties() { Properties prop = new Properties(); if (ConnectionBroker.isUsingIdegaPool()) { PoolManager pmgr = PoolManager.getInstance(); prop.put("hibernate.connection.driver_class", pmgr.getDriverClassForPool()); prop.put("hibernate.connection.url", pmgr.getURLForPool()); prop.put("hibernate.connection.username", pmgr.getUserNameForPool()); prop.put("hibernate.connection.password", pmgr.getPasswordForPool()); detectDialect(prop); } else if (ConnectionBroker.isUsingJNDIDatasource()) { String prefix = "java:comp/env/"; prop.put("hibernate.connection.datasource", prefix + ConnectionBroker.getDefaultJNDIUrl()); detectDialect(prop); } prop.put("hibernate.cache.provider_class", IWCacheProvider.class.getName()); return prop; } private static void detectDialect(Properties prop) { detectDialect(prop, null); } private static final Logger LOGGER = Logger.getLogger(HibernateUtil.class.getName()); private static HibernateUtil util = null; private HibernateUtil() { util = this; } @Autowired private EntityManagerFactory entityManagerFactory; public static final HibernateUtil getInstance() { if (util == null) util = new HibernateUtil(); return util; } private EntityManagerFactory getEntitytManagerFactory() { if (entityManagerFactory == null) ELUtil.getInstance().autowire(this); return entityManagerFactory; } private Session getSession() { EntityManagerFactory entityManagerFactory = getEntitytManagerFactory(); if (entityManagerFactory instanceof HibernateEntityManagerFactory) return ((HibernateEntityManagerFactory) entityManagerFactory).getSessionFactory().getCurrentSession(); return null; } private static void detectDialect(Properties prop, String dataSourceName) { Connection conn = null; try { conn = dataSourceName == null ? ConnectionBroker.getConnection() : ConnectionBroker.getConnection(dataSourceName); String dsType = DatastoreInterface.getDataStoreType(conn); String dialectClass = null; if (dsType.equals(DatastoreInterface.DBTYPE_DB2)) { dialectClass = org.hibernate.dialect.DB2Dialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_ORACLE)) { dialectClass = org.hibernate.dialect.Oracle8iDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_DERBY)) { dialectClass = org.hibernate.dialect.DerbyDialect.class.getName(); } //else if(dsType.equals(DatastoreInterface.DBTYPE_H2)){ // dialectClass = org.hibernate.dialect.H2Dialect.class.getName(); //} else if (dsType.equals(DatastoreInterface.DBTYPE_HSQL)) { dialectClass = org.hibernate.dialect.HSQLDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_INFORMIX)) { dialectClass = org.hibernate.dialect.InformixDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_INTERBASE)) { dialectClass = org.hibernate.dialect.FirebirdDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_MCKOI)) { dialectClass = org.hibernate.dialect.MckoiDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_MSSQLSERVER)) { dialectClass = org.hibernate.dialect.SQLServerDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_MYSQL)) { dialectClass = org.hibernate.dialect.MySQLDialect.class.getName(); } else if (dsType.equals(DatastoreInterface.DBTYPE_SAPDB)) { dialectClass = org.hibernate.dialect.SAPDBDialect.class.getName(); } prop.put("hibernate.dialect", dialectClass); } finally { ConnectionBroker.freeConnection(conn); } } public static SessionFactory getSessionFactory() { return getSessionFactory(null); } public static synchronized SessionFactory getSessionFactory(String cfgPath) { String confPath = StringUtil.isEmpty(cfgPath) ? "default" : cfgPath; Map<String, SessionFactory> sessionFactories = getInitializedSessionFactories(); if (sessionFactories.containsKey(confPath)) return sessionFactories.get(confPath); SessionFactory sf = StringUtil.isEmpty(cfgPath) ? configure() : configure(cfgPath); sessionFactories.put(confPath, sf); return sf; } }