Author: bleny Date: 2013-06-04 17:16:27 +0200 (Tue, 04 Jun 2013) New Revision: 232 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: refactor transaction management in order to enable c3p0 Removed: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java trunk/magalie-persistence/src/main/resources/magalie.properties 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/service/ArticleStorageService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StorageTransferService.java trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationListener.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java trunk/magalie-web/src/main/resources/log4j.properties Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/JpaMagaliePersistenceContext.java 2013-06-04 15:16:27 UTC (rev 232) @@ -27,13 +27,12 @@ import javax.persistence.EntityManager; -public class JpaMagaliePersistenceContext extends AbstractJpaMagaliePersistenceContext implements MagaliePersistenceContext { +public class JpaMagaliePersistenceContext extends AbstractJpaMagaliePersistenceContext { public JpaMagaliePersistenceContext(EntityManager entityManager) { super(entityManager); } - @Override public void clearDatabase() { rollback(); HibernateUtil.cleanDatabase(entityManager); Deleted: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/persistence/MagaliePersistenceContext.java 2013-06-04 15:16:27 UTC (rev 232) @@ -1,89 +0,0 @@ -package com.franciaflex.magalie.persistence; - -/* - * #%L - * MagaLiE :: Persistence - * $Id:$ - * $HeadURL:$ - * %% - * Copyright (C) 2013 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * #L% - */ - -import com.franciaflex.magalie.persistence.dao.ArticleJpaDao; -import com.franciaflex.magalie.persistence.dao.BuildingJpaDao; -import com.franciaflex.magalie.persistence.dao.CompanyJpaDao; -import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleJpaDao; -import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListJpaDao; -import com.franciaflex.magalie.persistence.dao.KanbanJpaDao; -import com.franciaflex.magalie.persistence.dao.LocationErrorJpaDao; -import com.franciaflex.magalie.persistence.dao.LocationJpaDao; -import com.franciaflex.magalie.persistence.dao.MagalieUserJpaDao; -import com.franciaflex.magalie.persistence.dao.PreparedArticleReceptionJpaDao; -import com.franciaflex.magalie.persistence.dao.RequestedArticleJpaDao; -import com.franciaflex.magalie.persistence.dao.RequestedListJpaDao; -import com.franciaflex.magalie.persistence.dao.StorageMovementJpaDao; -import com.franciaflex.magalie.persistence.dao.StorageMovementOrderJpaDao; -import com.franciaflex.magalie.persistence.dao.StoredArticleJpaDao; -import com.franciaflex.magalie.persistence.dao.SupplierJpaDao; -import com.franciaflex.magalie.persistence.dao.UnavailableArticleJpaDao; -import com.franciaflex.magalie.persistence.dao.WarehouseJpaDao; - -/** @author bleny */ -public interface MagaliePersistenceContext { - - void commit(); - - void rollback(); - - void clearDatabase(); - - MagalieUserJpaDao getMagalieUserDao(); - - StoredArticleJpaDao getStoredArticleDao(); - - RequestedArticleJpaDao getRequestedArticleDao(); - - ArticleJpaDao getArticleDao(); - - StorageMovementJpaDao getStorageMovementDao(); - - LocationErrorJpaDao getLocationErrorDao(); - - StorageMovementOrderJpaDao getStorageMovementOrderDao(); - - LocationJpaDao getLocationDao(); - - DeliveredRequestedArticleJpaDao getDeliveredRequestedArticleDao(); - - BuildingJpaDao getBuildingDao(); - - WarehouseJpaDao getWarehouseDao(); - - RequestedListJpaDao getRequestedListDao(); - - DeliveredRequestedListJpaDao getDeliveredRequestedListDao(); - - KanbanJpaDao getKanbanDao(); - - SupplierJpaDao getSupplierDao(); - - UnavailableArticleJpaDao getUnavailableArticleDao(); - - PreparedArticleReceptionJpaDao getPreparedArticleReceptionDao(); - - CompanyJpaDao getCompanyDao(); -} Modified: trunk/magalie-persistence/src/main/resources/magalie.properties =================================================================== --- trunk/magalie-persistence/src/main/resources/magalie.properties 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-persistence/src/main/resources/magalie.properties 2013-06-04 15:16:27 UTC (rev 232) @@ -29,7 +29,8 @@ hibernate.show_sql=false hibernate.format_sql=true hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy -hibernate.c3p0.min_size=5 -hibernate.c3p0.max_size=20 + +hibernate.c3p0.min_size=3 +hibernate.c3p0.max_size=5 hibernate.c3p0.timeout=1800 hibernate.c3p0.max_statements=50 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-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/DefaultMagalieServiceContext.java 2013-06-04 15:16:27 UTC (rev 232) @@ -26,29 +26,17 @@ import com.franciaflex.magalie.MagalieApplicationConfig; import com.franciaflex.magalie.MagalieTechnicalException; import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; -import javax.persistence.EntityManager; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Date; public class DefaultMagalieServiceContext implements MagalieServiceContext { - protected EntityManager entityManager; - protected MagalieApplicationConfig magalieApplicationConfig; - protected MagaliePersistenceContext persistenceContext; + protected JpaMagaliePersistenceContext persistenceContext; - public void setEntityManager(EntityManager entityManager) { - this.entityManager = entityManager; - } - - public EntityManager getEntityManager() { - return entityManager; - } - @Override public MagalieApplicationConfig getMagalieApplicationConfig() { return magalieApplicationConfig; @@ -100,11 +88,11 @@ } @Override - public MagaliePersistenceContext getPersistenceContext() { - if (persistenceContext == null) { - persistenceContext = new JpaMagaliePersistenceContext(entityManager); - } + public JpaMagaliePersistenceContext getPersistenceContext() { return persistenceContext; } + public void setPersistenceContext(JpaMagaliePersistenceContext persistenceContext) { + this.persistenceContext = persistenceContext; + } } 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-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/MagalieServiceContext.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,7 +24,7 @@ */ import com.franciaflex.magalie.MagalieApplicationConfig; -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import java.util.Date; @@ -37,7 +37,7 @@ <E extends MagalieService> E newService(Class<E> serviceClass); - MagaliePersistenceContext getPersistenceContext(); + JpaMagaliePersistenceContext getPersistenceContext(); MagalieApplicationConfig getMagalieApplicationConfig(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ArticleStorageService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,9 +23,14 @@ * #L% */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.StorageMovements; import com.franciaflex.magalie.persistence.StoredArticles; +import com.franciaflex.magalie.persistence.dao.LocationJpaDao; +import com.franciaflex.magalie.persistence.dao.StorageMovementDao; +import com.franciaflex.magalie.persistence.dao.StorageMovementOrderJpaDao; +import com.franciaflex.magalie.persistence.dao.StoredArticleDao; +import com.franciaflex.magalie.persistence.dao.UnavailableArticleJpaDao; import com.franciaflex.magalie.persistence.entity.Article; import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.Location; @@ -34,11 +39,6 @@ import com.franciaflex.magalie.persistence.entity.StorageMovementOrder; import com.franciaflex.magalie.persistence.entity.StoredArticle; import com.franciaflex.magalie.persistence.entity.UnavailableArticle; -import com.franciaflex.magalie.persistence.dao.LocationJpaDao; -import com.franciaflex.magalie.persistence.dao.StorageMovementDao; -import com.franciaflex.magalie.persistence.dao.StorageMovementOrderJpaDao; -import com.franciaflex.magalie.persistence.dao.StoredArticleDao; -import com.franciaflex.magalie.persistence.dao.UnavailableArticleJpaDao; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.StorageMovementConfirmation; @@ -105,7 +105,7 @@ // third step, compute actual order with priorities and actual quantities BookArticleResult bookArticleResult = buildStorageMovementOrder(bookArticleRequest, sortedStoredArticles); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); boolean saveStorageMovementOrder = bookArticleResult.isSuccess(); @@ -136,7 +136,7 @@ Building building = bookArticleRequest.getBuilding(); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); UnavailableArticleJpaDao dao = persistenceContext.getUnavailableArticleDao(); @@ -336,7 +336,7 @@ /** Get a snapshot of the actual current state of the stock. */ protected Iterable<StoredArticle> getStoredArticles(Building building, Article article) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleDao storedArticleDao = persistenceContext.getStoredArticleDao(); @@ -416,7 +416,7 @@ public void confirmStorageMovement(StorageMovementConfirmation confirmation, MagalieUser magalieUser) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StorageMovementOrderJpaDao storageMovementOrderDao = persistenceContext.getStorageMovementOrderDao(); @@ -491,7 +491,7 @@ public void cancelStorageMovement(String storageMovementOrderId) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StorageMovementOrderJpaDao storageMovementOrderDao = persistenceContext.getStorageMovementOrderDao(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FixturesService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,7 +23,7 @@ * #L% */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.ArticleJpaDao; import com.franciaflex.magalie.persistence.dao.BuildingJpaDao; import com.franciaflex.magalie.persistence.dao.CompanyJpaDao; @@ -102,7 +102,7 @@ log.info("will restore database with fixture set"); } - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); if (cleanDatabase) { Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/FulfilKanbanService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,7 +23,7 @@ * #L% */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.KanbanDao; import com.franciaflex.magalie.persistence.dao.WarehouseDao; import com.franciaflex.magalie.persistence.dao.WarehouseJpaDao; @@ -55,7 +55,7 @@ public Warehouse getStore(String storeId) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); WarehouseJpaDao warehouseDao = persistenceContext.getWarehouseDao(); @@ -67,7 +67,7 @@ public double getDefinedQuantity(Article article, Warehouse destinationStore) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); KanbanDao dao = persistenceContext.getKanbanDao(); @@ -111,7 +111,7 @@ public List<Warehouse> getDestinationWarehouses(Building building) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); WarehouseDao warehouseDao = persistenceContext.getWarehouseDao(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/OrderResumeService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,7 +24,7 @@ */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.StorageMovementOrderDao; import com.franciaflex.magalie.persistence.entity.Building; import com.franciaflex.magalie.persistence.entity.MagalieUser; @@ -45,7 +45,7 @@ public StorageMovementOrder findMovementOrderResume(MagalieUser magalieUser, Building building) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StorageMovementOrderDao storageMovementOrderDao = persistenceContext.getStorageMovementOrderDao(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReceptionService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,8 +23,8 @@ * #L% */ +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.Locations; -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; import com.franciaflex.magalie.persistence.StoredArticles; import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.LocationJpaDao; @@ -83,7 +83,7 @@ public List<StoredArticle> getReceivedArticles(Building building, String supplierId) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleDao storedArticleDao = @@ -120,7 +120,7 @@ public ReceptionTask getReceptionTask(String storedArticleId) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleJpaDao storedArticleDao = @@ -214,7 +214,7 @@ StoredArticles.getLocationFunction())); // third step, add extra locations - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); LocationDao locationDao = @@ -245,7 +245,7 @@ String storedArticleId = receptionConfirmation.getStoredArticleId(); - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleJpaDao storedArticleDao = @@ -290,7 +290,7 @@ public PreparedArticleReception getPreparedArticleReception(String barcode) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); PreparedArticleReceptionJpaDao dao = Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/ReportService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,7 +23,7 @@ * #L% */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.StorageMovementJpaDao; import com.franciaflex.magalie.persistence.dao.UnavailableArticleJpaDao; import com.franciaflex.magalie.persistence.entity.DeliveredRequestedList; @@ -52,7 +52,7 @@ Date now = serviceContext.getNow(); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); magalieReport.setReportDate(now); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/RequestedArticleService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,7 +24,7 @@ */ import com.franciaflex.magalie.persistence.DeliveredRequestedArticles; -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.RequestedArticles; import com.franciaflex.magalie.persistence.dao.DeliveredRequestedArticleJpaDao; import com.franciaflex.magalie.persistence.dao.DeliveredRequestedListDao; @@ -152,7 +152,7 @@ Preconditions.checkState(requestedArticle != null); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedArticleJpaDao dao = persistenceContext.getDeliveredRequestedArticleDao(); @@ -289,7 +289,7 @@ protected Set<RequestedArticle> getRequestedArticlesByPriority(List<RequestedArticle> requests, MagalieUser magalieUser) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedListDao deliveredRequestedListDao = persistenceContext.getDeliveredRequestedListDao(); @@ -318,7 +318,7 @@ public List<DeliveredRequestedList> getAllDeliveredRequestedLists() { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedListJpaDao dao = persistenceContext.getDeliveredRequestedListDao(); @@ -330,7 +330,7 @@ public void onStorageMovementConfirmation(StorageMovementOrder storageMovementOrder) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedList deliveredRequestedList = getDeliveredRequestedList(storageMovementOrder.getId()); @@ -375,7 +375,7 @@ public void removeAffectation(MagalieUser magalieUser) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedListDao dao = @@ -404,7 +404,7 @@ public RequestedList getAffectationForUser(MagalieUser magalieUser) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedListJpaDao dao = persistenceContext.getDeliveredRequestedListDao(); @@ -424,7 +424,7 @@ public List<String> getListTypes() { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); RequestedListJpaDao dao = persistenceContext.getRequestedListDao(); @@ -437,7 +437,7 @@ /** @return null if storage movement order is not about a requested-list (for example, kanban) */ public DeliveredRequestedList getDeliveredRequestedList(String storageMovementOrderId) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedArticleJpaDao deliveredRequestedArticleDao = @@ -473,7 +473,7 @@ public void cancelStorageMovement(StorageMovementOrder storageMovementOrder) { - MagaliePersistenceContext persistenceContext = + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); DeliveredRequestedArticleJpaDao deliveredRequestedArticleDao = Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/SimpleWithdrawItemService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,8 +23,8 @@ * #L% */ +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.Locations; -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; import com.franciaflex.magalie.persistence.StoredArticles; import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.StorageMovementJpaDao; @@ -95,7 +95,7 @@ public void confirmStorageMovement(MagalieUser magalieUser, String destinationWarehouseId, StoredArticle storedArticle) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); WarehouseJpaDao warehouseDao = persistenceContext.getWarehouseDao(); @@ -149,7 +149,7 @@ protected Location getDestinationLocation(Warehouse destinationWarehouse) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); LocationDao locationDao = persistenceContext.getLocationDao(); Modified: trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StorageTransferService.java =================================================================== --- trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StorageTransferService.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/main/java/com/franciaflex/magalie/services/service/StorageTransferService.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,7 +24,7 @@ */ -import com.franciaflex.magalie.persistence.MagaliePersistenceContext; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.persistence.dao.LocationDao; import com.franciaflex.magalie.persistence.dao.LocationJpaDao; import com.franciaflex.magalie.persistence.dao.StorageMovementDao; @@ -60,7 +60,7 @@ public Location getLocationByBarCode(String barCode, Building building) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); LocationDao locationDao = persistenceContext.getLocationDao(); @@ -71,7 +71,7 @@ public Location getLocationById(String id) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); LocationJpaDao locationDao = persistenceContext.getLocationDao(); @@ -82,7 +82,7 @@ public List<StoredArticle> getStoredArticlesInLocation(Location location) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleDao storedArticleDao = persistenceContext.getStoredArticleDao(); @@ -108,7 +108,7 @@ Preconditions.checkArgument(storedArticleId != null); - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StoredArticleJpaDao storedArticleDao = persistenceContext.getStoredArticleDao(); @@ -119,7 +119,7 @@ public void confirmStorageTransfer(MagalieUser magalieUser, StoredArticle storedArticle, double quantity, Location destinationLocation) { - MagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); + JpaMagaliePersistenceContext persistenceContext = serviceContext.getPersistenceContext(); StorageMovementJpaDao storageMovementDao = persistenceContext.getStorageMovementDao(); Modified: trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java =================================================================== --- trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-services/src/test/java/com/franciaflex/magalie/services/AbstractMagalieServiceTest.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,6 +24,7 @@ */ import com.franciaflex.magalie.MagalieApplicationConfig; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; import com.franciaflex.magalie.services.service.FixturesService; import org.junit.Rule; import org.nuiton.jpa.junit.JpaEntityManagerRule; @@ -65,8 +66,11 @@ EntityManager entityManager = getJpaEntityManagerRule().getEntityManager(); - serviceContext.setEntityManager(entityManager); + JpaMagaliePersistenceContext jpaMagaliePersistenceContext = + new JpaMagaliePersistenceContext(entityManager); + serviceContext.setPersistenceContext(jpaMagaliePersistenceContext); + this.serviceContext = serviceContext; } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationContext.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,11 +24,18 @@ */ import com.franciaflex.magalie.MagalieApplicationConfig; +import com.franciaflex.magalie.persistence.JpaMagaliePersistenceContext; +import com.franciaflex.magalie.services.DefaultMagalieServiceContext; +import com.franciaflex.magalie.services.MagalieServiceContext; +import com.google.common.base.Preconditions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.util.DateUtil; -import java.util.Date; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.PersistenceException; +import java.util.Map; public class MagalieApplicationContext { @@ -38,26 +45,80 @@ protected MagalieApplicationConfig applicationConfig; - protected Date applicationConfigLastRead; + protected EntityManagerFactory entityManagerFactory; public MagalieApplicationConfig getMagalieApplicationConfig() { + if (applicationConfig == null) { + applicationConfig = new MagalieApplicationConfig(); + } + return applicationConfig; + } - Date now = new Date(); + public EntityManager newEntityManager() { - if (applicationConfigLastRead == null || DateUtil.getDifferenceInDays(applicationConfigLastRead, now) > 1) { + if (entityManagerFactory == null) { - applicationConfigLastRead = now; + MagalieApplicationConfig applicationConfig = getMagalieApplicationConfig(); - if (log.isDebugEnabled()) { - log.debug("reloading config"); + Map<String, String> jpaParameters = applicationConfig.getJpaParameters(); + + if (log.isInfoEnabled()) { + log.info("creating entity manager factory"); } - applicationConfig = new MagalieApplicationConfig(); + try { + entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters); + + } catch (PersistenceException e) { + + if (log.isErrorEnabled()) { + log.error("unable to create entity manager factory", e); + } + + throw e; + + } + } - return applicationConfig; + EntityManager entityManager = entityManagerFactory.createEntityManager(); + return entityManager; + } + public void close() { + + if (entityManagerFactory != null && entityManagerFactory.isOpen()) { + + if (log.isInfoEnabled()) { + log.info("stopping magalie, will close entity manager factory"); + } + + entityManagerFactory.close(); + + } + + } + + public MagalieServiceContext newServiceContext(EntityManager entityManager) { + + Preconditions.checkArgument( + entityManager != null && entityManager.isOpen(), + "unable to find transaction for service context"); + + DefaultMagalieServiceContext serviceContext = new DefaultMagalieServiceContext(); + + JpaMagaliePersistenceContext jpaMagaliePersistenceContext = + new JpaMagaliePersistenceContext(entityManager); + + serviceContext.setPersistenceContext(jpaMagaliePersistenceContext); + + serviceContext.setMagalieApplicationConfig(applicationConfig); + + return serviceContext; + + } + } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationListener.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationListener.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieApplicationListener.java 2013-06-04 15:16:27 UTC (rev 232) @@ -26,7 +26,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; @@ -34,14 +33,18 @@ private static final Log log = LogFactory.getLog(MagalieApplicationListener.class); + protected MagalieApplicationContext applicationContext; + @Override public void contextInitialized(ServletContextEvent sce) { - MagalieApplicationContext applicationContext = new MagalieApplicationContext(); + if (log.isInfoEnabled()) { + log.info("init MagaLiE"); + } - ServletContext servletContext = sce.getServletContext(); + applicationContext = new MagalieApplicationContext(); - servletContext.setAttribute( + sce.getServletContext().setAttribute( MagalieApplicationContext.APPLICATION_CONTEXT_PARAMETER, applicationContext); @@ -49,6 +52,12 @@ @Override public void contextDestroyed(ServletContextEvent sce) { - // nothing to do + + if (log.isInfoEnabled()) { + log.info("stopping MagaLiE"); + } + + applicationContext.close(); + } } 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-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieInterceptor.java 2013-06-04 15:16:27 UTC (rev 232) @@ -24,7 +24,6 @@ */ import com.franciaflex.magalie.MagalieApplicationConfig; -import com.franciaflex.magalie.services.DefaultMagalieServiceContext; import com.franciaflex.magalie.services.MagalieService; import com.franciaflex.magalie.services.MagalieServiceContext; import com.franciaflex.magalie.services.service.FixturesService; @@ -54,7 +53,11 @@ @Override public void init() { - // nothing to do + + if (log.isInfoEnabled()) { + log.info("init " + this); + } + } @Override @@ -64,11 +67,6 @@ if (action instanceof MagalieActionSupport) { - Set<PropertyDescriptor> descriptors = - BeanUtil.getDescriptors( - action.getClass(), - BeanUtil.IS_WRITE_DESCRIPTOR); - MagalieServiceContext serviceContext = newServiceContext(invocation); if ( ! fixturesLoaded && serviceContext.getMagalieApplicationConfig().isDevMode()) { @@ -95,6 +93,11 @@ } + Set<PropertyDescriptor> descriptors = + BeanUtil.getDescriptors( + action.getClass(), + BeanUtil.IS_WRITE_DESCRIPTOR); + for (PropertyDescriptor propertyDescriptor : descriptors) { Class<?> propertyType = propertyDescriptor.getPropertyType(); @@ -114,7 +117,7 @@ } else if (MagalieApplicationConfig.class.isAssignableFrom(propertyType)) { - toInject = getMagalieApplicationConfig(invocation); + toInject = getMagalieApplicationContext(invocation).getMagalieApplicationConfig(); } @@ -128,17 +131,25 @@ } } - } - return invocation.invoke(); - } + try { - protected MagalieApplicationConfig getMagalieApplicationConfig(ActionInvocation invocation) { + return invocation.invoke(); - MagalieApplicationConfig applicationConfig = getMagalieApplicationContext(invocation).getMagalieApplicationConfig(); + } finally { - return applicationConfig; + serviceContext.getPersistenceContext().getEntityTransaction().rollback(); + } + + } else { + + // not an action, just process + + return invocation.invoke(); + + } + } protected MagalieSession getMagalieSession(ActionInvocation invocation) { @@ -175,32 +186,27 @@ 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); - MagalieApplicationContext magalieApplicationContext = getMagalieApplicationContext(invocation); - MagalieApplicationConfig magalieApplicationConfig = magalieApplicationContext.getMagalieApplicationConfig(); + MagalieServiceContext serviceContext = + magalieApplicationContext.newServiceContext(entityManager); - serviceContext.setMagalieApplicationConfig(magalieApplicationConfig); - return serviceContext; } @Override public void destroy() { - // nothing to do + + if (log.isInfoEnabled()) { + log.info("destroy " + this); + } + } } Modified: trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java =================================================================== --- trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-web/src/main/java/com/franciaflex/magalie/web/MagalieJpaTransactionFilter.java 2013-06-04 15:16:27 UTC (rev 232) @@ -23,25 +23,21 @@ * #L% */ -import com.franciaflex.magalie.MagalieApplicationConfig; +import com.google.common.base.Preconditions; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.web.filter.JpaTransactionFilter; import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.Persistence; -import javax.persistence.PersistenceException; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; -import java.util.Map; public class MagalieJpaTransactionFilter extends JpaTransactionFilter { private static final Log log = LogFactory.getLog(MagalieJpaTransactionFilter.class); - protected EntityManagerFactory entityManagerFactory; + protected MagalieApplicationContext applicationContext; @Override public void init(FilterConfig filterConfig) throws ServletException { @@ -49,66 +45,30 @@ super.init(filterConfig); if (log.isInfoEnabled()) { - log.info("start MagaLiE application"); + log.info("init " + this); } - MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig(); + applicationContext = (MagalieApplicationContext) + filterConfig.getServletContext().getAttribute( + MagalieApplicationContext.APPLICATION_CONTEXT_PARAMETER); - Map<String, String> jpaParameters = applicationConfig.getJpaParameters(); + Preconditions.checkNotNull(applicationContext); - if (log.isInfoEnabled()) { - log.info("creating entity manager factory"); - } - - try { - - entityManagerFactory = Persistence.createEntityManagerFactory("magaliePersistenceUnit", jpaParameters); - - } catch (PersistenceException e) { - - if (log.isErrorEnabled()) { - log.error("unable to create entity manager factory", e); - } - - throw e; - - } } @Override protected EntityManager createEntityManager(ServletRequest request) { - EntityManager entityManager; + return applicationContext.newEntityManager(); - try { - - entityManager = entityManagerFactory.createEntityManager(); - - } catch (PersistenceException e) { - - if (log.isErrorEnabled()) { - log.error("unable to create entity manager", e); - } - - throw e; - - } - - return entityManager; - } @Override public void destroy() { if (log.isInfoEnabled()) { - log.info("stopping magalie, will close entity manager factory"); + log.info("destroy " + this); } - entityManagerFactory.close(); - - if (log.isInfoEnabled()) { - log.info("stopping MagaLiE"); - } } } Modified: trunk/magalie-web/src/main/resources/log4j.properties =================================================================== --- trunk/magalie-web/src/main/resources/log4j.properties 2013-06-03 10:05:46 UTC (rev 231) +++ trunk/magalie-web/src/main/resources/log4j.properties 2013-06-04 15:16:27 UTC (rev 232) @@ -20,11 +20,11 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% ### -log4j.rootCategory=ERROR, console, file +log4j.rootCategory=WARN, console, file log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%d [%p] %c %m%n +log4j.appender.console.layout.ConversionPattern=%d{yyyy/MM/dd hh:mm:ss} %5p (%F:%L) %m%n # FileAppender : need to have magalie.log.dir in system properties at application startup log4j.appender.file=org.apache.log4j.RollingFileAppender @@ -36,7 +36,14 @@ log4j.logger.org.nuiton.web.filter.JpaTransactionFilter=TRACE -# log4j.logger.com.franciaflex.magalie=TRACE +log4j.logger.com.franciaflex.magalie=TRACE -log4j.logger.com.franciaflex.magalie.services.service.RequestedArticleService=TRACE -log4j.logger.com.franciaflex.magalie.services.service.ArticleStorageService=TRACE +# log4j.logger.com.franciaflex.magalie.services.service.RequestedArticleService=TRACE +# log4j.logger.com.franciaflex.magalie.services.service.ArticleStorageService=TRACE + +# log4j.logger.org.nuiton.jpa=TRACE + +# annoying errors +# log4j.logger.org.hibernate.tool.hbm2ddl.SchemaExport=FATAL +# log4j.logger.com.opensymphony.xwork2.interceptor.ParametersInterceptor=FATAL +