diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/GenericDAOHibernate.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/GenericDAOHibernate.java index d8b8637e6..012d30304 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/daos/GenericDAOHibernate.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/GenericDAOHibernate.java @@ -85,21 +85,14 @@ public class GenericDAOHibernate{ public Class getEntityClass(); - public enum Mode { - FLUSH_BEFORE_VALIDATION, AUTOMATIC_FLUSH; - } - /** - * It saves with automatic flush - * - * @see #save(Object, Mode) - */ - public void save(E entity) throws ValidationException; - - /** - *

* It inserts the object passed as a parameter in the ORM session, planning * it for updating (even though it is not modified before or after the call * to this method) or insertion, depending if it is was detached or @@ -63,15 +51,11 @@ public interface IGenericDAO { * executed (if the entity has version control enabled) with the possible * org.springframework.dao.OptimisticLockingFailureException * being thrown. - *

- *

- * - *

* * @throws ValidationException * if the entity has some invalid values */ - public void save(E entity, Mode mode) throws ValidationException; + public void save(E entity) throws ValidationException; /** * Unlike save, it does not execute validations. diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java index 8f5a69405..295ad3301 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/ConfigurationModel.java @@ -35,7 +35,6 @@ import org.libreplan.business.calendars.daos.IBaseCalendarDAO; import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.common.daos.IConfigurationDAO; import org.libreplan.business.common.daos.IEntitySequenceDAO; -import org.libreplan.business.common.daos.IGenericDAO.Mode; import org.libreplan.business.common.entities.Configuration; import org.libreplan.business.common.entities.EntityNameEnum; import org.libreplan.business.common.entities.EntitySequence; @@ -49,6 +48,7 @@ import org.libreplan.web.common.concurrentdetection.OnConcurrentModification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; +import org.springframework.dao.OptimisticLockingFailureException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -149,8 +149,13 @@ public class ConfigurationModel implements IConfigurationModel { @Transactional public void confirm() { checkEntitySequences(); - configurationDAO.save(configuration, Mode.FLUSH_BEFORE_VALIDATION); - storeAndRemoveEntitySequences(); + configurationDAO.save(configuration); + try { + storeAndRemoveEntitySequences(); + } catch (IllegalStateException e) { + throw new OptimisticLockingFailureException( + "concurrency problem in entity sequences"); + } } private void checkEntitySequences() {