diff --git a/spring-all/pom.xml b/spring-all/pom.xml index 9561c1316e..bcbd87440c 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -21,6 +21,43 @@ spring-webmvc ${org.springframework.version} + + org.springframework + spring-orm + ${org.springframework.version} + + + org.springframework + spring-context + ${org.springframework.version} + + + + + + org.hibernate + hibernate-core + 4.2.1.Final + + + org.javassist + javassist + 3.17.1-GA + + + mysql + mysql-connector-java + 5.1.25 + runtime + + + + + + org.hibernate + hibernate-validator + 5.0.1.Final + @@ -38,6 +75,14 @@ runtime + + + + com.google.guava + guava + 14.0.1 + + diff --git a/spring-all/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/ClientWebConfig.java similarity index 96% rename from spring-all/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java rename to spring-all/src/main/java/org/baeldung/spring/config/ClientWebConfig.java index 945c1794fb..f027eb73fc 100644 --- a/spring-all/src/main/java/org/baeldung/spring/web/config/ClientWebConfig.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/ClientWebConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.web.config; +package org.baeldung.spring.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-all/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java b/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java similarity index 97% rename from spring-all/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java rename to spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java index 81a94f1a8c..32096c64c7 100644 --- a/spring-all/src/main/java/org/baeldung/spring/web/config/MainWebAppInitializer.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.web.config; +package org.baeldung.spring.config; import java.util.Set; diff --git a/spring-all/src/main/java/org/baeldung/spring/config/PersistenceConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/PersistenceConfig.java new file mode 100644 index 0000000000..078d7e6f88 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/spring/config/PersistenceConfig.java @@ -0,0 +1,79 @@ +package org.baeldung.spring.config; + +import java.util.Properties; + +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.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.hibernate4.HibernateTransactionManager; +import org.springframework.orm.hibernate4.LocalSessionFactoryBean; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-mysql.properties" }) +@ComponentScan({ "org.baeldung.spring.persistence.dao", "org.baeldung.spring.persistence.service" }) +public class PersistenceConfig { + + @Autowired + private Environment env; + + public PersistenceConfig() { + super(); + } + + @Bean + public LocalSessionFactoryBean sessionFactory() { + final LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); + sessionFactory.setDataSource(restDataSource()); + sessionFactory.setPackagesToScan(new String[] { "org.baeldung.spring.persistence.model" }); + sessionFactory.setHibernateProperties(hibernateProperties()); + + return sessionFactory; + } + + @Bean + public DataSource restDataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); + dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); + + return dataSource; + } + + @Bean + public HibernateTransactionManager transactionManager() { + final HibernateTransactionManager txManager = new HibernateTransactionManager(); + txManager.setSessionFactory(sessionFactory().getObject()); + + return txManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties hibernateProperties() { + return new Properties() { + { + setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + + // setProperty("hibernate.globally_quoted_identifiers", "true"); + // note: necessary in launchpad-storage, but causing problems here + } + }; + } +} \ No newline at end of file diff --git a/spring-all/src/main/java/org/baeldung/spring/web/config/WebConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/WebConfig.java similarity index 91% rename from spring-all/src/main/java/org/baeldung/spring/web/config/WebConfig.java rename to spring-all/src/main/java/org/baeldung/spring/config/WebConfig.java index d60bcfe127..640302a495 100644 --- a/spring-all/src/main/java/org/baeldung/spring/web/config/WebConfig.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/WebConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.web.config; +package org.baeldung.spring.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; diff --git a/spring-all/src/main/java/org/baeldung/web/BeanA.java b/spring-all/src/main/java/org/baeldung/web/BeanA.java index b6b6f49c16..7a8a0d24d8 100644 --- a/spring-all/src/main/java/org/baeldung/web/BeanA.java +++ b/spring-all/src/main/java/org/baeldung/web/BeanA.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component; public class BeanA { @Autowired - private BeanB b; + private IBeanB b; public BeanA() { super(); diff --git a/spring-all/src/main/java/org/baeldung/web/BeanB.java b/spring-all/src/main/java/org/baeldung/web/BeanB.java index 49e5af4ccb..4078fe7000 100644 --- a/spring-all/src/main/java/org/baeldung/web/BeanB.java +++ b/spring-all/src/main/java/org/baeldung/web/BeanB.java @@ -1,9 +1,11 @@ package org.baeldung.web; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; @Component -public class BeanB { +@Transactional +public class BeanB implements IBeanB { public BeanB() { super(); diff --git a/spring-all/src/main/java/org/baeldung/web/IBeanB.java b/spring-all/src/main/java/org/baeldung/web/IBeanB.java new file mode 100644 index 0000000000..63357980ad --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/web/IBeanB.java @@ -0,0 +1,5 @@ +package org.baeldung.web; + +public interface IBeanB { + // +}