From 3bbfdf175b9d8880759a64e3f62550250c84377d Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 11 Aug 2013 17:21:04 +0300 Subject: [PATCH] further persistence work --- spring-exceptions/pom.xml | 8 +- .../spring/Cause1ContextWithJavaConfig.java | 3 + .../common/AbstractHibernateDao.java | 2 +- .../persistence/common/AbstractService.java | 44 +++++++++++ .../persistence}/common/IOperations.java | 2 +- .../baeldung/persistence/dao/IChildDao.java | 2 +- .../baeldung/persistence/dao/IParentDao.java | 2 +- .../persistence/dao/impl/ChildDao.java | 2 +- .../persistence/dao/impl/ParentDao.java | 2 +- .../org/baeldung/persistence/model/Child.java | 0 .../baeldung/persistence/model/Parent.java | 0 .../persistence/service/IChildService.java | 2 +- .../persistence/service/IParentService.java | 2 +- .../service/impl/ChildService.java | 29 +++++++ .../service/impl/ParentService.java | 28 +++++++ .../resources/persistence-mysql.properties | 10 +++ .../persistence/spring/PersistenceConfig.java | 79 +++++++++++++++++++ spring-hibernate4/pom.xml | 4 +- 18 files changed, 210 insertions(+), 11 deletions(-) rename spring-exceptions/src/{test/java/org/baeldung/persistence/dao => main/java/org/baeldung/persistence}/common/AbstractHibernateDao.java (97%) create mode 100644 spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractService.java rename spring-exceptions/src/{test/java/org/baeldung/persistence/dao => main/java/org/baeldung/persistence}/common/IOperations.java (87%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/dao/IChildDao.java (72%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/dao/IParentDao.java (73%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/dao/impl/ChildDao.java (89%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/dao/impl/ParentDao.java (89%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/model/Child.java (100%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/model/Parent.java (100%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/service/IChildService.java (73%) rename spring-exceptions/src/{test => main}/java/org/baeldung/persistence/service/IParentService.java (74%) create mode 100644 spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ChildService.java create mode 100644 spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ParentService.java create mode 100644 spring-exceptions/src/main/resources/persistence-mysql.properties create mode 100644 spring-exceptions/src/test/java/org/baeldung/persistence/spring/PersistenceConfig.java diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml index ab8272cb02..7a52560615 100644 --- a/spring-exceptions/pom.xml +++ b/spring-exceptions/pom.xml @@ -50,6 +50,11 @@ ${mysql-connector-java.version} runtime + + org.apache.tomcat + tomcat-dbcp + ${tomcat-dbcp.version} + @@ -188,8 +193,9 @@ 1.2 - 4.2.3.Final + 4.2.4.Final 5.1.26 + 7.0.42 1.7.5 diff --git a/spring-exceptions/src/main/java/org/baeldung/ex/nosuchbeandefinitionexception/spring/Cause1ContextWithJavaConfig.java b/spring-exceptions/src/main/java/org/baeldung/ex/nosuchbeandefinitionexception/spring/Cause1ContextWithJavaConfig.java index 5ba971baa9..2eedc0d241 100644 --- a/spring-exceptions/src/main/java/org/baeldung/ex/nosuchbeandefinitionexception/spring/Cause1ContextWithJavaConfig.java +++ b/spring-exceptions/src/main/java/org/baeldung/ex/nosuchbeandefinitionexception/spring/Cause1ContextWithJavaConfig.java @@ -1,10 +1,13 @@ package org.baeldung.ex.nosuchbeandefinitionexception.spring; +import org.baeldung.persistence.spring.PersistenceConfig; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; @Configuration @ComponentScan("org.baeldung.ex.nosuchbeandefinitionexception.cause1") +@Import(PersistenceConfig.class) public class Cause1ContextWithJavaConfig { public Cause1ContextWithJavaConfig() { diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java b/spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractHibernateDao.java similarity index 97% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractHibernateDao.java index 65e57afcb3..cadb2ac061 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/AbstractHibernateDao.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractHibernateDao.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao.common; +package org.baeldung.persistence.common; import java.io.Serializable; import java.util.List; diff --git a/spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractService.java b/spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractService.java new file mode 100644 index 0000000000..d2e162ad7b --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/common/AbstractService.java @@ -0,0 +1,44 @@ +package org.baeldung.persistence.common; + +import java.io.Serializable; +import java.util.List; + +import org.baeldung.persistence.common.IOperations; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public abstract class AbstractService implements IOperations { + + @Override + public T findOne(final long id) { + return getDao().findOne(id); + } + + @Override + public List findAll() { + return getDao().findAll(); + } + + @Override + public void create(final T entity) { + getDao().create(entity); + } + + @Override + public T update(final T entity) { + return getDao().update(entity); + } + + @Override + public void delete(final T entity) { + getDao().delete(entity); + } + + @Override + public void deleteById(final long entityId) { + getDao().deleteById(entityId); + } + + protected abstract IOperations getDao(); + +} diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/IOperations.java b/spring-exceptions/src/main/java/org/baeldung/persistence/common/IOperations.java similarity index 87% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/IOperations.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/common/IOperations.java index 1c84b06c85..dee27950c7 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/common/IOperations.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/common/IOperations.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.dao.common; +package org.baeldung.persistence.common; import java.io.Serializable; import java.util.List; diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/IChildDao.java b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/IChildDao.java similarity index 72% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/IChildDao.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/dao/IChildDao.java index 3bc0dc1fc4..25290554f3 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/IChildDao.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/IChildDao.java @@ -1,6 +1,6 @@ package org.baeldung.persistence.dao; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.common.IOperations; import org.baeldung.persistence.model.Child; public interface IChildDao extends IOperations { diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/IParentDao.java b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/IParentDao.java similarity index 73% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/IParentDao.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/dao/IParentDao.java index 09158a4143..a047d97ef1 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/IParentDao.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/IParentDao.java @@ -1,6 +1,6 @@ package org.baeldung.persistence.dao; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.common.IOperations; import org.baeldung.persistence.model.Parent; public interface IParentDao extends IOperations { diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ChildDao.java b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ChildDao.java similarity index 89% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ChildDao.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ChildDao.java index d9c8fdceec..e068573c5c 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ChildDao.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ChildDao.java @@ -1,7 +1,7 @@ package org.baeldung.persistence.dao.impl; +import org.baeldung.persistence.common.AbstractHibernateDao; import org.baeldung.persistence.dao.IChildDao; -import org.baeldung.persistence.dao.common.AbstractHibernateDao; import org.baeldung.persistence.model.Child; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ParentDao.java b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ParentDao.java similarity index 89% rename from spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ParentDao.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ParentDao.java index 003ec62741..5634137b63 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/dao/impl/ParentDao.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/dao/impl/ParentDao.java @@ -1,7 +1,7 @@ package org.baeldung.persistence.dao.impl; +import org.baeldung.persistence.common.AbstractHibernateDao; import org.baeldung.persistence.dao.IParentDao; -import org.baeldung.persistence.dao.common.AbstractHibernateDao; import org.baeldung.persistence.model.Parent; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/model/Child.java b/spring-exceptions/src/main/java/org/baeldung/persistence/model/Child.java similarity index 100% rename from spring-exceptions/src/test/java/org/baeldung/persistence/model/Child.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/model/Child.java diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/model/Parent.java b/spring-exceptions/src/main/java/org/baeldung/persistence/model/Parent.java similarity index 100% rename from spring-exceptions/src/test/java/org/baeldung/persistence/model/Parent.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/model/Parent.java diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/service/IChildService.java b/spring-exceptions/src/main/java/org/baeldung/persistence/service/IChildService.java similarity index 73% rename from spring-exceptions/src/test/java/org/baeldung/persistence/service/IChildService.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/service/IChildService.java index c6c5e2cfb1..e2c2055ca2 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/service/IChildService.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/service/IChildService.java @@ -1,6 +1,6 @@ package org.baeldung.persistence.service; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.common.IOperations; import org.baeldung.persistence.model.Child; public interface IChildService extends IOperations { diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/service/IParentService.java b/spring-exceptions/src/main/java/org/baeldung/persistence/service/IParentService.java similarity index 74% rename from spring-exceptions/src/test/java/org/baeldung/persistence/service/IParentService.java rename to spring-exceptions/src/main/java/org/baeldung/persistence/service/IParentService.java index 1782c281d2..a05f07658f 100644 --- a/spring-exceptions/src/test/java/org/baeldung/persistence/service/IParentService.java +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/service/IParentService.java @@ -1,6 +1,6 @@ package org.baeldung.persistence.service; -import org.baeldung.persistence.dao.common.IOperations; +import org.baeldung.persistence.common.IOperations; import org.baeldung.persistence.model.Parent; public interface IParentService extends IOperations { diff --git a/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ChildService.java b/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ChildService.java new file mode 100644 index 0000000000..4b66f3d2bd --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ChildService.java @@ -0,0 +1,29 @@ +package org.baeldung.persistence.service.impl; + +import org.baeldung.persistence.common.AbstractService; +import org.baeldung.persistence.common.IOperations; +import org.baeldung.persistence.dao.IChildDao; +import org.baeldung.persistence.model.Child; +import org.baeldung.persistence.service.IChildService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +@Service +public class ChildService extends AbstractService implements IChildService { + + @Autowired + private IChildDao dao; + + public ChildService() { + super(); + } + + // API + + @Override + protected IOperations getDao() { + return dao; + } + +} diff --git a/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ParentService.java b/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ParentService.java new file mode 100644 index 0000000000..97c44f4a2f --- /dev/null +++ b/spring-exceptions/src/main/java/org/baeldung/persistence/service/impl/ParentService.java @@ -0,0 +1,28 @@ +package org.baeldung.persistence.service.impl; + +import org.baeldung.persistence.common.AbstractService; +import org.baeldung.persistence.common.IOperations; +import org.baeldung.persistence.dao.IParentDao; +import org.baeldung.persistence.model.Parent; +import org.baeldung.persistence.service.IParentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ParentService extends AbstractService implements IParentService { + + @Autowired + private IParentDao dao; + + public ParentService() { + super(); + } + + // API + + @Override + protected IOperations getDao() { + return dao; + } + +} diff --git a/spring-exceptions/src/main/resources/persistence-mysql.properties b/spring-exceptions/src/main/resources/persistence-mysql.properties new file mode 100644 index 0000000000..04a62f6c6a --- /dev/null +++ b/spring-exceptions/src/main/resources/persistence-mysql.properties @@ -0,0 +1,10 @@ +# jdbc.X +jdbc.driverClassName=com.mysql.jdbc.Driver +jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_exceptions?createDatabaseIfNotExist=true +jdbc.user=tutorialuser +jdbc.pass=tutorialmy5ql + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +hibernate.show_sql=false +hibernate.hbm2ddl.auto=create-drop diff --git a/spring-exceptions/src/test/java/org/baeldung/persistence/spring/PersistenceConfig.java b/spring-exceptions/src/test/java/org/baeldung/persistence/spring/PersistenceConfig.java new file mode 100644 index 0000000000..cace2e1952 --- /dev/null +++ b/spring-exceptions/src/test/java/org/baeldung/persistence/spring/PersistenceConfig.java @@ -0,0 +1,79 @@ +package org.baeldung.persistence.spring; + +import java.util.Properties; + +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp.BasicDataSource; +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.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.persistence" }) +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.persistence.model" }); + sessionFactory.setHibernateProperties(hibernateProperties()); + + return sessionFactory; + } + + @Bean + public DataSource restDataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + 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-hibernate4/pom.xml b/spring-hibernate4/pom.xml index 775abd7bda..e445098b1c 100644 --- a/spring-hibernate4/pom.xml +++ b/spring-hibernate4/pom.xml @@ -171,9 +171,9 @@ 3.18.0-GA - 4.2.3.Final + 4.2.4.Final 5.1.26 - 7.0.41 + 7.0.42 1.7.5