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