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