package no.niths.common.config; import java.util.Properties; import javax.sql.DataSource; import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.hibernate4.encryptor.HibernatePBEStringEncryptor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate4.HibernateExceptionTranslator; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * Configuration class for Hibernate * <p> * @see application.properties * </p> * */ @Configuration @EnableTransactionManagement @ComponentScan({"no.niths.services", "no.niths.infrastructure", "no.niths.aop"}) public class HibernateConfig{ private final String DRIVER = "jdbc.driver.class_name", URL = "jdbc.url", USERNAME = "jdbc.username", PASSWORD = "jdbc.password", DIALECT = "hibernate.dialect", HBM2DDL_AUTO = "hibernate.hbm2ddl.auto", SHOW_SQL = "hibernate.show_sql"; @Value("${" + DRIVER + "}") private String driver; @Value("${" + URL + "}") private String url; @Value("${" + USERNAME + "}") private String username; @Value("${" + PASSWORD + "}") private String password; @Value("${" + DIALECT + "}") private String hibernateDialect; @Value("${" + HBM2DDL_AUTO + "}") private String hbm2ddlAuto; @Value("${" + SHOW_SQL + "}") private Boolean showSQL; @Value("${jasypt.password}") private String jasyptPassword; final Properties additionlProperties(){ Properties props = new Properties(); props.setProperty(DIALECT, hibernateDialect); props.setProperty(HBM2DDL_AUTO, hbm2ddlAuto); props.setProperty(SHOW_SQL, showSQL.toString()); return props; } @Bean public LocalSessionFactoryBean alertsSessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(restDataSource()); sessionFactory.setPackagesToScan(AppConfig.BASE_PACKAGE); sessionFactory.setHibernateProperties(additionlProperties()); return sessionFactory; } @Bean public DataSource restDataSource(){ DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } @Bean public HibernateTransactionManager transactionManager(){ HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(alertsSessionFactory().getObject()); return txManager; } @Bean public PersistenceExceptionTranslator exceptionTranslator() { return new HibernateExceptionTranslator(); } /** * Database entity attribute encryptor */ @Bean public PooledPBEStringEncryptor strongEncryptor() { PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); encryptor.setAlgorithm("PBEWithMD5AndDES"); encryptor.setPassword(jasyptPassword); encryptor.setPoolSize(5); return encryptor; } /** * Wrapper bean for the database entity encryptor */ @Bean public HibernatePBEStringEncryptor hibernateStringEncryptor(){ HibernatePBEStringEncryptor encryptor = new HibernatePBEStringEncryptor(); encryptor.setRegisteredName("strongHibernateStringEncryptor"); encryptor.setEncryptor(strongEncryptor()); return encryptor; } }