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 2011/06/27 18:47:17 UTC

svn commit: r1140233 - in /james/server/trunk: lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/ pop3server/src/main/java/org/apache/james/pop3server/netty/ protocols-library/src/main/java/org/apache/james/protocols/lib/ protocols-library/src...

Author: norman
Date: Mon Jun 27 16:47:16 2011
New Revision: 1140233

URL: http://svn.apache.org/viewvc?rev=1140233&view=rev
Log:
Refactor server classes to share more code

Added:
    james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java
Modified:
    james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
    james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
    james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java
    james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
    james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java

Modified: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java?rev=1140233&r1=1140232&r2=1140233&view=diff
==============================================================================
--- james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java (original)
+++ james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java Mon Jun 27 16:47:16 2011
@@ -18,52 +18,31 @@
  ****************************************************************/
 package org.apache.james.lmtpserver.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.lmtpserver.CoreCmdHandlerLoader;
 import org.apache.james.lmtpserver.jmx.JMXHandlersLoader;
-import org.apache.james.protocols.api.ProtocolHandlerLoader;
-import org.apache.james.protocols.lib.ProtocolHandlerChainImpl;
-import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
+import org.apache.james.protocols.api.HandlersPackage;
+import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.apache.james.protocols.smtp.SMTPConfiguration;
 import org.apache.james.smtpserver.netty.SMTPChannelUpstreamHandler;
 import org.apache.james.smtpserver.netty.SMTPResponseEncoder;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
 
-public class LMTPServer extends AbstractConfigurableAsyncServer implements LMTPServerMBean {
+public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServerMBean {
 
     /**
      * The maximum message size allowed by this SMTP server. The default value,
      * 0, means no limit.
      */
     private long maxMessageSize = 0;
-    private ProtocolHandlerChainImpl handlerChain;
     private LMTPConfiguration lmtpConfig = new LMTPConfiguration();
     private String lmtpGreeting;
-    private ProtocolHandlerLoader loader;
-    private HierarchicalConfiguration config;
 
-    @Resource(name = "protocolhandlerloader")
-    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
-        this.loader = loader;
-    }
 
-    @Override
-    protected void preInit() throws Exception {
-        super.preInit();
-        handlerChain = new ProtocolHandlerChainImpl(loader, config.configurationAt("handlerchain"), jmxName, CoreCmdHandlerLoader.class.getName(), JMXHandlersLoader.class.getName());
-        handlerChain.init();
-    }
-
-    @Override
-    protected void postDestroy() {
-        super.postDestroy();
-        handlerChain.destroy();
-    }
     /*
      * (non-Javadoc)
      * 
@@ -85,6 +64,7 @@ public class LMTPServer extends Abstract
     }
 
     public void doConfigure(final HierarchicalConfiguration configuration) throws ConfigurationException {
+        super.doConfigure(configuration);
         if (isEnabled()) {
 
             // get the message size limit from the conf file and multiply
@@ -100,7 +80,6 @@ public class LMTPServer extends Abstract
             lmtpGreeting = configuration.getString("lmtpGreeting", null);
 
         }
-        this.config = configuration;
     }
 
     /**
@@ -185,16 +164,6 @@ public class LMTPServer extends Abstract
      * (non-Javadoc)
      * 
      * @see
-     * org.apache.james.protocols.smtp.SMTPServerMBean#getNetworkInterface()
-     */
-    public String getNetworkInterface() {
-        return "unknown";
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
      * org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer#
      * getDefaultJMXName()
      */
@@ -224,7 +193,7 @@ public class LMTPServer extends Abstract
 
     @Override
     protected ChannelUpstreamHandler createCoreHandler() {
-        return new SMTPChannelUpstreamHandler(handlerChain, lmtpConfig, getLogger());
+        return new SMTPChannelUpstreamHandler(getProtocolHandlerChain(), lmtpConfig, getLogger());
     }
 
     @Override
@@ -242,4 +211,14 @@ public class LMTPServer extends Abstract
         return false;
     }
 
+    @Override
+    protected Class<? extends HandlersPackage> getCoreHandlersPackage() {
+        return CoreCmdHandlerLoader.class;
+    }
+
+    @Override
+    protected Class<? extends HandlersPackage> getJMXHandlersPackage() {
+        return JMXHandlersLoader.class;
+    }
+
 }

Modified: james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java?rev=1140233&r1=1140232&r2=1140233&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java (original)
+++ james/server/trunk/pop3server/src/main/java/org/apache/james/pop3server/netty/POP3Server.java Mon Jun 27 16:47:16 2011
@@ -18,66 +18,30 @@
  ****************************************************************/
 package org.apache.james.pop3server.netty;
 
-import javax.annotation.Resource;
-
-import org.apache.commons.configuration.ConfigurationException;
-import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.pop3server.POP3HandlerConfigurationData;
 import org.apache.james.pop3server.core.CoreCmdHandlerLoader;
 import org.apache.james.pop3server.jmx.JMXHandlersLoader;
-import org.apache.james.protocols.api.ProtocolHandlerLoader;
-import org.apache.james.protocols.lib.ProtocolHandlerChainImpl;
-import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
+import org.apache.james.protocols.api.HandlersPackage;
+import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
 
 /**
  * NIO POP3 Server which use Netty
  */
-public class POP3Server extends AbstractConfigurableAsyncServer implements POP3ServerMBean {
+public class POP3Server extends AbstractProtocolAsyncServer implements POP3ServerMBean {
 
     /**
      * The configuration data to be passed to the handler
      */
     private POP3HandlerConfigurationData theConfigData = new POP3HandlerConfigurationDataImpl();
 
-    private ProtocolHandlerChainImpl handlerChain;
-
-    private ProtocolHandlerLoader loader;
-
-    private HierarchicalConfiguration config;
-
-    @Resource(name = "protocolhandlerloader")
-    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
-        this.loader = loader;
-    }
-    
-    @Override
-    protected void preInit() throws Exception {
-        super.preInit();
-        handlerChain = new ProtocolHandlerChainImpl(loader, config.configurationAt("handlerchain"), jmxName, CoreCmdHandlerLoader.class.getName(), JMXHandlersLoader.class.getName());
-        handlerChain.init();
-    }
-
-    @Override
-    protected void doConfigure(HierarchicalConfiguration config) throws ConfigurationException {
-        super.doConfigure(config);
-        this.config = config;
-    }
-
     @Override
     protected int getDefaultPort() {
         return 110;
     }
     
     
-
-    @Override
-    protected void postDestroy() {
-        super.postDestroy();
-        handlerChain.destroy();
-    }
-
     /*
      * (non-Javadoc)
      * 
@@ -121,7 +85,7 @@ public class POP3Server extends Abstract
 
     @Override
     protected ChannelUpstreamHandler createCoreHandler() {
-        return new POP3ChannelUpstreamHandler(handlerChain, theConfigData, getLogger(), getSSLContext(), getEnabledCipherSuites());
+        return new POP3ChannelUpstreamHandler(getProtocolHandlerChain(), theConfigData, getLogger(), getSSLContext(), getEnabledCipherSuites());
     }
 
     @Override
@@ -129,4 +93,15 @@ public class POP3Server extends Abstract
         return new POP3ResponseEncoder();
     }
 
+
+    @Override
+    protected Class<? extends HandlersPackage> getCoreHandlersPackage() {
+        return CoreCmdHandlerLoader.class;
+    }
+
+
+    @Override
+    protected Class<? extends HandlersPackage> getJMXHandlersPackage() {
+        return JMXHandlersLoader.class;
+    }
 }

Modified: james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java?rev=1140233&r1=1140232&r2=1140233&view=diff
==============================================================================
--- james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java (original)
+++ james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java Mon Jun 27 16:47:16 2011
@@ -44,12 +44,12 @@ public class ProtocolHandlerChainImpl im
     private String jmxHandlersPackage;
     private List<Object> handlers = new LinkedList<Object>();
     
-    public ProtocolHandlerChainImpl(ProtocolHandlerLoader loader, HierarchicalConfiguration handlerchainConfig, String jmxName, String coreHandlersPackage, String jmxHandlersPackage) {
+    public ProtocolHandlerChainImpl(ProtocolHandlerLoader loader, HierarchicalConfiguration handlerchainConfig, String jmxName, Class<? extends HandlersPackage> coreHandlersPackage, Class<? extends HandlersPackage> jmxHandlersPackage) {
         this.loader = loader;
         this.handlerchainConfig = handlerchainConfig;
         this.jmxName = jmxName;
-        this.coreHandlersPackage = coreHandlersPackage;
-        this.jmxHandlersPackage = jmxHandlersPackage;
+        this.coreHandlersPackage = coreHandlersPackage.getName();
+        this.jmxHandlersPackage = jmxHandlersPackage.getName();
     }
     
     @SuppressWarnings("unchecked")

Modified: james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java?rev=1140233&r1=1140232&r2=1140233&view=diff
==============================================================================
--- james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java (original)
+++ james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java Mon Jun 27 16:47:16 2011
@@ -266,7 +266,7 @@ public abstract class AbstractConfigurab
     }
 
     protected void postDestroy() {
-        
+        // override me
     }
     
     

Added: james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java?rev=1140233&view=auto
==============================================================================
--- james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java (added)
+++ james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java Mon Jun 27 16:47:16 2011
@@ -0,0 +1,90 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.james.protocols.lib.netty;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.protocols.api.HandlersPackage;
+import org.apache.james.protocols.api.ProtocolHandler;
+import org.apache.james.protocols.api.ProtocolHandlerChain;
+import org.apache.james.protocols.api.ProtocolHandlerLoader;
+import org.apache.james.protocols.lib.ProtocolHandlerChainImpl;
+
+/**
+ * Abstract base class which use a {@link ProtocolHandlerLoader} for loading the {@link ProtocolHandler}
+ * 
+ *
+ */
+public abstract class AbstractProtocolAsyncServer extends AbstractConfigurableAsyncServer{
+
+    private ProtocolHandlerChainImpl handlerChain;
+
+    private ProtocolHandlerLoader loader;
+
+    private HierarchicalConfiguration config;
+
+    @Resource(name = "protocolhandlerloader")
+    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
+        this.loader = loader;
+    }
+    
+    @Override
+    protected void preInit() throws Exception {
+        super.preInit();
+        handlerChain = new ProtocolHandlerChainImpl(loader, config.configurationAt("handlerchain"), jmxName, getCoreHandlersPackage(), getJMXHandlersPackage());
+        handlerChain.init();
+    }
+
+    @Override
+    protected void doConfigure(HierarchicalConfiguration config) throws ConfigurationException {
+        super.doConfigure(config);
+        this.config = config;
+    }
+    
+    @Override
+    protected void postDestroy() {
+        super.postDestroy();
+        handlerChain.destroy();
+    }
+
+    /**
+     * Return the {@link ProtocolHandlerChain} which contains all loaded handlers
+     * 
+     * @return chain
+     */
+    protected ProtocolHandlerChain getProtocolHandlerChain() {
+        return handlerChain;
+    }
+    
+    /**
+     * Return the {@link HandlersPackage} which is responsible to load the core {@link ProtocolHandler}
+     * 
+     * @return core
+     */
+    protected abstract Class< ? extends HandlersPackage> getCoreHandlersPackage();
+    
+    /**
+     * Return the {@link HandlersPackage} which is responsible to load the jmx {@link ProtocolHandler}
+     * 
+     * @return jmx
+     */
+    protected abstract Class< ? extends HandlersPackage> getJMXHandlersPackage();
+}

Modified: james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java?rev=1140233&r1=1140232&r2=1140233&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java (original)
+++ james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java Mon Jun 27 16:47:16 2011
@@ -24,9 +24,8 @@ import org.apache.commons.configuration.
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.dnsservice.api.DNSService;
 import org.apache.james.dnsservice.library.netmatcher.NetMatcher;
-import org.apache.james.protocols.api.ProtocolHandlerLoader;
-import org.apache.james.protocols.lib.ProtocolHandlerChainImpl;
-import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
+import org.apache.james.protocols.api.HandlersPackage;
+import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer;
 import org.apache.james.protocols.smtp.SMTPConfiguration;
 import org.apache.james.smtpserver.CoreCmdHandlerLoader;
 import org.apache.james.smtpserver.jmx.JMXHandlersLoader;
@@ -36,14 +35,7 @@ import org.jboss.netty.handler.codec.one
 /**
  * NIO SMTPServer which use Netty
  */
-public class SMTPServer extends AbstractConfigurableAsyncServer implements SMTPServerMBean {
-
-    /**
-     * The handler chain - SMTPhandlers can lookup handlerchain to obtain
-     * Command handlers , Message handlers and connection handlers Constructed
-     * during initialisation to allow dependency injection.
-     */
-    private ProtocolHandlerChainImpl handlerChain;
+public class SMTPServer extends AbstractProtocolAsyncServer implements SMTPServerMBean {
 
     /**
      * Whether authentication is required to use this SMTP server.
@@ -90,23 +82,15 @@ public class SMTPServer extends Abstract
 
     private boolean verifyIdentity;
 
-    private ProtocolHandlerLoader loader;
-
-    private HierarchicalConfiguration configuration;
-
     private DNSService dns;
 
-    @Resource(name = "protocolhandlerloader")
-    public void setProtocolHandlerLoader(ProtocolHandlerLoader loader) {
-        this.loader = loader;
-    }
-
     @Resource(name = "dnsservice")
     public void setDNSService(DNSService dns) {
         this.dns = dns;
     }
     
     public void doConfigure(final HierarchicalConfiguration configuration) throws ConfigurationException {
+        super.doConfigure(configuration);
         if (isEnabled()) {
             String authRequiredString = configuration.getString("authRequired", "false").trim().toLowerCase();
             if (authRequiredString.equals("true"))
@@ -175,20 +159,6 @@ public class SMTPServer extends Abstract
             verifyIdentity = configuration.getBoolean("verifyIdentity", true);
 
         }
-        this.configuration = configuration;
-    }
-
-    @Override
-    protected void postDestroy() {
-        super.postDestroy();
-        handlerChain.destroy();
-    }
-
-    @Override
-    protected void preInit() throws Exception {
-        super.preInit();
-        handlerChain = new ProtocolHandlerChainImpl(loader, configuration.configurationAt("handlerchain"), jmxName, CoreCmdHandlerLoader.class.getName(), JMXHandlersLoader.class.getName());
-        handlerChain.init();
     }
 
     /**
@@ -325,17 +295,7 @@ public class SMTPServer extends Abstract
     public boolean getHeloEhloEnforcement() {
         return heloEhloEnforcement;
     }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.apache.james.protocols.smtp.SMTPServerMBean#getNetworkInterface()
-     */
-    public String getNetworkInterface() {
-        return "unknown";
-    }
-
+    
     /*
      * (non-Javadoc)
      * 
@@ -390,7 +350,7 @@ public class SMTPServer extends Abstract
 
     @Override
     protected ChannelUpstreamHandler createCoreHandler() {
-        return new SMTPChannelUpstreamHandler(handlerChain, theConfigData, getLogger(), getSSLContext(), getEnabledCipherSuites());
+        return new SMTPChannelUpstreamHandler(getProtocolHandlerChain(), theConfigData, getLogger(), getSSLContext(), getEnabledCipherSuites());
     }
 
     @Override
@@ -398,4 +358,14 @@ public class SMTPServer extends Abstract
         return new SMTPResponseEncoder();
     }
 
+    @Override
+    protected Class<? extends HandlersPackage> getCoreHandlersPackage() {
+        return CoreCmdHandlerLoader.class;
+    }
+
+    @Override
+    protected Class<? extends HandlersPackage> getJMXHandlersPackage() {
+        return JMXHandlersLoader.class;
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org