package be.redtree.sql;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import be.redtree.model.Field;
import be.redtree.model.FieldResult;
import be.redtree.model.Form;
import be.redtree.model.FormResult;
import be.redtree.model.MultiValue;
import be.redtree.model.SingleValue;
import com.liferay.portal.kernel.util.PropsUtil;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
private static SessionFactory getSessionFactory() {
try {
if (sessionFactory == null) {
Configuration config = new Configuration();
config.addAnnotatedClass(Field.class);
config.addAnnotatedClass(Form.class);
config.addAnnotatedClass(MultiValue.class);
config.addAnnotatedClass(SingleValue.class);
config.addAnnotatedClass(FormResult.class);
config.addAnnotatedClass(FieldResult.class);
config.setProperty("hibernate.connection.driver_class", PropsUtil.get("jdbc.default.driverClassName"));
config.setProperty("hibernate.connection.url", PropsUtil.get("jdbc.default.url"));
config.setProperty("hibernate.connection.username", PropsUtil.get("jdbc.default.username"));
config.setProperty("hibernate.connection.password", PropsUtil.get("jdbc.default.password"));
config.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
config.setProperty("hibernate.cache.region.factory_class", "net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory");
config.setProperty("hibernate.cache.use_query_cache", "false");
config.setProperty("hibernate.cache.use_second_level_cache", "false");
config.setProperty("hibernate.current_session_context_class", "thread");
config.setProperty("hibernate.hbm2ddl.auto", "update");
/*
* C3p0
*/
config.setProperty("hibernate.connection.provider_class", "org.hibernate.connection.C3P0ConnectionProvider");
config.setProperty("hibernate.c3p0.acquire_increment", "1");
config.setProperty("hibernate.c3p0.idle_test_period", "300");
config.setProperty("hibernate.c3p0.timeout", "1");
config.setProperty("hibernate.c3p0.max_size", "25");
config.setProperty("hibernate.c3p0.min_size", "1");
config.setProperty("hibernate.c3p0.max_statement", "0");
config.setProperty("hibernate.c3p0.preferredTestQuery", "select 1;");
serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
sessionFactory = config.buildSessionFactory(serviceRegistry);
}
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
return sessionFactory;
}
private static Session openSession(SessionFactory sessionFactory) {
return sessionFactory.getCurrentSession();
}
public static Session getSession() {
Session session = openSession(getSessionFactory());
Transaction tx = session.beginTransaction();
return session;
}
public static void shutDown(Session session) {
session.getTransaction().commit();
if ((session != null) && session.isOpen()) {
session.close();
}
}
}