Author: bleny Date: 2013-03-14 16:33:52 +0100 (Thu, 14 Mar 2013) New Revision: 23 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce JPA layer and servlet filter Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java trunk/magalie-persistence/src/main/resources/magalie.properties trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java trunk/magalie-web/src/main/resources/magalie.properties Removed: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java trunk/magalie-persistence/src/test/resources/magalie.properties Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java trunk/magalie-web/pom.xml trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java trunk/magalie-web/src/main/resources/log4j.properties trunk/magalie-web/src/main/webapp/WEB-INF/web.xml trunk/pom.xml Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/AbstractJpaDao.java 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,37 @@ +package com.franciaflex.magalie.dao; + +import javax.persistence.EntityManager; + +public abstract class AbstractJpaDao<E> implements JpaDao<E> { + + protected EntityManager entityManager; + + public AbstractJpaDao(EntityManager entityManager) { + this.entityManager = entityManager; + } + + @Override + public void persist(E entity) { + entityManager.persist(entity); + } + + @Override + public E merge(E entity) { + return entityManager.merge(entity); + } + + @Override + public void remove(E entity) { + entityManager.remove(entity); + } + + @Override + public boolean contains(E entity) { + return entityManager.contains(entity); + } + + @Override + public void commit() { + entityManager.getTransaction().commit(); + } +} Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaDao.java 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,14 @@ +package com.franciaflex.magalie.dao; + +public interface JpaDao<E> { + + void persist(E entity); + + E merge(E entity); + + void remove(E entity); + + boolean contains(E entity); + + void commit(); +} Added: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/JpaMagalieUserDao.java 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,12 @@ +package com.franciaflex.magalie.dao; + +import com.franciaflex.magalie.entity.MagalieUser; + +import javax.persistence.EntityManager; + +public class JpaMagalieUserDao extends AbstractJpaDao<MagalieUser> implements MagalieUserDao { + + public JpaMagalieUserDao(EntityManager entityManager) { + super(entityManager); + } +} Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java 2013-03-14 15:33:52 UTC (rev 23) @@ -1,7 +0,0 @@ -package com.franciaflex.magalie.dao; - -/** - * @author bleny - */ -public interface MagalieUserDAO { -} Copied: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java (from rev 22, trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDAO.java) =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java (rev 0) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/dao/MagalieUserDao.java 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,10 @@ +package com.franciaflex.magalie.dao; + +import com.franciaflex.magalie.entity.MagalieUser; + +/** + * @author bleny + */ +public interface MagalieUserDao extends JpaDao<MagalieUser> { + +} Copied: trunk/magalie-persistence/src/main/resources/magalie.properties (from rev 22, trunk/magalie-persistence/src/test/resources/magalie.properties) =================================================================== --- trunk/magalie-persistence/src/main/resources/magalie.properties (rev 0) +++ trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,9 @@ +javax.persistence.jdbc.driver=org.h2.Driver +javax.persistence.jdbc.url=jdbc:h2:file:/tmp/magalie/h2data +javax.persistence.jdbc.user=sa +javax.persistence.jdbc.password= +hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.hbm2ddl.auto=create-drop +hibernate.show_sql=true +hibernate.format_sql=true +hibernate.transaction.flush_before_completion=true Deleted: trunk/magalie-persistence/src/test/resources/magalie.properties =================================================================== --- trunk/magalie-persistence/src/test/resources/magalie.properties 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-persistence/src/test/resources/magalie.properties 2013-03-14 15:33:52 UTC (rev 23) @@ -1,9 +0,0 @@ -javax.persistence.jdbc.driver=org.h2.Driver -javax.persistence.jdbc.url=jdbc:h2:file:/tmp/magalie/h2data -javax.persistence.jdbc.user=sa -javax.persistence.jdbc.password= -hibernate.dialect=org.hibernate.dialect.H2Dialect -hibernate.hbm2ddl.auto=create-drop -hibernate.show_sql=true -hibernate.format_sql=true -hibernate.transaction.flush_before_completion=true Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-03-14 15:33:52 UTC (rev 23) @@ -1,13 +1,21 @@ package com.franciaflex.magalie.services; import com.franciaflex.magalie.MagalieTechnicalException; -import com.franciaflex.magalie.dao.MagalieUserDAO; +import com.franciaflex.magalie.dao.JpaMagalieUserDao; +import com.franciaflex.magalie.dao.MagalieUserDao; +import javax.persistence.EntityManager; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class DefaultMagalieServiceContext implements MagalieServiceContext { + protected EntityManager entityManager; + + public void setEntityManager(EntityManager entityManager) { + this.entityManager = entityManager; + } + @Override public <E extends MagalieService> E newService(Class<E> serviceClass) { @@ -44,9 +52,9 @@ } @Override - public MagalieUserDAO getMagalieUserDao() { + public MagalieUserDao getMagalieUserDao() { - throw new UnsupportedOperationException(); + return new JpaMagalieUserDao(entityManager); } } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-03-14 15:33:52 UTC (rev 23) @@ -23,7 +23,7 @@ * #L% */ -import com.franciaflex.magalie.dao.MagalieUserDAO; +import com.franciaflex.magalie.dao.MagalieUserDao; /** * @author bleny @@ -32,6 +32,6 @@ <E extends MagalieService> E newService(Class<E> serviceClass); - MagalieUserDAO getMagalieUserDao(); + MagalieUserDao getMagalieUserDao(); } Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/RequestedItemService.java 2013-03-14 15:33:52 UTC (rev 23) @@ -23,6 +23,8 @@ * #L% */ +import com.franciaflex.magalie.dao.MagalieUserDao; +import com.franciaflex.magalie.entity.MagalieUser; import com.google.common.collect.ImmutableSet; import java.util.Set; @@ -37,6 +39,10 @@ public WithdrawTask getWithdrawTask() { + MagalieUserDao magalieUserDao = serviceContext.getMagalieUserDao(); + + magalieUserDao.persist(new MagalieUser()); + Set<Site> sites = ImmutableSet.of( new Site("A1", "1", 5), new Site("A2", "2", 5), Modified: trunk/magalie-web/pom.xml =================================================================== --- trunk/magalie-web/pom.xml 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-web/pom.xml 2013-03-14 15:33:52 UTC (rev 23) @@ -133,6 +133,12 @@ <artifactId>junit</artifactId> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>runtime</scope> + </dependency> + </dependencies> <build> Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-03-14 15:33:52 UTC (rev 23) @@ -32,8 +32,12 @@ import com.opensymphony.xwork2.interceptor.Interceptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.struts2.StrutsStatics; import org.nuiton.util.beans.BeanUtil; +import org.nuiton.web.filter.JpaTransactionFilter; +import javax.persistence.EntityManager; +import javax.servlet.http.HttpServletRequest; import java.beans.PropertyDescriptor; import java.util.Set; @@ -61,7 +65,7 @@ action.getClass(), BeanUtil.IS_WRITE_DESCRIPTOR); - MagalieServiceContext serviceContext = newServiceContext(); + MagalieServiceContext serviceContext = newServiceContext(invocation); for (PropertyDescriptor propertyDescriptor : descriptors) { @@ -141,10 +145,22 @@ } - protected MagalieServiceContext newServiceContext() { + protected MagalieServiceContext newServiceContext(ActionInvocation invocation) { DefaultMagalieServiceContext serviceContext = new DefaultMagalieServiceContext(); + EntityManager entityManager = (EntityManager) + ((HttpServletRequest) invocation + .getInvocationContext() + .get(StrutsStatics.HTTP_REQUEST)) + .getAttribute(JpaTransactionFilter.JPA_TRANSACTION_REQUEST_ATTRIBUTE); + + Preconditions.checkNotNull( + "unable to find transaction for request", + entityManager); + + serviceContext.setEntityManager(entityManager); + return serviceContext; } Added: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java (rev 0) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-03-14 15:33:52 UTC (rev 23) @@ -0,0 +1,39 @@ +package com.franciaflex.magalie.web; + +import com.franciaflex.magalie.MagalieApplicationConfig; +import org.nuiton.web.filter.JpaTransactionFilter; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import java.util.Map; + +public class MagalieJpaTransactionFilter extends JpaTransactionFilter { + + private EntityManagerFactory entityManagerFactory; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + super.init(filterConfig); + + MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig(); + + Map<String, Object> jpaParameters = applicationConfig.getJpaParameters(); + + entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters); + + } + + @Override + protected EntityManager createEntityManager(ServletRequest request) { + + EntityManager entityManager = entityManagerFactory.createEntityManager(); + + return entityManager; + + } +} Modified: trunk/magalie-web/src/main/resources/log4j.properties =================================================================== --- trunk/magalie-web/src/main/resources/log4j.properties 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-web/src/main/resources/log4j.properties 2013-03-14 15:33:52 UTC (rev 23) @@ -26,8 +26,6 @@ log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d [%p] %c %m%n -log4j.logger.com.franciaflex.magalie=TRACE - # FileAppender : need to have pollen.log.dir in system properties at application startup log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=${magalie.log.dir}/magalie.log @@ -35,3 +33,7 @@ log4j.appender.file.MaxBackupIndex=4 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n + +log4j.logger.com.franciaflex.magalie=TRACE +log4j.logger.org.nuiton.web.filter.JpaTransactionFilter=TRACE + Added: trunk/magalie-web/src/main/resources/magalie.properties =================================================================== Modified: trunk/magalie-web/src/main/webapp/WEB-INF/web.xml =================================================================== --- trunk/magalie-web/src/main/webapp/WEB-INF/web.xml 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/magalie-web/src/main/webapp/WEB-INF/web.xml 2013-03-14 15:33:52 UTC (rev 23) @@ -34,6 +34,11 @@ </session-config> <filter> + <filter-name>jpaTransaction</filter-name> + <filter-class>com.franciaflex.magalie.web.MagalieJpaTransactionFilter</filter-class> + </filter> + + <filter> <filter-name>struts-prepare</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class> </filter> @@ -49,6 +54,11 @@ </filter> <filter-mapping> + <filter-name>jpaTransaction</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <filter-mapping> <filter-name>struts-prepare</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-13 17:24:41 UTC (rev 22) +++ trunk/pom.xml 2013-03-14 15:33:52 UTC (rev 23) @@ -90,7 +90,7 @@ <projectId>franciaflex-magalie</projectId> <!-- versions --> - <nuitonWebVersion>1.12-beta-2</nuitonWebVersion> + <nuitonWebVersion>1.12-SNAPSHOT</nuitonWebVersion> <nuitonUtilsVersion>2.6.11-SNAPSHOT</nuitonUtilsVersion> <h2Version>1.3.170</h2Version> <postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion>