Author: norman Date: Mon May 17 20:37:00 2010 New Revision: 945355 URL: http://svn.apache.org/viewvc?rev=945355&view=rev Log: Mailbox instances should only be used within a request. Be sure we use a "new instance" on each pop3 command (JAMES-1005)
Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NioPOP3Server.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/NioPOP3ServerTest.java Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/POP3Session.java Mon May 17 20:37:00 2010 @@ -23,6 +23,7 @@ package org.apache.james.pop3server; import org.apache.james.imap.mailbox.Mailbox; +import org.apache.james.imap.mailbox.MailboxException; import org.apache.james.protocols.api.TLSSupportedSession; /** @@ -81,13 +82,6 @@ public interface POP3Session extends TLS * * @return mailbox content */ - Mailbox getUserMailbox(); - - /** - * Sets a new mailbox content - * - * @param userMailbox mailbox - */ - void setUserMailbox(Mailbox mailbox); + Mailbox getUserMailbox() throws MailboxException; } Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/ListCmdHandler.java Mon May 17 20:37:00 2010 @@ -124,7 +124,7 @@ public class ListCmdHandler implements C response = new POP3Response(POP3Response.ERR_RESPONSE); } return response; - } + } /* * (non-Javadoc) Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java Mon May 17 20:37:00 2010 @@ -26,7 +26,6 @@ import java.util.List; import javax.annotation.Resource; import org.apache.james.imap.mailbox.BadCredentialsException; -import org.apache.james.imap.mailbox.Mailbox; import org.apache.james.imap.mailbox.MailboxException; import org.apache.james.imap.mailbox.MailboxManager; import org.apache.james.imap.mailbox.MailboxSession; @@ -61,23 +60,9 @@ public class PassCmdHandler extends Rset String passArg = parameters; try { MailboxSession mSession = mailboxManager.login(session.getUser(), passArg, session.getLogger()); - StringBuffer sb = new StringBuffer(); - sb.append(mailboxManager.getUserNameSpacePrefix()); - sb.append(mailboxManager.getDelimiter()); - sb.append(session.getUser()); - sb.append(mailboxManager.getDelimiter()); - sb.append("INBOX"); - ; - String mailboxName = sb.toString(); - - // check if mailbox exists.. if not just create it - if (mailboxManager.mailboxExists(mailboxName, mSession) == false) { - mailboxManager.createMailbox(mailboxName, mSession); - } - Mailbox mailbox = mailboxManager.getMailbox(mailboxName, mSession); - + session.getState().put(POP3Session.MAILBOX_SESSION, mSession); - session.setUserMailbox(mailbox); + //session.setUserMailbox(mailbox); stat(session); // Store the ipAddress to use it later for pop before smtp Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/core/QuitCmdHandler.java Mon May 17 20:37:00 2010 @@ -83,6 +83,7 @@ public class QuitCmdHandler implements C mailboxManager.logout(mailboxSession, false); } catch (MailboxException e) { // nothing todo on logout + session.getLogger().info("Unable to logout from mailboxmanager", e); } return response; Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NioPOP3Server.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NioPOP3Server.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NioPOP3Server.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/NioPOP3Server.java Mon May 17 20:37:00 2010 @@ -18,10 +18,12 @@ ****************************************************************/ package org.apache.james.pop3server.netty; +import javax.annotation.Resource; import javax.net.ssl.SSLContext; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.imap.mailbox.MailboxManager; import org.apache.james.pop3server.POP3HandlerConfigurationData; import org.apache.james.pop3server.POP3ServerMBean; import org.apache.james.protocols.api.ProtocolHandlerChain; @@ -50,6 +52,8 @@ public class NioPOP3Server extends Abstr private ProtocolHandlerChain handlerChain; + private MailboxManager manager; + public void setProtocolHandlerChain(ProtocolHandlerChain handlerChain) { this.handlerChain = handlerChain; } @@ -135,7 +139,7 @@ public class NioPOP3Server extends Abstr @Override protected ChannelUpstreamHandler createHandler() { - return new POP3ChannelUpstreamHandler(NioPOP3Server.this.getProtocolHandlerChain(), getPOP3HandlerConfiguration(), getLogger(), getSSLContext()); + return new POP3ChannelUpstreamHandler(NioPOP3Server.this.getProtocolHandlerChain(), getPOP3HandlerConfiguration(), manager, getLogger(), getSSLContext()); } @Override @@ -177,4 +181,9 @@ public class NioPOP3Server extends Abstr protected final POP3HandlerConfigurationData getPOP3HandlerConfiguration() { return theConfigData; } + + @Resource(name = "mailboxmanager") + public void setMailboxManager(MailboxManager manager) { + this.manager = manager; + } } Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3ChannelUpstreamHandler.java Mon May 17 20:37:00 2010 @@ -21,6 +21,7 @@ package org.apache.james.pop3server.nett import javax.net.ssl.SSLContext; import org.apache.commons.logging.Log; +import org.apache.james.imap.mailbox.MailboxManager; import org.apache.james.pop3server.POP3HandlerConfigurationData; import org.apache.james.protocols.api.ProtocolHandlerChain; import org.apache.james.protocols.api.ProtocolSession; @@ -38,25 +39,27 @@ public class POP3ChannelUpstreamHandler private final Log logger; private final POP3HandlerConfigurationData conf; private final SSLContext context; + private MailboxManager manager; - public POP3ChannelUpstreamHandler(ProtocolHandlerChain chain, POP3HandlerConfigurationData conf, Log logger, SSLContext context) { + public POP3ChannelUpstreamHandler(ProtocolHandlerChain chain, POP3HandlerConfigurationData conf, MailboxManager manager,Log logger, SSLContext context) { super(chain); this.logger = logger; this.conf = conf; this.context = context; + this.manager = manager; } - public POP3ChannelUpstreamHandler(ProtocolHandlerChain chain, POP3HandlerConfigurationData conf, Log logger) { - this(chain, conf, logger, null); + public POP3ChannelUpstreamHandler(ProtocolHandlerChain chain, POP3HandlerConfigurationData conf, MailboxManager manager, Log logger) { + this(chain, conf, manager, logger, null); } @Override protected ProtocolSession createSession(ChannelHandlerContext ctx) throws Exception { if (context != null) { - return new POP3NettySession(conf, logger, ctx, context.createSSLEngine()); + return new POP3NettySession(conf, manager, logger, ctx, context.createSSLEngine()); } else { - return new POP3NettySession(conf, logger, ctx); + return new POP3NettySession(conf, manager, logger, ctx); } } Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java (original) +++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3NettySession.java Mon May 17 20:37:00 2010 @@ -24,7 +24,11 @@ import java.util.Map; import javax.net.ssl.SSLEngine; import org.apache.commons.logging.Log; +import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.mailbox.Mailbox; +import org.apache.james.imap.mailbox.MailboxException; +import org.apache.james.imap.mailbox.MailboxManager; +import org.apache.james.imap.mailbox.MailboxSession; import org.apache.james.pop3server.POP3HandlerConfigurationData; import org.apache.james.pop3server.POP3Session; import org.apache.james.socket.netty.AbstractNettySession; @@ -41,15 +45,16 @@ public class POP3NettySession extends Ab private int handlerState; - private Mailbox mailbox; + private MailboxManager manager; - public POP3NettySession(POP3HandlerConfigurationData configData, Log logger, ChannelHandlerContext handlerContext) { + public POP3NettySession(POP3HandlerConfigurationData configData, MailboxManager manager,Log logger, ChannelHandlerContext handlerContext) { super(logger, handlerContext); this.configData = configData; + this.manager = manager; } - public POP3NettySession(POP3HandlerConfigurationData configData, Log logger, ChannelHandlerContext handlerContext, SSLEngine engine) { + public POP3NettySession(POP3HandlerConfigurationData configData, MailboxManager manager, Log logger, ChannelHandlerContext handlerContext, SSLEngine engine) { super(logger, handlerContext, engine); this.configData = configData; } @@ -106,16 +111,25 @@ public class POP3NettySession extends Ab * (non-Javadoc) * @see org.apache.james.pop3server.POP3Session#getUserMailbox() */ - public Mailbox getUserMailbox() { + public Mailbox getUserMailbox() throws MailboxException { + StringBuffer sb = new StringBuffer(); + sb.append(manager.getUserNameSpacePrefix()); + sb.append(manager.getDelimiter()); + sb.append(getUser()); + sb.append(manager.getDelimiter()); + sb.append("INBOX"); + ; + String mailboxName = sb.toString(); + + MailboxSession session = (MailboxSession) getState().get(MAILBOX_SESSION); + if (session == null) throw new MailboxException(HumanReadableText.INVALID_LOGIN); + // check if mailbox exists.. if not just create it + if (manager.mailboxExists(mailboxName,session) == false) { + manager.createMailbox(mailboxName, session); + } + Mailbox mailbox = manager.getMailbox(mailboxName, session); + return mailbox; } - /* - * (non-Javadoc) - * @see org.apache.james.pop3server.POP3Session#setUserMailbox(org.apache.james.imap.mailbox.Mailbox) - */ - public void setUserMailbox(Mailbox mailbox) { - this.mailbox = mailbox; - } - } Modified: james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java (original) +++ james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java Mon May 17 20:37:00 2010 @@ -65,7 +65,7 @@ public abstract class AbstractAsyncPOP3S protected DNSService dnsservice; protected MockFileSystem fSystem; protected ProtocolHandlerChainImpl chain; - private InMemoryMailboxManager manager; + protected InMemoryMailboxManager manager; public AbstractAsyncPOP3ServerTest() { super("AsyncPOP3ServerTest"); Modified: james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/NioPOP3ServerTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/NioPOP3ServerTest.java?rev=945355&r1=945354&r2=945355&view=diff ============================================================================== --- james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/NioPOP3ServerTest.java (original) +++ james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/NioPOP3ServerTest.java Mon May 17 20:37:00 2010 @@ -45,6 +45,7 @@ public class NioPOP3ServerTest extends A log.setLevel(SimpleLog.LOG_LEVEL_DEBUG); m_pop3Server.setLog(log); m_pop3Server.setMailServer(m_mailServer); + m_pop3Server.setMailboxManager(manager); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org