Author: norman
Date: Sun Mar 14 19:24:38 2010
New Revision: 922931
URL: http://svn.apache.org/viewvc?rev=922931&view=rev
Log:
Refactor code to be apple to use the MailboxSession for storing per session
objects. This includes to use one JCR Session per Mapper during MailboxSession
(IMAP-93). The same should be done for EntityManager
Remove duplicated code
Added:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java
- copied, changed from r921935,
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/User.java
- copied, changed from r921935,
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java
Removed:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/SimpleUserManager.java
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/UserDetails.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/inmemory/InMemoryHostSystem.java
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProviderSingleton.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
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/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/openjpa/OpenJPAMailbox.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailboxManager.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxManager.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMailbox.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
james/imap/trunk/parent/pom.xml
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/Subscriber.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Copied:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java
(from r921935,
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java)
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java?p2=james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java&p1=james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java&r1=921935&r2=922931&rev=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/InMemoryUserManager.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java
Sun Mar 14 19:24:38 2010
@@ -17,12 +17,13 @@
* under the License. *
****************************************************************/
-package org.apache.james.imap.functional.jpa.user;
+package org.apache.james.imap.functional;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.SubscriptionException;
import org.apache.james.imap.store.Authenticator;
import org.apache.james.imap.store.Subscriber;
@@ -49,31 +50,34 @@ public class InMemoryUserManager impleme
return result;
}
- public void subscribe(org.apache.james.imap.mailbox.MailboxSession.User
userid, String mailbox)
+ public void subscribe(MailboxSession session, String mailbox)
throws SubscriptionException {
- User user = (User) users.get(userid);
+ MailboxSession.User u = session.getUser();
+ User user = (User) users.get(u.getUserName());
if (user == null) {
- user = new User(userid.getUserName());
- users.put(userid.getUserName(), user);
+ user = new User(u.getUserName());
+ users.put(u.getUserName(), user);
}
user.addSubscription(mailbox);
}
- public Collection<String>
subscriptions(org.apache.james.imap.mailbox.MailboxSession.User userid) throws
SubscriptionException {
- User user = (User) users.get(userid.getUserName());
+ public Collection<String>
subscriptions(org.apache.james.imap.mailbox.MailboxSession session) throws
SubscriptionException {
+ MailboxSession.User u = session.getUser();
+ User user = (User) users.get(u.getUserName());
if (user == null) {
- user = new User(userid.getUserName());
- users.put(userid.getUserName(), user);
+ user = new User(u.getUserName());
+ users.put(u.getUserName(), user);
}
return user.getSubscriptions();
}
- public void unsubscribe(org.apache.james.imap.mailbox.MailboxSession.User
userid, String mailbox)
+ public void unsubscribe(org.apache.james.imap.mailbox.MailboxSession
session, String mailbox)
throws SubscriptionException {
- User user = (User) users.get(userid.getUserName());
+ MailboxSession.User u = session.getUser();
+ User user = (User) users.get(u.getUserName());
if (user == null) {
- user = new User(userid.getUserName());
- users.put(userid.getUserName(), user);
+ user = new User(u.getUserName());
+ users.put(u.getUserName(), user);
}
user.removeSubscription(mailbox);
}
Copied:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/User.java
(from r921935,
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java)
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/User.java?p2=james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/User.java&p1=james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java&r1=921935&r2=922931&rev=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/user/User.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/User.java
Sun Mar 14 19:24:38 2010
@@ -17,7 +17,7 @@
* under the License. *
****************************************************************/
-package org.apache.james.imap.functional.jpa.user;
+package org.apache.james.imap.functional;
import java.util.Collection;
import java.util.Collections;
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/inmemory/InMemoryHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/inmemory/InMemoryHostSystem.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/inmemory/InMemoryHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/inmemory/InMemoryHostSystem.java
Sun Mar 14 19:24:38 2010
@@ -21,7 +21,7 @@ package org.apache.james.imap.functional
import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
import org.apache.james.imap.functional.ImapHostSystem;
-import org.apache.james.imap.functional.jpa.user.InMemoryUserManager;
+import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.inmemory.InMemoryMailboxManager;
import org.apache.james.imap.inmemory.InMemorySubscriptionManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jcr/JCRHostSystem.java
Sun Mar 14 19:24:38 2010
@@ -28,7 +28,7 @@ import org.apache.jackrabbit.core.Reposi
import org.apache.jackrabbit.core.config.RepositoryConfig;
import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
import org.apache.james.imap.functional.ImapHostSystem;
-import org.apache.james.imap.functional.jpa.user.InMemoryUserManager;
+import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.jcr.JCRGlobalUserMailboxManager;
import org.apache.james.imap.jcr.JCRGlobalUserSubscriptionManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/jpa/JPAHostSystem.java
Sun Mar 14 19:24:38 2010
@@ -27,7 +27,7 @@ import javax.persistence.EntityManagerFa
import org.apache.commons.io.FileUtils;
import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
import org.apache.james.imap.functional.ImapHostSystem;
-import org.apache.james.imap.functional.jpa.user.InMemoryUserManager;
+import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.jpa.JPASubscriptionManager;
import org.apache.james.imap.jpa.openjpa.OpenJPAMailboxManager;
import org.apache.james.imap.main.DefaultImapDecoderFactory;
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProviderSingleton.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProviderSingleton.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProviderSingleton.java
(original)
+++
james/imap/trunk/deployment/src/test/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerProviderSingleton.java
Sun Mar 14 19:24:38 2010
@@ -27,6 +27,7 @@ import java.util.Locale;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.james.imap.functional.ImapHostSystem;
+import org.apache.james.imap.functional.InMemoryUserManager;
import org.apache.james.imap.mailbox.MailboxManager;
import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
import org.apache.james.mailboxmanager.torque.om.MessageBodyPeer;
@@ -159,7 +160,7 @@ public class TorqueMailboxManagerProvide
private static TorqueMailboxManager TORQUE_MAILBOX_MANAGER;
- private static SimpleUserManager USER_MANAGER;
+ private static InMemoryUserManager USER_MANAGER;
public static final ImapHostSystem HOST = new TorqueHostSystem();
@@ -175,7 +176,7 @@ public class TorqueMailboxManagerProvide
private static TorqueMailboxManager getMailboxManager() throws Exception {
if (TORQUE_MAILBOX_MANAGER == null) {
- USER_MANAGER = new SimpleUserManager();
+ USER_MANAGER = new InMemoryUserManager();
initialize();
TORQUE_MAILBOX_MANAGER = new TorqueMailboxManager(USER_MANAGER,
USER_MANAGER);
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
Sun Mar 14 19:24:38 2010
@@ -53,7 +53,7 @@ public class JCRMailbox extends StoreMai
private final String workspace;
private final Log log;
private final String uuid;
-
+ public final static String MAPPER = "MESSAGE_MAPPER";
public JCRMailbox(final org.apache.james.imap.jcr.mail.model.JCRMailbox
mailbox, final MailboxSession session, final Repository repository, final
String workspace, final Log log) {
super(mailbox, session );
this.repository = repository;
@@ -98,8 +98,11 @@ public class JCRMailbox extends StoreMai
@Override
protected MessageMapper createMessageMapper(MailboxSession session) throws
MailboxException {
PasswordAwareUser user =
(PasswordAwareUser)getMailboxSession().getUser();
-
- JCRMessageMapper messageMapper = new
JCRMessageMapper(getSession(user), getMailboxUUID(), log);
+ JCRMessageMapper messageMapper = (JCRMessageMapper)
session.getAttributes().get(MAPPER);
+ if (messageMapper == null) {
+ messageMapper = new JCRMessageMapper(getSession(user),
getMailboxUUID(), log);
+ session.getAttributes().put(MAPPER, messageMapper);
+ }
return messageMapper;
}
@@ -149,4 +152,13 @@ public class JCRMailbox extends StoreMai
protected Repository getRepository() {
return repository;
}
+
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ JCRMessageMapper mapper = (JCRMessageMapper)
session.getAttributes().get(MAPPER);
+ if (mapper != null) {
+ mapper.destroy();
+ }
+ }
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
Sun Mar 14 19:24:38 2010
@@ -55,7 +55,7 @@ public class JCRMailboxManager extends S
private final Repository repository;
private final String workspace;
private final Log logger = LogFactory.getLog(JCRMailboxManager.class);
-
+ public final static String MAPPER = "MAILBOX_MAPPER";
public JCRMailboxManager(final Authenticator authenticator, final
Subscriber subscriber, final Repository repository, final String workspace) {
super(authenticator, subscriber);
this.repository = repository;
@@ -70,8 +70,12 @@ public class JCRMailboxManager extends S
@Override
protected MailboxMapper createMailboxMapper(MailboxSession session) throws
MailboxException {
- Session jcrSession = getSession(session);
- return new JCRMailboxMapper(jcrSession, logger);
+ JCRMailboxMapper mapper = (JCRMailboxMapper)
session.getAttributes().get(MAPPER);
+ if (mapper == null) {
+ mapper = new JCRMailboxMapper(getSession(session), logger);
+ session.getAttributes().put(MAPPER, mapper);
+ }
+ return mapper;
}
@@ -137,4 +141,12 @@ public class JCRMailboxManager extends S
protected Repository getRepository() {
return repository;
}
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ JCRMailboxMapper mapper = (JCRMailboxMapper)
session.getAttributes().get(MAPPER);
+ if (mapper != null) {
+ mapper.destroy();
+ }
+ }
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
(original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMapper.java
Sun Mar 14 19:24:38 2010
@@ -33,5 +33,12 @@ public abstract class JCRMapper extends
protected Session getSession() {
return session;
}
+
+ /**
+ * Logout form the session
+ */
+ public void destroy() {
+ session.logout();
+ }
}
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
(original)
+++
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRSubscriptionManager.java
Sun Mar 14 19:24:38 2010
@@ -31,8 +31,8 @@ import org.apache.james.imap.api.display
import org.apache.james.imap.jcr.user.JCRSubscriptionMapper;
import org.apache.james.imap.jcr.user.model.JCRSubscription;
import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.SubscriptionException;
-import org.apache.james.imap.mailbox.MailboxSession.User;
import org.apache.james.imap.store.PasswordAwareUser;
import org.apache.james.imap.store.StoreSubscriptionManager;
import org.apache.james.imap.store.user.SubscriptionMapper;
@@ -46,6 +46,7 @@ import org.apache.james.imap.store.user.
public class JCRSubscriptionManager extends StoreSubscriptionManager {
private Log logger = LogFactory.getLog(JCRSubscriptionManager.class);
+ public final static String MAPPER = "SUBSCRIPTION_MAPPER";
private final Repository repository;
private String workspace;
@@ -56,16 +57,22 @@ public class JCRSubscriptionManager exte
}
@Override
- protected SubscriptionMapper createMapper(User user) throws
SubscriptionException {
- PasswordAwareUser pUser = (PasswordAwareUser) user;
-
- JCRSubscriptionMapper mapper = new
JCRSubscriptionMapper(getSession(pUser), logger);
+ protected SubscriptionMapper createMapper(MailboxSession session) throws
SubscriptionException {
+ PasswordAwareUser pUser = (PasswordAwareUser) session.getUser();
+
+ // check if we have already a mapper for the session
+ JCRSubscriptionMapper mapper = (JCRSubscriptionMapper)
session.getAttributes().get(MAPPER);
+ if (mapper == null) {
+ // no mapper found so create one an store it
+ mapper = new JCRSubscriptionMapper(getSession(pUser), logger);
+ session.getAttributes().put(MAPPER, mapper);
+ }
return mapper;
}
@Override
- protected Subscription createSubscription(User user, String mailbox) {
- return new JCRSubscription(user.getUserName(), mailbox, logger);
+ protected Subscription createSubscription(MailboxSession session, String
mailbox) {
+ return new JCRSubscription(session.getUser().getUserName(), mailbox,
logger);
}
/**
@@ -100,4 +107,12 @@ public class JCRSubscriptionManager exte
protected Repository getRepository() {
return repository;
}
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ JCRSubscriptionMapper mapper = (JCRSubscriptionMapper)
session.getAttributes().get(MAPPER);
+ if (mapper != null) {
+ mapper.destroy();
+ }
+ }
}
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=922931&r1=922930&r2=922931&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
Sun Mar 14 19:24:38 2010
@@ -48,6 +48,7 @@ public abstract class JPAMailbox extends
protected final EntityManagerFactory entityManagerFactory;
+ public final static String MESSAGE_MAPPER = "MESSAGE_MAPPER";
public JPAMailbox(final Mailbox mailbox, MailboxSession session, final
EntityManagerFactory entityManagerfactory) {
super(mailbox, session);
this.entityManagerFactory = entityManagerfactory;
@@ -58,18 +59,19 @@ public abstract class JPAMailbox extends
*
* @return mapper
*/
- protected abstract JPAMailboxMapper createMailboxMapper();
+ protected abstract JPAMailboxMapper createMailboxMapper(MailboxSession
session);
@Override
protected Mailbox getMailboxRow() throws MailboxException {
- final MailboxMapper mapper = createMailboxMapper();
+ final MailboxMapper mapper = createMailboxMapper(getMailboxSession());
return mapper.findMailboxById(mailboxId);
}
@Override
protected MessageMapper createMessageMapper(MailboxSession session) {
- final MessageMapper mapper = new
JPAMessageMapper(entityManagerFactory.createEntityManager(), mailboxId);
+ JPAMessageMapper mapper = new
JPAMessageMapper(entityManagerFactory.createEntityManager(), mailboxId);
+
return mapper;
}
@@ -99,8 +101,15 @@ public abstract class JPAMailbox extends
@Override
protected Mailbox reserveNextUid() throws MailboxException {
- final JPAMailboxMapper mapper = createMailboxMapper();
+ final JPAMailboxMapper mapper =
createMailboxMapper(getMailboxSession());
final Mailbox mailbox = mapper.consumeNextUid(mailboxId);
return mailbox;
+ }
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+
}
+
+
}
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=922931&r1=922930&r2=922931&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
Sun Mar 14 19:24:38 2010
@@ -22,26 +22,45 @@ import javax.persistence.EntityManagerFa
import org.apache.james.imap.jpa.user.JPASubscriptionMapper;
import org.apache.james.imap.jpa.user.model.JPASubscription;
-import org.apache.james.imap.mailbox.MailboxSession.User;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.store.StoreSubscriptionManager;
import org.apache.james.imap.store.user.SubscriptionMapper;
import org.apache.james.imap.store.user.model.Subscription;
public class JPASubscriptionManager extends StoreSubscriptionManager {
private final EntityManagerFactory factory;
+ public final static String MAPPER = "SUBSCRIPTION_MAPPER";
public JPASubscriptionManager(final EntityManagerFactory factory) {
super();
this.factory = factory;
}
- protected SubscriptionMapper createMapper(User user) {
- final JPASubscriptionMapper mapper = new
JPASubscriptionMapper(factory.createEntityManager());
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.store.StoreSubscriptionManager#createMapper(org.apache.james.imap.mailbox.MailboxSession)
+ */
+ protected SubscriptionMapper createMapper(MailboxSession session) {
+
+ JPASubscriptionMapper mapper = new
JPASubscriptionMapper(factory.createEntityManager());
+
return mapper;
}
- protected Subscription createSubscription(final User user, final String
mailbox) {
- final Subscription newSubscription = new
JPASubscription(user.getUserName(), mailbox);
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.store.StoreSubscriptionManager#createSubscription(org.apache.james.imap.mailbox.MailboxSession,
java.lang.String)
+ */
+ protected Subscription createSubscription(final MailboxSession session,
final String mailbox) {
+ 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=922931&r1=922930&r2=922931&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
Sun Mar 14 19:24:38 2010
@@ -77,4 +77,12 @@ 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/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=922931&r1=922930&r2=922931&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
Sun Mar 14 19:24:38 2010
@@ -33,17 +33,21 @@ import org.apache.james.imap.store.mail.
*/
public class OpenJPAMailbox extends JPAMailbox{
+ public final static String MAILBOX_MAPPER = "MAILBOX_MAPPER";
public OpenJPAMailbox(Mailbox mailbox,
MailboxSession session, EntityManagerFactory
entityManagerfactory) {
super(mailbox, session, entityManagerfactory);
}
+
/*
* (non-Javadoc)
- * @see org.apache.james.imap.jpa.JPAMailbox#createMailboxMapper()
+ * @see
org.apache.james.imap.jpa.JPAMailbox#createMailboxMapper(org.apache.james.imap.mailbox.MailboxSession)
*/
- protected JPAMailboxMapper createMailboxMapper() {
- final JPAMailboxMapper mapper = new
OpenJPAMailboxMapper(entityManagerFactory.createEntityManager());
+ protected JPAMailboxMapper createMailboxMapper(MailboxSession session) {
+ JPAMailboxMapper mapper = new
OpenJPAMailboxMapper(entityManagerFactory.createEntityManager());
+
return mapper;
}
+
}
Modified:
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailboxManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailboxManager.java
(original)
+++
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMailboxManager.java
Sun Mar 14 19:24:38 2010
@@ -53,4 +53,10 @@ public class OpenJPAMailboxManager exten
result = new OpenJPAMailbox(mailboxRow, session, entityManagerFactory);
return result;
}
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified:
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxManager.java
(original)
+++
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryMailboxManager.java
Sun Mar 14 19:24:38 2010
@@ -144,5 +144,18 @@ public class InMemoryMailboxManager exte
});
}
+
+ /**
+ *
+ */
+ public void destroy() {
+ // Nothing todo
+ }
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ // Nothing todo
+
+ }
}
Modified:
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMailbox.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMailbox.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMailbox.java
(original)
+++
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMailbox.java
Sun Mar 14 19:24:38 2010
@@ -190,4 +190,18 @@ public class InMemoryStoreMailbox extend
public void execute(Transaction transaction) throws MailboxException {
transaction.run();
}
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.store.transaction.TransactionalMapper#destroy()
+ */
+ public void destroy() {
+ // nothing todo
+ }
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ // Nothing todo
+
+ }
}
Modified:
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
(original)
+++
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemorySubscriptionManager.java
Sun Mar 14 19:24:38 2010
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.MailboxSession.User;
import org.apache.james.imap.store.StoreSubscriptionManager;
import org.apache.james.imap.store.user.SubscriptionMapper;
@@ -45,13 +46,13 @@ public class InMemorySubscriptionManager
}
@Override
- protected SubscriptionMapper createMapper(User user) {
+ protected SubscriptionMapper createMapper(MailboxSession session) {
return this;
}
@Override
- protected Subscription createSubscription(User user, String mailbox) {
- return new InMemorySubscription(mailbox, user);
+ protected Subscription createSubscription(MailboxSession session, String
mailbox) {
+ return new InMemorySubscription(mailbox, session.getUser());
}
public synchronized void delete(Subscription subscription) {
@@ -169,4 +170,14 @@ public class InMemorySubscriptionManager
public void execute(Transaction transaction) throws MailboxException {
transaction.run();
}
+
+ public void destroy() {
+ // Nothing todo
+ }
+
+ @Override
+ protected void onLogout(MailboxSession session) {
+ // Nothing todo
+
+ }
}
Modified: james/imap/trunk/parent/pom.xml
URL:
http://svn.apache.org/viewvc/james/imap/trunk/parent/pom.xml?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
--- james/imap/trunk/parent/pom.xml (original)
+++ james/imap/trunk/parent/pom.xml Sun Mar 14 19:24:38 2010
@@ -550,7 +550,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.5.11</version>
+ <version>1.5.7</version>
<scope>test</scope>
</dependency>
<!--
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
Sun Mar 14 19:24:38 2010
@@ -600,4 +600,6 @@ public abstract class StoreMailbox imple
return new MailboxMetaData(recent, permanentFlags, uidValidity,
uidNext, messageCount, unseenCount, firstUnseen, isWriteable());
}
+
+ protected abstract void onLogout(MailboxSession session);
}
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=922931&r1=922930&r2=922931&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
Sun Mar 14 19:24:38 2010
@@ -64,6 +64,8 @@ public abstract class StoreMailboxManage
private final char delimiter;
+ public final static String MAILBOX = "MAILBOX";
+
public StoreMailboxManager(final Authenticator authenticator, final
Subscriber subscriber) {
this(authenticator, subscriber, '.');
}
@@ -132,6 +134,9 @@ public abstract class StoreMailboxManage
if (result == null) {
result = createMailbox(mailboxRow, session);
mailboxes.put(mailboxName, result);
+
+ // store the mailbox in the session so we can cleanup
things later
+ session.getAttributes().put(MAILBOX, result);
}
return result;
}
@@ -427,7 +432,7 @@ public abstract class StoreMailboxManage
*/
public void subscribe(MailboxSession session, String mailbox)
throws SubscriptionException {
- subscriber.subscribe(session.getUser(), mailbox);
+ subscriber.subscribe(session, mailbox);
}
/*
@@ -435,7 +440,7 @@ public abstract class StoreMailboxManage
* @see
org.apache.james.imap.mailbox.MailboxManager#subscriptions(org.apache.james.imap.mailbox.MailboxSession)
*/
public Collection<String> subscriptions(MailboxSession session) throws
SubscriptionException {
- return subscriber.subscriptions(session.getUser());
+ return subscriber.subscriptions(session);
}
/*
@@ -444,7 +449,7 @@ public abstract class StoreMailboxManage
*/
public void unsubscribe(MailboxSession session, String mailbox)
throws SubscriptionException {
- subscriber.unsubscribe(session.getUser(), mailbox);
+ subscriber.unsubscribe(session, mailbox);
}
/*
@@ -474,10 +479,26 @@ public abstract class StoreMailboxManage
* @see
org.apache.james.imap.mailbox.MailboxManager#logout(org.apache.james.imap.mailbox.MailboxSession,
boolean)
*/
public void logout(MailboxSession session, boolean force) throws
MailboxException {
- // fine
+ if (session != null) {
+ if (subscriber instanceof StoreSubscriptionManager) {
+ ((StoreSubscriptionManager) subscriber).onLogout(session);
+ }
+ StoreMailbox mailbox = (StoreMailbox)
session.getAttributes().get(MAILBOX);
+ if (mailbox != null) {
+ mailbox.onLogout(session);
+ }
+ onLogout(session);
+ }
}
/**
+ * Get called on logout if the session is not null
+ *
+ * @param session
+ */
+ protected abstract void onLogout(MailboxSession session);
+
+ /**
* Return the delemiter to use
*
* @return delemiter
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
Sun Mar 14 19:24:38 2010
@@ -23,8 +23,8 @@ import java.util.HashSet;
import java.util.List;
import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.SubscriptionException;
-import org.apache.james.imap.mailbox.MailboxSession.User;
import org.apache.james.imap.store.transaction.TransactionalMapper;
import org.apache.james.imap.store.user.SubscriptionMapper;
import org.apache.james.imap.store.user.model.Subscription;
@@ -45,22 +45,22 @@ public abstract class StoreSubscriptionM
*
* @return mapper
*/
- protected abstract SubscriptionMapper createMapper(User user) throws
SubscriptionException;
+ protected abstract SubscriptionMapper createMapper(MailboxSession session)
throws SubscriptionException;
/*
* (non-Javadoc)
- * @see
org.apache.james.imap.store.Subscriber#subscribe(org.apache.james.imap.mailbox.MailboxSession.User,
java.lang.String)
+ * @see
org.apache.james.imap.store.Subscriber#subscribe(org.apache.james.imap.mailbox.MailboxSession,
java.lang.String)
*/
- public void subscribe(final User user, final String mailbox) throws
SubscriptionException {
- final SubscriptionMapper mapper = createMapper(user);
+ public void subscribe(final MailboxSession session, final String mailbox)
throws SubscriptionException {
+ final SubscriptionMapper mapper = createMapper(session);
try {
mapper.execute(new TransactionalMapper.Transaction() {
public void run() throws MailboxException {
- final Subscription subscription =
mapper.findFindMailboxSubscriptionForUser(user.getUserName(), mailbox);
+ final Subscription subscription =
mapper.findFindMailboxSubscriptionForUser(session.getUser().getUserName(),
mailbox);
if (subscription == null) {
- final Subscription newSubscription =
createSubscription(user, mailbox);
+ final Subscription newSubscription =
createSubscription(session, mailbox);
mapper.save(newSubscription);
}
}
@@ -76,19 +76,19 @@ public abstract class StoreSubscriptionM
/**
* Create Subscription for the given user and mailbox
*
- * @param user
+ * @param session
* @param mailbox
* @return subscription
*/
- protected abstract Subscription createSubscription(final User user, final
String mailbox);
+ protected abstract Subscription createSubscription(final MailboxSession
sonessi, final String mailbox);
/*
* (non-Javadoc)
- * @see
org.apache.james.imap.store.Subscriber#subscriptions(java.lang.String)
+ * @see
org.apache.james.imap.store.Subscriber#subscriptions(org.apache.james.imap.mailbox.MailboxSession)
*/
- public Collection<String> subscriptions(final User user) throws
SubscriptionException {
- final SubscriptionMapper mapper = createMapper(user);
- final List<Subscription> subscriptions =
mapper.findSubscriptionsForUser(user.getUserName());
+ public Collection<String> subscriptions(final MailboxSession session)
throws SubscriptionException {
+ final SubscriptionMapper mapper = createMapper(session);
+ final List<Subscription> subscriptions =
mapper.findSubscriptionsForUser(session.getUser().getUserName());
final Collection<String> results = new HashSet<String>(INITIAL_SIZE);
for (Subscription subscription:subscriptions) {
results.add(subscription.getMailbox());
@@ -100,13 +100,13 @@ public abstract class StoreSubscriptionM
* (non-Javadoc)
* @see
org.apache.james.imap.store.Subscriber#unsubscribe(java.lang.String,
java.lang.String)
*/
- public void unsubscribe(final User user, final String mailbox) throws
SubscriptionException {
- final SubscriptionMapper mapper = createMapper(user);
+ public void unsubscribe(final MailboxSession session, final String
mailbox) throws SubscriptionException {
+ final SubscriptionMapper mapper = createMapper(session);
try {
mapper.execute(new TransactionalMapper.Transaction() {
public void run() throws MailboxException {
- final Subscription subscription =
mapper.findFindMailboxSubscriptionForUser(user.getUserName(), mailbox);
+ final Subscription subscription =
mapper.findFindMailboxSubscriptionForUser(session.getUser().getUserName(),
mailbox);
if (subscription != null) {
mapper.delete(subscription);
}
@@ -117,4 +117,6 @@ public abstract class StoreSubscriptionM
throw (SubscriptionException) e;
}
}
+
+ protected abstract void onLogout(MailboxSession session);
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/Subscriber.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/Subscriber.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/Subscriber.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/Subscriber.java
Sun Mar 14 19:24:38 2010
@@ -21,8 +21,8 @@ package org.apache.james.imap.store;
import java.util.Collection;
+import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.SubscriptionException;
-import org.apache.james.imap.mailbox.MailboxSession.User;
/**
* Subscribes users.
@@ -30,28 +30,28 @@ import org.apache.james.imap.mailbox.Mai
public interface Subscriber {
/**
- * Subscribes the named user to the given mailbox.
- * @param user not null
+ * Subscribes the user in the session to the given mailbox.
+ * @param session not null
* @param mailbox not null
* @throws SubscriptionException when subscription fails
*/
- public void subscribe(User user, String mailbox)
+ public void subscribe(MailboxSession session, String mailbox)
throws SubscriptionException;
/**
- * Finds all subscriptions for the given user.
+ * Finds all subscriptions for the user in the session.
* @param user not null
* @return not null
* @throws SubscriptionException when subscriptions cannot be read
*/
- public Collection<String> subscriptions(User user) throws
SubscriptionException;
+ public Collection<String> subscriptions(MailboxSession session) throws
SubscriptionException;
/**
- * Unsubscribes the given user from the given mailbox.
- * @param user not null
+ * Unsubscribes the user in the session from the given mailbox.
+ * @param session not null
* @param mailbox not null
* @throws SubscriptionException when subscriptions cannot be read
*/
- public void unsubscribe(User user, String mailbox)
+ public void unsubscribe(MailboxSession session, String mailbox)
throws SubscriptionException;
}
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
(original)
+++
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
Sun Mar 14 19:24:38 2010
@@ -49,5 +49,10 @@ public interface TransactionalMapper {
*/
public void run() throws MailboxException;
}
+
+ /**
+ * Destroy the mapper
+ */
+ public void destroy();
}
Modified:
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=922931&r1=922930&r2=922931&view=diff
==============================================================================
---
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
(original)
+++
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Sun Mar 14 19:24:38 2010
@@ -382,16 +382,16 @@ public class TorqueMailboxManager implem
public void subscribe(MailboxSession session, String mailbox)
throws SubscriptionException {
- subscriper.subscribe(session.getUser(), mailbox);
+ subscriper.subscribe(session, mailbox);
}
public Collection<String> subscriptions(MailboxSession session) throws
SubscriptionException {
- return subscriper.subscriptions(session.getUser());
+ return subscriper.subscriptions(session);
}
public void unsubscribe(MailboxSession session, String mailbox)
throws SubscriptionException {
- subscriper.unsubscribe(session.getUser(), mailbox);
+ subscriper.unsubscribe(session, mailbox);
}
public void addListener(String mailboxName, MailboxListener listener,
MailboxSession session) throws MailboxException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]