package com.griddynamics.jagger.jaas.config; import org.apache.tomcat.jdbc.pool.DataSource; import org.hibernate.SessionFactory; import org.hibernate.ejb.HibernatePersistence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.orm.jpa.hibernate.SpringNamingStrategy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; import org.springframework.orm.hibernate3.HibernateTransactionManager; import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.Properties; /** * Spring config for JaaS data storage. */ @Configuration @EnableTransactionManagement @PropertySource({"classpath:persistence.properties"}) public class PersistenceConfig { @Autowired private Environment env; private String packagesToScan = "com.griddynamics.jagger.jaas.storage.model"; @Bean public AnnotationSessionFactoryBean sessionFactory() { AnnotationSessionFactoryBean sessionFactory = new AnnotationSessionFactoryBean(); sessionFactory.setDataSource(jaasDataSource()); sessionFactory.setPackagesToScan(packagesToScan); sessionFactory.setHibernateProperties(hibernateProperties()); sessionFactory.setNamingStrategy(new SpringNamingStrategy()); return sessionFactory; } @Bean public DataSource jaasDataSource() { DataSource dataSource = new DataSource(); dataSource.setDriverClassName(env.getProperty("jaas.db.driver")); dataSource.setUrl(env.getProperty("jaas.db.url")); dataSource.setUsername(env.getProperty("jaas.db.user")); dataSource.setPassword(env.getProperty("jaas.db.pass")); return dataSource; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(jaasDataSource()); entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class); entityManagerFactoryBean.setPackagesToScan(packagesToScan); entityManagerFactoryBean.setJpaProperties(hibernateProperties()); return entityManagerFactoryBean; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(sessionFactory); return txManager; } @Bean public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { return new PersistenceExceptionTranslationPostProcessor(); } Properties hibernateProperties() { return new Properties() { { setProperty("hibernate.hbm2ddl.auto", env.getProperty("jaas.hibernate.hbm2ddl.auto")); setProperty("hibernate.dialect", env.getProperty("jaas.hibernate.dialect")); setProperty("hibernate.globally_quoted_identifiers", "true"); } }; } }