package com.aol.micro.server.spring.datasource.hibernate; import java.util.List; import java.util.Properties; import javax.sql.DataSource; import com.aol.cyclops2.util.ExceptionSoftener; import lombok.AllArgsConstructor; import lombok.Builder; import org.hibernate.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import com.aol.micro.server.spring.datasource.JdbcConfig; @Builder @AllArgsConstructor public class HibernateSessionBuilder { private final Logger logger = LoggerFactory.getLogger(getClass()); private final JdbcConfig env; private final DataSource dataSource; private final List<String> packages; public SessionFactory sessionFactory() { LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); List<String> packagesToScan = packages; sessionFactoryBean.setPackagesToScan(packagesToScan.toArray(new String[packagesToScan.size()])); Properties p = new Properties(); p.setProperty("hibernate.dialect", env.getDialect()); if (env.getShowSql() != null) p.setProperty("hibernate.show_sql", env.getShowSql()); if (env.getDdlAuto() != null) p.setProperty("hibernate.hbm2ddl.auto", env.getDdlAuto()); if(env.getInitializationFile() != null) { p.setProperty("hibernate.hbm2ddl.import_files", env.getInitializationFile()); } logger.info("Hibernate properties [ hibernate.dialect : {} ; hibernate.hbm2ddl.auto : {} ]", env.getDialect(), env.getDdlAuto()); sessionFactoryBean.setHibernateProperties(p); try { sessionFactoryBean.afterPropertiesSet(); } catch (Exception e) { logger.error(e.getMessage(), e); ExceptionSoftener.throwSoftenedException(e); } try { return sessionFactoryBean.getObject(); } catch (Exception e) { logger.error(e.getMessage(), e); ExceptionSoftener.throwSoftenedException(e); } return null; } public HibernateTransactionManager transactionManager() { HibernateTransactionManager transactionManager = new HibernateTransactionManager(); transactionManager.setSessionFactory(sessionFactory()); return transactionManager; } }