This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit bfca47b42167f8ca9e794a2dde44063990d6a9cb
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Mon Dec 2 14:09:22 2019 +0700

    [REFACTORING] Remove temporal coupling in JPASubscriptionMapper
---
 .../mailbox/jpa/user/JPASubscriptionMapper.java    | 27 ++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
index 157f263..3a64c45 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
 import javax.persistence.NoResultException;
 import javax.persistence.PersistenceException;
 
@@ -50,11 +51,24 @@ public class JPASubscriptionMapper extends 
JPATransactionalMapper implements Sub
     @Override
     public void save(Subscription subscription) throws SubscriptionException {
         EntityManager entityManager = getEntityManager();
+        EntityTransaction transaction = entityManager.getTransaction();
+        boolean localTransaction = !transaction.isActive();
+        if (localTransaction) {
+            transaction.begin();
+        }
         try {
             if (!exists(entityManager, subscription)) {
                 entityManager.persist(new JPASubscription(subscription));
             }
+            if (localTransaction) {
+                if (transaction.isActive()) {
+                    transaction.commit();
+                }
+            }
         } catch (PersistenceException e) {
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
             throw new SubscriptionException(e);
         }
     }
@@ -76,10 +90,23 @@ public class JPASubscriptionMapper extends 
JPATransactionalMapper implements Sub
     @Override
     public void delete(Subscription subscription) throws SubscriptionException 
{
         EntityManager entityManager = getEntityManager();
+        EntityTransaction transaction = entityManager.getTransaction();
+        boolean localTransaction = !transaction.isActive();
+        if (localTransaction) {
+            transaction.begin();
+        }
         try {
             findJpaSubscription(entityManager, subscription)
                 .ifPresent(entityManager::remove);
+            if (localTransaction) {
+                if (transaction.isActive()) {
+                    transaction.commit();
+                }
+            }
         } catch (PersistenceException e) {
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
             throw new SubscriptionException(e);
         }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to