From 03f9ccc72d66fefe73f6f28271eb294da2db490a Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Tue, 1 Jul 2014 19:00:31 +0200 Subject: [PATCH] Replace XML to Java configuration for business layer --- .../petclinic/config/BusinessConfig.java | 22 +++++ .../samples/petclinic/config/JdbcConfig.java | 40 ++++++++ .../samples/petclinic/config/JpaConfig.java | 12 +++ .../config/RootApplicationContextConfig.java | 4 +- .../petclinic/config/SharedJpaConfig.java | 64 +++++++++++++ .../petclinic/config/SpringDataJpaConfig.java | 12 +++ src/main/resources/spring/business-config.xml | 96 ------------------- .../service/ClinicServiceJdbcTests.java | 3 +- .../service/ClinicServiceJpaTests.java | 3 +- .../ClinicServiceSpringDataJpaTests.java | 3 +- .../petclinic/web/VisitsViewTests-config.xml | 13 --- .../petclinic/web/VisitsViewTests.java | 6 +- 12 files changed, 164 insertions(+), 114 deletions(-) create mode 100644 src/main/java/org/springframework/samples/petclinic/config/BusinessConfig.java create mode 100644 src/main/java/org/springframework/samples/petclinic/config/JdbcConfig.java create mode 100644 src/main/java/org/springframework/samples/petclinic/config/JpaConfig.java create mode 100644 src/main/java/org/springframework/samples/petclinic/config/SharedJpaConfig.java create mode 100644 src/main/java/org/springframework/samples/petclinic/config/SpringDataJpaConfig.java delete mode 100644 src/main/resources/spring/business-config.xml delete mode 100644 src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests-config.xml diff --git a/src/main/java/org/springframework/samples/petclinic/config/BusinessConfig.java b/src/main/java/org/springframework/samples/petclinic/config/BusinessConfig.java new file mode 100644 index 000000000..fd258f7e6 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/BusinessConfig.java @@ -0,0 +1,22 @@ +package org.springframework.samples.petclinic.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.ImportResource; +import org.springframework.context.annotation.PropertySource; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +// import the dataSource definition +@ImportResource("classpath:spring/datasource-config.xml") +@ComponentScan("org.springframework.samples.petclinic.service") +// Configurer that replaces ${...} placeholders with values from a properties file +// (in this case, JDBC-related settings for the JPA EntityManager definition below) +@PropertySource("classpath:spring/data-access.properties") +@EnableTransactionManagement +@Import({JdbcConfig.class, SharedJpaConfig.class, JpaConfig.class, SpringDataJpaConfig.class}) +public class BusinessConfig { + + +} diff --git a/src/main/java/org/springframework/samples/petclinic/config/JdbcConfig.java b/src/main/java/org/springframework/samples/petclinic/config/JdbcConfig.java new file mode 100644 index 000000000..34f5786f5 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/JdbcConfig.java @@ -0,0 +1,40 @@ +package org.springframework.samples.petclinic.config; + +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; + +@Configuration +@Profile("jdbc") +@ComponentScan("org.springframework.samples.petclinic.repository.jdbc") +public class JdbcConfig { + + @Autowired + private DataSource dataSource; + + + @Bean + public DataSourceTransactionManager dataSourceTransactionManager() { + return new DataSourceTransactionManager(dataSource); + } + + @Bean(name="transactionManager") + public JdbcTemplate jdbcTemplate() { + return new JdbcTemplate(dataSource); + } + + @Bean + + public NamedParameterJdbcTemplate namedParameterJdbcTemplate() { + return new NamedParameterJdbcTemplate(dataSource); + } + + +} diff --git a/src/main/java/org/springframework/samples/petclinic/config/JpaConfig.java b/src/main/java/org/springframework/samples/petclinic/config/JpaConfig.java new file mode 100644 index 000000000..a8c18e74a --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/JpaConfig.java @@ -0,0 +1,12 @@ +package org.springframework.samples.petclinic.config; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; + +@Configuration +@Profile("jpa") +@ComponentScan("org.springframework.samples.petclinic.repository.jpa") +public class JpaConfig { + +} diff --git a/src/main/java/org/springframework/samples/petclinic/config/RootApplicationContextConfig.java b/src/main/java/org/springframework/samples/petclinic/config/RootApplicationContextConfig.java index 9a55d3605..254b3209c 100644 --- a/src/main/java/org/springframework/samples/petclinic/config/RootApplicationContextConfig.java +++ b/src/main/java/org/springframework/samples/petclinic/config/RootApplicationContextConfig.java @@ -1,10 +1,12 @@ package org.springframework.samples.petclinic.config; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.ImportResource; @Configuration -@ImportResource({"classpath:spring/business-config.xml", "classpath:spring/tools-config.xml"}) +@Import(BusinessConfig.class) +@ImportResource("classpath:spring/tools-config.xml") public class RootApplicationContextConfig { } diff --git a/src/main/java/org/springframework/samples/petclinic/config/SharedJpaConfig.java b/src/main/java/org/springframework/samples/petclinic/config/SharedJpaConfig.java new file mode 100644 index 000000000..0d454c977 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/SharedJpaConfig.java @@ -0,0 +1,64 @@ +package org.springframework.samples.petclinic.config; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.Database; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; + +@Configuration +@Profile({"jpa", "spring-data-jpa"}) +public class SharedJpaConfig { + + @Autowired + private Environment env; + + @Autowired + private DataSource dataSource; + + @Bean + public EntityManagerFactory entityManagerFactory() { + LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource); + // gDickens: BOTH Persistence Unit and Packages to Scan are NOT compatible, persistenceUnit will win + em.setPersistenceUnitName("petclinic"); + em.setPackagesToScan("org.springframework.samples.petclinic"); + em.setJpaVendorAdapter(jpaVendorAdaper()); + em.afterPropertiesSet(); + return em.getObject(); + } + + @Bean + public JpaVendorAdapter jpaVendorAdaper() { + HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + // the 'database' parameter refers to the database dialect being used. + // By default, Hibernate will use a 'HSQL' dialect because 'jpa.database' has been set to 'HSQL' + // inside file spring/data-access.properties + vendorAdapter.setDatabase(env.getProperty("jpa.database", Database.class)); + vendorAdapter.setShowSql(env.getProperty("jpa.showSql", Boolean.class)); + return vendorAdapter; + } + + @Bean(name="transactionManager") + public JpaTransactionManager jpaTransactionManager() { + JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(); + jpaTransactionManager.setEntityManagerFactory(entityManagerFactory()); + return jpaTransactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + +} diff --git a/src/main/java/org/springframework/samples/petclinic/config/SpringDataJpaConfig.java b/src/main/java/org/springframework/samples/petclinic/config/SpringDataJpaConfig.java new file mode 100644 index 000000000..c10b99bcf --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/config/SpringDataJpaConfig.java @@ -0,0 +1,12 @@ +package org.springframework.samples.petclinic.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; + +@Configuration +@Profile("spring-data-jpa") +@EnableJpaRepositories("org.springframework.samples.petclinic.repository.springdatajpa") +public class SpringDataJpaConfig { + +} diff --git a/src/main/resources/spring/business-config.xml b/src/main/resources/spring/business-config.xml deleted file mode 100644 index 99cf4c1d3..000000000 --- a/src/main/resources/spring/business-config.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJdbcTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJdbcTests.java index 49e57ea40..1543596b0 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJdbcTests.java +++ b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJdbcTests.java @@ -16,6 +16,7 @@ package org.springframework.samples.petclinic.service; import org.junit.runner.RunWith; +import org.springframework.samples.petclinic.config.BusinessConfig; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -27,7 +28,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Thomas Risberg * @author Michael Isvy */ -@ContextConfiguration(locations = {"classpath:spring/business-config.xml"}) +@ContextConfiguration(classes = BusinessConfig.class) @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("jdbc") public class ClinicServiceJdbcTests extends AbstractClinicServiceTests { diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJpaTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJpaTests.java index e024f21fd..2f5c9e3fc 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJpaTests.java +++ b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceJpaTests.java @@ -2,6 +2,7 @@ package org.springframework.samples.petclinic.service; import org.junit.runner.RunWith; +import org.springframework.samples.petclinic.config.BusinessConfig; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -15,7 +16,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Michael Isvy */ -@ContextConfiguration(locations = {"classpath:spring/business-config.xml"}) +@ContextConfiguration(classes = BusinessConfig.class) @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("jpa") public class ClinicServiceJpaTests extends AbstractClinicServiceTests { diff --git a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java index e01dda551..2cbd73c9e 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java +++ b/src/test/java/org/springframework/samples/petclinic/service/ClinicServiceSpringDataJpaTests.java @@ -2,6 +2,7 @@ package org.springframework.samples.petclinic.service; import org.junit.runner.RunWith; +import org.springframework.samples.petclinic.config.BusinessConfig; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -12,7 +13,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; * @author Michael Isvy */ -@ContextConfiguration(locations = {"classpath:spring/business-config.xml"}) +@ContextConfiguration(classes = BusinessConfig.class) @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("spring-data-jpa") public class ClinicServiceSpringDataJpaTests extends AbstractClinicServiceTests { diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests-config.xml b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests-config.xml deleted file mode 100644 index 8458ba2ec..000000000 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests-config.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - diff --git a/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests.java b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests.java index ace89a019..2f1e17fa3 100644 --- a/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests.java +++ b/src/test/java/org/springframework/samples/petclinic/web/VisitsViewTests.java @@ -28,8 +28,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.samples.petclinic.config.BusinessConfig; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.ContextHierarchy; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; @@ -44,7 +46,9 @@ import org.springframework.web.context.WebApplicationContext; */ @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -@ContextConfiguration("VisitsViewTests-config.xml") +@ContextHierarchy({ + @ContextConfiguration(classes = BusinessConfig.class), + @ContextConfiguration(locations = "classpath:spring/mvc-core-config.xml")}) @ActiveProfiles("jdbc") public class VisitsViewTests {