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 no...@apache.org on 2010/03/18 18:16:53 UTC

svn commit: r924903 - in /james/imap/trunk: jpa/src/main/java/org/apache/james/imap/jpa/ jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/ jpa/src/main/java/org/apache/james/imap/jpa/openjpa/ store/src/main/java/org/apache/james/imap/store/

Author: norman
Date: Thu Mar 18 17:16:53 2010
New Revision: 924903

URL: http://svn.apache.org/viewvc?rev=924903&view=rev
Log:
Close EntityManager after each request to free up resources (IMAP-116)

Modified:
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPASubscriptionManager.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/OpenJPAMailboxMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailbox.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java Thu Mar 18 17:16:53 2010
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.List;
 
 import javax.mail.Flags;
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.imap.jpa.mail.JPAMailboxMapper;
@@ -69,7 +70,11 @@ public abstract class JPAMailbox extends
     
     @Override
     protected MessageMapper createMessageMapper(MailboxSession session) {
-        JPAMessageMapper mapper = new JPAMessageMapper(entityManagerFactory.createEntityManager(), mailboxId);
+        EntityManager manager = entityManagerFactory.createEntityManager();
+        
+        JPAUtils.addEntityManager(session, manager);
+        
+        JPAMessageMapper mapper = new JPAMessageMapper(manager, mailboxId);
        
         return mapper;
     }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailboxManager.java Thu Mar 18 17:16:53 2010
@@ -18,6 +18,9 @@
  ****************************************************************/
 package org.apache.james.imap.jpa;
 
+import java.util.List;
+
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.imap.mailbox.MailboxException;
@@ -29,6 +32,12 @@ import org.apache.james.imap.store.mail.
 import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.transaction.TransactionalMapper;
 
+
+/**
+ * JPA implementation of {@link StoreMailboxManager}
+ * 
+ *
+ */
 public abstract class JPAMailboxManager extends StoreMailboxManager {
 
     protected final EntityManagerFactory entityManagerFactory;
@@ -70,5 +79,23 @@ public abstract class JPAMailboxManager 
             
         });
     }
+
+
+    @Override
+    public void endProcessingRequest(MailboxSession session) {
+        List<EntityManager> managers = JPAUtils.getEntityManagers(session);
+        for (int i = 0 ; i < managers.size(); i++) {
+            EntityManager manager = managers.get(i);
+            if (manager.isOpen()) {
+                try {
+                    manager.close();
+                } catch (Exception e) {
+                    // just catch exceptions on logout
+                }
+            }
+        }
+    }
+    
+    
     
 }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPASubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPASubscriptionManager.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPASubscriptionManager.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPASubscriptionManager.java Thu Mar 18 17:16:53 2010
@@ -18,6 +18,7 @@
  ****************************************************************/
 package org.apache.james.imap.jpa;
 
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.imap.jpa.user.JPASubscriptionMapper;
@@ -27,9 +28,13 @@ import org.apache.james.imap.store.Store
 import org.apache.james.imap.store.user.SubscriptionMapper;
 import org.apache.james.imap.store.user.model.Subscription;
 
+/**
+ * JPA implementation of {@link StoreSubscriptionManager}
+ * 
+ *
+ */
 public class JPASubscriptionManager extends StoreSubscriptionManager {
     private final EntityManagerFactory factory;
-    public final static String MAPPER = "SUBSCRIPTION_MAPPER";
     
     public JPASubscriptionManager(final EntityManagerFactory factory) {
         super();
@@ -41,8 +46,11 @@ public class JPASubscriptionManager exte
      * @see org.apache.james.imap.store.StoreSubscriptionManager#createMapper(org.apache.james.imap.mailbox.MailboxSession)
      */
     protected SubscriptionMapper createMapper(MailboxSession session) {
+        EntityManager manager = factory.createEntityManager();
         
-        JPASubscriptionMapper  mapper = new JPASubscriptionMapper(factory.createEntityManager());
+        JPAUtils.addEntityManager(session, manager);
+        
+        JPASubscriptionMapper  mapper = new JPASubscriptionMapper(manager);
         
         return mapper;
     }
@@ -55,12 +63,4 @@ public class JPASubscriptionManager exte
         final Subscription newSubscription = new JPASubscription(session.getUser().getUserName(), mailbox);
         return newSubscription;
     }
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.store.StoreSubscriptionManager#onLogout(org.apache.james.imap.mailbox.MailboxSession)
-     */
-    protected void onLogout(MailboxSession session) {
-        
-    }
 }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPATransactionalMapper.java Thu Mar 18 17:16:53 2010
@@ -77,12 +77,4 @@ public class JPATransactionalMapper exte
         }
     }
 
-
-    /**
-     * Close the underlying EntityManager if its still open
-     */
-    public void destroy() {
-
-    }
-
 }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/OpenJPAMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/OpenJPAMailboxMapper.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/OpenJPAMailboxMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/openjpa/OpenJPAMailboxMapper.java Thu Mar 18 17:16:53 2010
@@ -35,6 +35,10 @@ public class OpenJPAMailboxMapper extend
         super(entityManager);
     }
 
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.jpa.mail.JPAMailboxMapper#doConsumeNextUid(long)
+     */
     public JPAMailbox doConsumeNextUid(long mailboxId) {
         OpenJPAEntityManager oem = OpenJPAPersistence.cast(entityManager);
         final boolean originalLocking = oem.getOptimistic();

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailbox.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailbox.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailbox.java Thu Mar 18 17:16:53 2010
@@ -19,9 +19,11 @@
 
 package org.apache.james.imap.jpa.openjpa;
 
+import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.imap.jpa.JPAMailbox;
+import org.apache.james.imap.jpa.JPAUtils;
 import org.apache.james.imap.jpa.mail.JPAMailboxMapper;
 import org.apache.james.imap.jpa.mail.openjpa.OpenJPAMailboxMapper;
 import org.apache.james.imap.mailbox.MailboxSession;
@@ -45,7 +47,11 @@ public class OpenJPAMailbox extends JPAM
      * @see org.apache.james.imap.jpa.JPAMailbox#createMailboxMapper(org.apache.james.imap.mailbox.MailboxSession)
      */
 	protected JPAMailboxMapper createMailboxMapper(MailboxSession session) {
-        JPAMailboxMapper mapper = new OpenJPAMailboxMapper(entityManagerFactory.createEntityManager());
+	    EntityManager manager = entityManagerFactory.createEntityManager();
+	    
+	    JPAUtils.addEntityManager(session, manager);
+	    
+        JPAMailboxMapper mapper = new OpenJPAMailboxMapper(manager);
 
         return mapper;
     }

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=924903&r1=924902&r2=924903&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java Thu Mar 18 17:16:53 2010
@@ -199,6 +199,7 @@ public abstract class StoreMailboxManage
 
                 public void run() throws MailboxException {
                     Mailbox mailbox = mapper.findMailboxByName(mailboxName);
+                    System.out.println(mailbox);
                     if (mailbox == null) {
                         throw new MailboxNotFoundException("Mailbox not found");
                     }



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