You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2015/11/02 15:54:12 UTC

svn commit: r1712028 - /james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java

Author: matthieu
Date: Mon Nov  2 14:54:12 2015
New Revision: 1712028

URL: http://svn.apache.org/viewvc?rev=1712028&view=rev
Log:
JAMES-1591 and JAMES-1592 Correcting JPA Domain lists

	   Contributed by Benoit Tellier

Modified:
    james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java

Modified: james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java?rev=1712028&r1=1712027&r2=1712028&view=diff
==============================================================================
--- james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java (original)
+++ james/project/trunk/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java Mon Nov  2 14:54:12 2015
@@ -71,9 +71,7 @@ public class JPADomainList extends Abstr
             transaction.commit();
         } catch (PersistenceException e) {
             getLogger().error("Failed to list domains", e);
-            if (transaction.isActive()) {
-                transaction.rollback();
-            }
+            rollback(transaction);
             throw new DomainListException("Unable to retrieve domains", e);
         } finally {
             entityManager.close();
@@ -87,22 +85,17 @@ public class JPADomainList extends Abstr
 
     @Override
     public boolean containsDomain(String domain) throws DomainListException {
+        String lowerCasedDomain = domain.toLowerCase();
         EntityManager entityManager = entityManagerFactory.createEntityManager();
         final EntityTransaction transaction = entityManager.getTransaction();
         try {
             transaction.begin();
-            JPADomain jpaDomain = (JPADomain) entityManager.createNamedQuery("findDomainByName").setParameter("name", domain).getSingleResult();
+            boolean result = containsDomainInternal(lowerCasedDomain, entityManager);
             transaction.commit();
-            return (jpaDomain != null);
-        } catch (NoResultException e) {
-            getLogger().debug("No domain found", e);
-            transaction.commit();
-            return false;
+            return result;
         } catch (PersistenceException e) {
             getLogger().error("Failed to find domain", e);
-            if (transaction.isActive()) {
-                transaction.rollback();
-            }
+            rollback(transaction);
             throw new DomainListException("Unable to retrieve domains", e);
         } finally {
             entityManager.close();
@@ -112,21 +105,20 @@ public class JPADomainList extends Abstr
     @Override
     public void addDomain(String domain) throws DomainListException {
         String lowerCasedDomain = domain.toLowerCase();
-        if (containsDomain(lowerCasedDomain)) {
-            throw new DomainListException(lowerCasedDomain + " already exists.");
-        }
         EntityManager entityManager = entityManagerFactory.createEntityManager();
         final EntityTransaction transaction = entityManager.getTransaction();
         try {
             transaction.begin();
+            if (containsDomainInternal(lowerCasedDomain, entityManager)) {
+                transaction.commit();
+                throw new DomainListException(lowerCasedDomain + " already exists.");
+            }
             JPADomain jpaDomain = new JPADomain(lowerCasedDomain);
             entityManager.persist(jpaDomain);
             transaction.commit();
         } catch (PersistenceException e) {
             getLogger().error("Failed to save domain", e);
-            if (transaction.isActive()) {
-                transaction.rollback();
-            }
+            rollback(transaction);
             throw new DomainListException("Unable to add domain " + domain, e);
         } finally {
             entityManager.close();
@@ -135,24 +127,43 @@ public class JPADomainList extends Abstr
 
     @Override
     public void removeDomain(String domain) throws DomainListException {
+        String lowerCasedDomain = domain.toLowerCase();
         EntityManager entityManager = entityManagerFactory.createEntityManager();
         final EntityTransaction transaction = entityManager.getTransaction();
         try {
             transaction.begin();
-            entityManager.createNamedQuery("deleteDomainByName").setParameter("name", domain).executeUpdate();
+            if (!containsDomainInternal(lowerCasedDomain, entityManager)) {
+                transaction.commit();
+                throw new DomainListException(domain + " was not found.");
+            }
+            entityManager.createNamedQuery("deleteDomainByName").setParameter("name", lowerCasedDomain).executeUpdate();
             transaction.commit();
         } catch (PersistenceException e) {
             getLogger().error("Failed to remove domain", e);
-            if (transaction.isActive()) {
-                transaction.rollback();
-            }
+            rollback(transaction);
             throw new DomainListException("Unable to remove domain " + domain, e);
-
         } finally {
             entityManager.close();
         }
     }
 
+    private void rollback(EntityTransaction transaction) {
+        if (transaction.isActive()) {
+            transaction.rollback();
+        }
+    }
+
+    private boolean containsDomainInternal(String domain, EntityManager entityManager) {
+        try {
+            return entityManager.createNamedQuery("findDomainByName")
+                .setParameter("name", domain)
+                .getSingleResult() != null;
+        } catch (NoResultException e) {
+            getLogger().debug("No domain found", e);
+            return false;
+        }
+    }
+
     /**
      * Return a new {@link EntityManager} instance
      *



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