From a03d5154456587fc7920e632f083cc5f1e4318a9 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 20 Apr 2013 17:29:18 +0200 Subject: wip --- src/main/java/io/trygvis/spring/Config.java | 353 ++++++++++++++-------------- 1 file changed, 174 insertions(+), 179 deletions(-) (limited to 'src/main/java/io/trygvis/spring') diff --git a/src/main/java/io/trygvis/spring/Config.java b/src/main/java/io/trygvis/spring/Config.java index 5dd845f..ca75049 100755 --- a/src/main/java/io/trygvis/spring/Config.java +++ b/src/main/java/io/trygvis/spring/Config.java @@ -1,179 +1,174 @@ -package io.trygvis.spring; - -import com.jolbox.bonecp.*; -import io.trygvis.model.*; -import org.hibernate.*; -import org.hibernate.annotations.*; -import org.hibernate.cfg.*; -import org.hibernate.ejb.*; -import org.springframework.beans.factory.annotation.*; -import org.springframework.context.annotation.*; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.*; -import org.springframework.data.jpa.repository.config.*; -import org.springframework.jdbc.core.*; -import org.springframework.jdbc.datasource.*; -import org.springframework.orm.hibernate4.*; -import org.springframework.orm.jpa.*; -import org.springframework.transaction.*; -import org.springframework.transaction.annotation.*; -import org.springframework.transaction.support.*; - -import javax.persistence.*; -import javax.sql.*; -import java.util.*; - -import static org.hibernate.cfg.AvailableSettings.*; -import static org.hibernate.ejb.AvailableSettings.*; -import static org.springframework.transaction.TransactionDefinition.*; - -@Configuration -@ComponentScan(basePackages = "io.trygvis") -@EnableTransactionManagement -@EnableJpaRepositories(basePackages = "io.trygvis.data") -public class Config { - - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws Exception { - return new PropertySourcesPlaceholderConfigurer() {{ -// setLocation(new UrlResource("file:environment.properties")); - setProperties(System.getProperties()); - setLocalOverride(true); - }}; - } - - @Bean - public JdbcTemplate jdbcTemplate(DataSource dataSource) { - return new JdbcTemplate(dataSource); - } - -// public SpringBeanJobFactory springBeanJobFactory() { -// SpringBeanJobFactory factory = new SpringBeanJobFactory(); -// return factory; -// } - -/* - @Bean - public SchedulerFactoryBean quartz(DataSource dataSource, PlatformTransactionManager transactionManager) { - SchedulerFactoryBean bean = new SchedulerFactoryBean(); - bean.setApplicationContextSchedulerContextKey("applicationContext"); - bean.setDataSource(dataSource); - bean.setTransactionManager(transactionManager); -// bean.setJobFactory(new JobFactory() { -// public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws SchedulerException { -// Class klass = bundle.getJobDetail().getJobClass(); -// } -// }); - - Properties quartzProperties = new Properties(); - quartzProperties.setProperty("org.quartz.scheduler.skipUpdateCheck", "true"); -// quartzProperties.setProperty("org.quartz.jobStore.selectWithLockSQL", "false"); - quartzProperties.setProperty("org.quartz.jobStore.driverDelegateClass", PostgreSQLDelegate.class.getName()); - quartzProperties.setProperty("org.quartz.scheduler.jmx.export", "true"); - bean.setQuartzProperties(quartzProperties); - return bean; - } -*/ - - // This turns out to be fairly useless as Spring won't register them automatically. - // It's probably better to use @Scheduled/@Async instead - /* - @Bean(name = "my-job") - public JobDetailFactoryBean myJobDetailBean() { - JobDetailFactoryBean bean = new JobDetailFactoryBean(); - bean.setJobClass(MyJob.class); - bean.setDurability(true); - - return bean; - } - - @Bean - public CronTriggerFactoryBean myJobTrigger(JobDetail jobDetail) { - CronTriggerFactoryBean bean = new CronTriggerFactoryBean(); - bean.setName("my-trigger"); - bean.setBeanName("my-job"); - bean.setJobDetail(jobDetail); - bean.setCronExpression("0/10 * * * * ?"); - - return bean; - } - */ - - @Bean - public DataSource dataSource(@Value("${database.url}") String jdbcUrl, - @Value("${database.username}") String username, - @Value("${database.password}") String password) { - BoneCPDataSource ds = new BoneCPDataSource(); - - ds.setLogStatementsEnabled(true); - - ds.setJdbcUrl(jdbcUrl); - ds.setUsername(username); - ds.setPassword(password); - - ds.setIdleConnectionTestPeriodInSeconds(60); - ds.setIdleMaxAgeInSeconds(240); - ds.setMaxConnectionsPerPartition(40); - ds.setMinConnectionsPerPartition(0); - ds.setPartitionCount(1); - ds.setAcquireIncrement(1); - ds.setStatementsCacheSize(1000); - ds.setReleaseHelperThreads(3); - ds.setStatisticsEnabled(true); - return new TransactionAwareDataSourceProxy(new LazyConnectionDataSourceProxy(ds)); - } - - @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, - @Value("${hibernate.hbm2ddl.auto}") String hbm2ddl, - @Value("${hibernate.showSql:false}") boolean showSql, - @Value("${hibernate.dialect}") String dialect) { - LocalContainerEntityManagerFactoryBean x = new LocalContainerEntityManagerFactoryBean(); - x.setDataSource(dataSource); - x.setJpaPropertyMap(createJpaMap(hbm2ddl, showSql, dialect)); - x.setPackagesToScan(Article.class.getPackage().getName()); - HibernatePersistence persistenceProvider = new HibernatePersistence(); - x.setPersistenceProvider(persistenceProvider); - return x; - } - - public static Map createJpaMap(String hbm2ddl, boolean showSql, String dialect) { - Map map = new HashMap<>(); - map.put(HBM2DDL_AUTO, hbm2ddl); - map.put(FORMAT_SQL, showSql); - map.put(SHOW_SQL, showSql); - map.put(USE_SQL_COMMENTS, showSql); - map.put(GENERATE_STATISTICS, true); - map.put(NAMING_STRATEGY, ImprovedNamingStrategy.class.getName()); - - map.put(DEFAULT_CACHE_CONCURRENCY_STRATEGY, CacheConcurrencyStrategy.READ_WRITE.toString()); - map.put(CURRENT_SESSION_CONTEXT_CLASS, SpringSessionContext.class.getName()); -// map.put(CACHE_REGION_FACTORY, EhCacheRegionFactory.class.getName()); - map.put(USE_SECOND_LEVEL_CACHE, false); - map.put(USE_QUERY_CACHE, false); -// map.put(SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE.toString()); - - map.put(DIALECT, dialect); - map.put("hibernate.temp.use_jdbc_metadata_defaults", "false"); - - return map; - } - - @Bean - public SessionFactory sessionFactory(LocalContainerEntityManagerFactoryBean entityManagerFactory) { - return ((HibernateEntityManagerFactory) entityManagerFactory.nativeEntityManagerFactory).getSessionFactory(); - } - - @Bean - public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { - return new JpaTransactionManager(entityManagerFactory); - } - - @Bean - public TransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager) { - DefaultTransactionDefinition td = new DefaultTransactionDefinition(); - td.setPropagationBehavior(PROPAGATION_REQUIRED); - td.setIsolationLevel(ISOLATION_READ_COMMITTED); - return new TransactionTemplate(platformTransactionManager, td); - } -} +package io.trygvis.spring; + +import com.jolbox.bonecp.BoneCPDataSource; +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.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy; +import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; +import org.springframework.transaction.support.TransactionTemplate; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +@Configuration +@ComponentScan(basePackages = "io.trygvis") +@EnableTransactionManagement +//@EnableJpaRepositories(basePackages = "io.trygvis.data") +public class Config { + + @Bean + public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() throws Exception { + return new PropertySourcesPlaceholderConfigurer() {{ +// setLocation(new UrlResource("file:environment.properties")); + setProperties(System.getProperties()); + setLocalOverride(true); + }}; + } + + @Bean + public JdbcTemplate jdbcTemplate(DataSource dataSource) { + return new JdbcTemplate(dataSource); + } + +// public SpringBeanJobFactory springBeanJobFactory() { +// SpringBeanJobFactory factory = new SpringBeanJobFactory(); +// return factory; +// } + +/* + @Bean + public SchedulerFactoryBean quartz(DataSource dataSource, PlatformTransactionManager transactionManager) { + SchedulerFactoryBean bean = new SchedulerFactoryBean(); + bean.setApplicationContextSchedulerContextKey("applicationContext"); + bean.setDataSource(dataSource); + bean.setTransactionManager(transactionManager); +// bean.setJobFactory(new JobFactory() { +// public Job newJob(TriggerFiredBundle bundle, Scheduler scheduler) throws SchedulerException { +// Class klass = bundle.getJobDetail().getJobClass(); +// } +// }); + + Properties quartzProperties = new Properties(); + quartzProperties.setProperty("org.quartz.scheduler.skipUpdateCheck", "true"); +// quartzProperties.setProperty("org.quartz.jobStore.selectWithLockSQL", "false"); + quartzProperties.setProperty("org.quartz.jobStore.driverDelegateClass", PostgreSQLDelegate.class.getName()); + quartzProperties.setProperty("org.quartz.scheduler.jmx.export", "true"); + bean.setQuartzProperties(quartzProperties); + return bean; + } +*/ + + // This turns out to be fairly useless as Spring won't register them automatically. + // It's probably better to use @Scheduled/@Async instead + /* + @Bean(name = "my-job") + public JobDetailFactoryBean myJobDetailBean() { + JobDetailFactoryBean bean = new JobDetailFactoryBean(); + bean.setJobClass(MyJob.class); + bean.setDurability(true); + + return bean; + } + + @Bean + public CronTriggerFactoryBean myJobTrigger(JobDetail jobDetail) { + CronTriggerFactoryBean bean = new CronTriggerFactoryBean(); + bean.setName("my-trigger"); + bean.setBeanName("my-job"); + bean.setJobDetail(jobDetail); + bean.setCronExpression("0/10 * * * * ?"); + + return bean; + } + */ + + @Bean + public DataSource dataSource(@Value("${database.url}") String jdbcUrl, + @Value("${database.username}") String username, + @Value("${database.password}") String password) { + BoneCPDataSource ds = new BoneCPDataSource(); + + ds.setLogStatementsEnabled(true); + + ds.setJdbcUrl(jdbcUrl); + ds.setUsername(username); + ds.setPassword(password); + + ds.setIdleConnectionTestPeriodInSeconds(60); + ds.setIdleMaxAgeInSeconds(240); + ds.setMaxConnectionsPerPartition(40); + ds.setMinConnectionsPerPartition(0); + ds.setPartitionCount(1); + ds.setAcquireIncrement(1); + ds.setStatementsCacheSize(1000); + ds.setReleaseHelperThreads(3); + ds.setStatisticsEnabled(true); + return new TransactionAwareDataSourceProxy(new LazyConnectionDataSourceProxy(ds)); + } + +/* + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, + @Value("${hibernate.hbm2ddl.auto}") String hbm2ddl, + @Value("${hibernate.showSql:false}") boolean showSql, + @Value("${hibernate.dialect}") String dialect) { + LocalContainerEntityManagerFactoryBean x = new LocalContainerEntityManagerFactoryBean(); + x.setDataSource(dataSource); + x.setJpaPropertyMap(createJpaMap(hbm2ddl, showSql, dialect)); + x.setPackagesToScan(Article.class.getPackage().getName()); + HibernatePersistence persistenceProvider = new HibernatePersistence(); + x.setPersistenceProvider(persistenceProvider); + return x; + } + + public static Map createJpaMap(String hbm2ddl, boolean showSql, String dialect) { + Map map = new HashMap<>(); + map.put(HBM2DDL_AUTO, hbm2ddl); + map.put(FORMAT_SQL, showSql); + map.put(SHOW_SQL, showSql); + map.put(USE_SQL_COMMENTS, showSql); + map.put(GENERATE_STATISTICS, true); + map.put(NAMING_STRATEGY, ImprovedNamingStrategy.class.getName()); + + map.put(DEFAULT_CACHE_CONCURRENCY_STRATEGY, CacheConcurrencyStrategy.READ_WRITE.toString()); + map.put(CURRENT_SESSION_CONTEXT_CLASS, SpringSessionContext.class.getName()); +// map.put(CACHE_REGION_FACTORY, EhCacheRegionFactory.class.getName()); + map.put(USE_SECOND_LEVEL_CACHE, false); + map.put(USE_QUERY_CACHE, false); +// map.put(SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE.toString()); + + map.put(DIALECT, dialect); + map.put("hibernate.temp.use_jdbc_metadata_defaults", "false"); + + return map; + } + + @Bean + public SessionFactory sessionFactory(LocalContainerEntityManagerFactoryBean entityManagerFactory) { + return ((HibernateEntityManagerFactory) entityManagerFactory.nativeEntityManagerFactory).getSessionFactory(); + } + + @Bean + public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { + return new JpaTransactionManager(entityManagerFactory); + } +*/ + + @Bean + public PlatformTransactionManager transactionManager(DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); + } + + @Bean + public TransactionTemplate transactionTemplate(PlatformTransactionManager platformTransactionManager) { + return new TransactionTemplate(platformTransactionManager); + } +} -- cgit v1.2.3