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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org