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: [email protected]
For additional commands, e-mail: [email protected]