So true. Missing my bed...
Tks,
Eric

On 17/09/2010 15:11, Norman wrote:
Hi Eric,

calling commit() in the finally block a bad idea. It would get executed even on a Exception..

Bye
Norman

Am 17.09.2010 14:59, schrieb e...@apache.org:
Author: eric
Date: Fri Sep 17 12:59:24 2010
New Revision: 998106

URL: http://svn.apache.org/viewvc?rev=998106&view=rev
Log:
Always start/commit(/rollback) transactions.

Modified:
james/server/trunk/core-function/src/main/java/org/apache/james/domain/JPADomainList.java james/server/trunk/user-function/src/main/java/org/apache/james/vut/JPAVirtualUserTable.java

Modified: james/server/trunk/core-function/src/main/java/org/apache/james/domain/JPADomainList.java URL: http://svn.apache.org/viewvc/james/server/trunk/core-function/src/main/java/org/apache/james/domain/JPADomainList.java?rev=998106&r1=998105&r2=998106&view=diff ============================================================================== --- james/server/trunk/core-function/src/main/java/org/apache/james/domain/JPADomainList.java (original) +++ james/server/trunk/core-function/src/main/java/org/apache/james/domain/JPADomainList.java Fri Sep 17 12:59:24 2010
@@ -44,6 +44,16 @@ public class JPADomainList extends Abstr
       */
      private EntityManagerFactory entityManagerFactory;

+    /**
+     * Set the entity manager to use.
+     *
+     * @param entityManagerFactory
+     */
+    @PersistenceUnit
+ public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
+        this.entityManagerFactory = entityManagerFactory;
+    }
+
      /*
       * (non-Javadoc)
* @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
@@ -61,11 +71,17 @@ public class JPADomainList extends Abstr
      protected List<String>  getDomainListInternal() {
          List<String>  domains = new ArrayList<String>();
EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction();
          try {
+            transaction.begin();
domains = entityManager.createNamedQuery("listDomainNames").getResultList();
          } catch (PersistenceException e) {
              getLogger().debug("Failed to list domains", e);
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          if (domains.size() == 0) {
@@ -80,12 +96,18 @@ public class JPADomainList extends Abstr
       */
      public boolean containsDomain(String domain) {
EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction();
          try {
+            transaction.begin();
JPADomain jpaDomain = (JPADomain) entityManager.createNamedQuery("findDomainByName").setParameter("name", domain).getSingleResult();
              return (jpaDomain != null) ? true : false;
          } catch (PersistenceException e) {
              getLogger().debug("Failed to find domain", e);
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;
@@ -101,7 +123,6 @@ public class JPADomainList extends Abstr
              transaction.begin();
              JPADomain jpaDomain = new JPADomain(domain);
              entityManager.persist(jpaDomain);
-            transaction.commit();
              return true;
          } catch (PersistenceException e) {
              getLogger().debug("Failed to save domain", e);
@@ -109,6 +130,7 @@ public class JPADomainList extends Abstr
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;
@@ -123,7 +145,6 @@ public class JPADomainList extends Abstr
          try {
              transaction.begin();
entityManager.createNamedQuery("deleteDomainByName").setParameter("name", domain).executeUpdate();
-            transaction.commit();
              return true;
          } catch (PersistenceException e) {
              getLogger().debug("Failed to remove domain", e);
@@ -131,19 +152,10 @@ public class JPADomainList extends Abstr
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;
      }

-    /**
-     * Set the entity manager to use.
-     *
-     * @param entityManagerFactory
-     */
-    @PersistenceUnit
- public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
-        this.entityManagerFactory = entityManagerFactory;
-    }
-
  }

Modified: james/server/trunk/user-function/src/main/java/org/apache/james/vut/JPAVirtualUserTable.java URL: http://svn.apache.org/viewvc/james/server/trunk/user-function/src/main/java/org/apache/james/vut/JPAVirtualUserTable.java?rev=998106&r1=998105&r2=998106&view=diff ============================================================================== --- james/server/trunk/user-function/src/main/java/org/apache/james/vut/JPAVirtualUserTable.java (original) +++ james/server/trunk/user-function/src/main/java/org/apache/james/vut/JPAVirtualUserTable.java Fri Sep 17 12:59:24 2010
@@ -83,7 +83,6 @@ public class JPAVirtualUserTable extends
List<JPAVirtualUser> virtualUsers = entityManager.createNamedQuery("selectMappings")
                  .setParameter("user", user)
                  .setParameter("domain", domain).getResultList();
-            transaction.commit();
              if(virtualUsers.size()>  0) {
                  return virtualUsers.get(0).getTargetAddress();
              }
@@ -93,6 +92,7 @@ public class JPAVirtualUserTable extends
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return null;
@@ -103,7 +103,9 @@ public class JPAVirtualUserTable extends
       */
protected Collection<String> getUserDomainMappingsInternal(String user, String domain) { EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction();
          try {
+            transaction.begin();
List<JPAVirtualUser> virtualUsers = entityManager.createNamedQuery("selectUserDomainMapping")
                  .setParameter("user", user)
                  .setParameter("domain", domain).getResultList();
@@ -112,7 +114,11 @@ public class JPAVirtualUserTable extends
              }
          } catch (PersistenceException e) {
getLogger().debug("Failed to get user domain mappings", e);
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return null;
@@ -123,8 +129,10 @@ public class JPAVirtualUserTable extends
       */
protected Map<String,Collection<String>> getAllMappingsInternal() { EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); Map<String,Collection<String>> mapping = new HashMap<String,Collection<String>>();
          try {
+            transaction.begin();
List<JPAVirtualUser> virtualUsers = entityManager.createNamedQuery("selectAllMappings").getResultList();
              for (JPAVirtualUser virtualUser: virtualUsers) {
mapping.put(virtualUser.getUser()+ "@" + virtualUser.getDomain(), VirtualUserTableUtil.mappingToCollection(virtualUser.getTargetAddress()));
@@ -132,7 +140,11 @@ public class JPAVirtualUserTable extends
              if (mapping.size()>  0) return mapping;
          } catch (PersistenceException e) {
              getLogger().debug("Failed to get all mappings", e);
+            if (transaction.isActive()) {
+                transaction.rollback();
+            }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return null;
@@ -170,7 +182,6 @@ public class JPAVirtualUserTable extends
                  .setParameter("targetAddress", mapping)
                  .setParameter("user", user)
                  .setParameter("domain", domain).executeUpdate();
-            transaction.commit();
              if (updated>  0) {
                  return true;
              }
@@ -180,6 +191,7 @@ public class JPAVirtualUserTable extends
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;
@@ -203,7 +215,6 @@ public class JPAVirtualUserTable extends
                  .setParameter("user", user)
                  .setParameter("domain", domain)
.setParameter("targetAddress", mapping).executeUpdate();
-            transaction.commit();
              if (deleted>  0) {
                  return true;
              }
@@ -213,6 +224,7 @@ public class JPAVirtualUserTable extends
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;
@@ -233,7 +245,6 @@ public class JPAVirtualUserTable extends
              transaction.begin();
JPAVirtualUser jpaVirtualUser = new JPAVirtualUser(user, domain, mapping);
              entityManager.persist(jpaVirtualUser);
-            transaction.commit();
              return true;
          } catch (PersistenceException e) {
              getLogger().debug("Failed to save virtual user", e);
@@ -241,6 +252,7 @@ public class JPAVirtualUserTable extends
                  transaction.rollback();
              }
          } finally {
+            transaction.commit();
              entityManager.close();
          }
          return false;



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



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



---------------------------------------------------------------------
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