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

Reply via email to