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/05/06 23:21:49 UTC
svn commit: r1100381 - in /james/server/trunk: container-spring/
container-spring/src/main/config/james/context/
container-spring/src/main/java/org/apache/james/container/spring/bean/
container-spring/src/main/java/org/apache/james/container/spring/bea...
Author: norman
Date: Fri May 6 21:21:48 2011
New Revision: 1100381
URL: http://svn.apache.org/viewvc?rev=1100381&view=rev
Log:
Make ProtocolHandlerChain implementation less a hack and more clear
Added:
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/ProtocolHandlerChainImpl.java
- copied, changed from r1097906, james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ProtocolHandlerChainFactoryPostProcessor.java
james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ConfigurableProtocolHandlerchain.java
Removed:
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ProtocolHandlerChainFactoryPostProcessor.java
james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/postprocessor/ProtocolHandlerChainPostProcessor.java
Modified:
james/server/trunk/container-spring/pom.xml
james/server/trunk/container-spring/src/main/config/james/context/james-server-context.xml
james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
james/server/trunk/pop3server/pom.xml
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/netty/AbstractConfigurableAsyncServer.java
james/server/trunk/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerChain.java
james/server/trunk/smtpserver/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
Modified: james/server/trunk/container-spring/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container-spring/pom.xml?rev=1100381&r1=1100380&r2=1100381&view=diff
==============================================================================
--- james/server/trunk/container-spring/pom.xml (original)
+++ james/server/trunk/container-spring/pom.xml Fri May 6 21:21:48 2011
@@ -573,7 +573,6 @@
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>james-server-protocols-library</artifactId>
- <scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
Modified: james/server/trunk/container-spring/src/main/config/james/context/james-server-context.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container-spring/src/main/config/james/context/james-server-context.xml?rev=1100381&r1=1100380&r2=1100381&view=diff
==============================================================================
--- james/server/trunk/container-spring/src/main/config/james/context/james-server-context.xml (original)
+++ james/server/trunk/container-spring/src/main/config/james/context/james-server-context.xml Fri May 6 21:21:48 2011
@@ -238,32 +238,20 @@
-->
<bean id="smtpserver" class="org.apache.james.smtpserver.netty.SMTPServer"/>
- <bean id="smtphandlerchain" class="org.apache.james.container.spring.bean.postprocessor.ProtocolHandlerChainPostProcessor">
- <property name="coreHandlersPackage" value="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
- <property name="jmxHandlersPackage" value="org.apache.james.smtpserver.jmx.JMXHandlersLoader"/>
- <property name="beanName" value="smtpserver"/>
- </bean>
+ <bean id="smtphandlerchain" class="org.apache.james.container.spring.bean.ProtocolHandlerChainImpl"/>
<!--
LMTP Server
-->
<bean id="lmtpserver" class="org.apache.james.lmtpserver.netty.LMTPServer"/>
- <bean id="lmtphandlerchain" class="org.apache.james.container.spring.bean.postprocessor.ProtocolHandlerChainPostProcessor">
- <property name="coreHandlersPackage" value="org.apache.james.lmtpserver.CoreCmdHandlerLoader"/>
- <property name="jmxHandlersPackage" value="org.apache.james.lmtpserver.jmx.JMXHandlersLoader"/>
- <property name="beanName" value="lmtpserver"/>
- </bean>
+ <bean id="lmtphandlerchain" class="org.apache.james.container.spring.bean.ProtocolHandlerChainImpl"/>
<!--
POP3 Server
-->
<bean id="pop3server" class="org.apache.james.pop3server.netty.POP3Server"/>
- <bean id="pop3handlerchain" class="org.apache.james.container.spring.bean.postprocessor.ProtocolHandlerChainPostProcessor">
- <property name="coreHandlersPackage" value="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
- <property name="jmxHandlersPackage" value="org.apache.james.pop3server.jmx.JMXHandlersLoader"/>
- <property name="beanName" value="pop3server"/>
- </bean>
+ <bean id="pop3handlerchain" class="org.apache.james.container.spring.bean.ProtocolHandlerChainImpl"/>
<!--
IMAP Server
Copied: james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/ProtocolHandlerChainImpl.java (from r1097906, james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ProtocolHandlerChainFactoryPostProcessor.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/ProtocolHandlerChainImpl.java?p2=james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/ProtocolHandlerChainImpl.java&p1=james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ProtocolHandlerChainFactoryPostProcessor.java&r1=1097906&r2=1100381&rev=1100381&view=diff
==============================================================================
--- james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ProtocolHandlerChainFactoryPostProcessor.java (original)
+++ james/server/trunk/container-spring/src/main/java/org/apache/james/container/spring/bean/ProtocolHandlerChainImpl.java Fri May 6 21:21:48 2011
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.container.spring.bean.factorypostprocessor;
+package org.apache.james.container.spring.bean;
import java.util.Iterator;
import java.util.LinkedList;
@@ -27,21 +27,17 @@ import org.apache.commons.configuration.
import org.apache.commons.configuration.ConfigurationUtils;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.container.spring.provider.configuration.ConfigurationProvider;
-import org.apache.james.container.spring.provider.log.LogProvider;
import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.lifecycle.api.LogEnabled;
import org.apache.james.protocols.api.ExtensibleHandler;
import org.apache.james.protocols.api.HandlersPackage;
import org.apache.james.protocols.api.ProtocolHandlerChain;
-import org.slf4j.Logger;
+import org.apache.james.protocols.api.WiringException;
+import org.apache.james.protocols.lib.ConfigurableProtocolHandlerchain;
import org.springframework.beans.BeansException;
import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.config.BeanDefinition;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
/**
*
@@ -56,75 +52,42 @@ import org.springframework.beans.factory
* which it is responsible.
*/
@SuppressWarnings("unchecked")
-public abstract class ProtocolHandlerChainFactoryPostProcessor implements ProtocolHandlerChain, BeanFactoryPostProcessor {
+public class ProtocolHandlerChainImpl implements ConfigurableProtocolHandlerchain, BeanFactoryAware {
private ConfigurableListableBeanFactory beanFactory;
- private String coreHandlersPackage;
-
- private List<String> handlers = new LinkedList<String>();
-
- private String beanname;
-
- private String jmxHandlersPackage;
-
- /**
- * Lookup the {@link HierarchicalConfiguration} for the beanname which was
- * configured via {@link #setBeanName(String)} and parse it for handlers
- * which should be registered in the {@link ConfigurableListableBeanFactory}
- * .
- */
- public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
-
- this.beanFactory = beanFactory;
-
- ConfigurationProvider confProvider = beanFactory.getBean(ConfigurationProvider.class);
-
- LogProvider logProvider = beanFactory.getBean(LogProvider.class);
+ private List<Object> handlers = new LinkedList<Object>();
+ @Override
+ public void init(HierarchicalConfiguration handlerchainConfig) throws ConfigurationException {
try {
-
- Logger log = logProvider.getLog(beanname);
-
- HierarchicalConfiguration config = confProvider.getConfiguration(beanname);
- String jmxName = config.getString("jmxName", beanname);
- HierarchicalConfiguration handlerchainConfig = config.configurationAt("handlerchain");
+ String jmxName = handlerchainConfig.getString("[@jmxName]");
List<org.apache.commons.configuration.HierarchicalConfiguration> children = handlerchainConfig.configurationsAt("handler");
+ ClassLoader loader = beanFactory.getBeanClassLoader();
- // check if the coreHandlersPackage was specified inte hconfig if
- // not add the default
- if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
- handlerchainConfig.addProperty("[@coreHandlersPackage]", coreHandlersPackage);
-
+
String coreCmdName = handlerchainConfig.getString("[@coreHandlersPackage]");
- BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
-
- String coreCmdBeanName = getBeanName(coreCmdName);
-
// now register the HandlerPackage
- BeanDefinition def = BeanDefinitionBuilder.genericBeanDefinition(coreCmdName).setLazyInit(false).getBeanDefinition();
- registry.registerBeanDefinition(coreCmdBeanName, def);
- HandlersPackage handlersPackage = beanFactory.getBean(coreCmdBeanName, HandlersPackage.class);
+ // Use the classloader which is used for bean instance stuff
+ Class<HandlersPackage> c = (Class<HandlersPackage>) loader.loadClass(coreCmdName);
+ HandlersPackage handlersPackage = beanFactory.createBean(c);
- registerHandlersPackage(handlersPackage, null, children);
- String jmxCmdName = jmxHandlersPackage;
+ registerHandlersPackage(handlersPackage, null, children);
if (handlerchainConfig.getBoolean("[@enableJmx]", true)) {
- String jmxCmdBeanName = getBeanName(jmxCmdName);
+ String jmxHandlerPackage = handlerchainConfig.getString("[@jmxHandlersPackage]");
// now register the HandlerPackage for jmx
- BeanDefinition jmxDef = BeanDefinitionBuilder.genericBeanDefinition(jmxCmdName).setLazyInit(false).getBeanDefinition();
- registry.registerBeanDefinition(jmxCmdBeanName, jmxDef);
- HandlersPackage jmxPackage = beanFactory.getBean(jmxCmdBeanName, HandlersPackage.class);
+ Class<HandlersPackage> jC = (Class<HandlersPackage>) loader.loadClass(jmxHandlerPackage);
+ HandlersPackage jmxPackage = beanFactory.createBean(jC);
DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
builder.addProperty("jmxName", jmxName);
registerHandlersPackage(jmxPackage, builder, children);
}
- ClassLoader loader = beanFactory.getBeanClassLoader();
for (int i = 0; i < children.size(); i++) {
HierarchicalConfiguration hConf = children.get(i);
String className = hConf.getString("[@class]", null);
@@ -133,37 +96,44 @@ public abstract class ProtocolHandlerCha
// ignore base handlers.
if (!className.equals(coreCmdName)) {
- String handlerBeanName = getBeanName(className);
-
- Class<?> clazz = loader.loadClass(className);
- if (Configurable.class.isAssignableFrom(clazz)) {
- confProvider.registerConfiguration(handlerBeanName, hConf);
-
+ // Use the classloader which is used for bean instance stuff
+ Class<?> clazz = (Class<?>) loader.loadClass(className);
+ Object handler = beanFactory.createBean(clazz);
+ if (handler instanceof Configurable) {
+ ((Configurable) handler).configure(hConf);
}
- if (LogEnabled.class.isAssignableFrom(clazz)) {
- logProvider.registerLog(handlerBeanName, log);
- }
-
- // now register the BeanDefinition on the context and
- // store the beanname for later usage
- BeanDefinition handlerDef = BeanDefinitionBuilder.genericBeanDefinition(className).getBeanDefinition();
- registry.registerBeanDefinition(handlerBeanName, handlerDef);
-
- handlers.add(handlerBeanName);
+ handlers.add(handler);
}
} else {
throw new FatalBeanException("Missing @class attribute in configuration: " + ConfigurationUtils.toString(hConf));
}
}
-
- } catch (ConfigurationException e) {
- throw new FatalBeanException("Unable to load configuration for bean " + beanname, e);
- } catch (ClassNotFoundException ex) {
- throw new FatalBeanException("Unable to load configuration for bean " + beanname, ex);
+
+ wireHandlers();
+ } catch (WiringException e) {
+ throw new ConfigurationException(e);
+ } catch (ClassNotFoundException e) {
+ throw new ConfigurationException("Unable to load handlers", e);
}
-
}
+ private void wireHandlers() throws WiringException {
+ for (int a = 0; a < handlers.size(); a++) {
+ Object handler = handlers.get(a);
+ if (handler instanceof ExtensibleHandler) {
+ final ExtensibleHandler extensibleHandler = (ExtensibleHandler) handler;
+ final List<Class<?>> markerInterfaces = extensibleHandler.getMarkerInterfaces();
+ for (int i = 0; i < markerInterfaces.size(); i++) {
+ final Class<?> markerInterface = markerInterfaces.get(i);
+ final List<?> extensions = getHandlers(markerInterface);
+ // ok now time for try the wiring
+ extensibleHandler.wireExtensions(markerInterface, extensions);
+
+ }
+ }
+ }
+ }
+
private void registerHandlersPackage(HandlersPackage handlersPackage, HierarchicalConfiguration handlerConfig, List<HierarchicalConfiguration> children) {
List<String> c = handlersPackage.getHandlers();
@@ -184,14 +154,6 @@ public abstract class ProtocolHandlerCha
}
}
- public void setCoreHandlersPackage(String coreHandlersPackage) {
- this.coreHandlersPackage = coreHandlersPackage;
- }
-
- public void setJmxHandlersPackage(String jmxHandlersPackage) {
- this.jmxHandlersPackage = jmxHandlersPackage;
- }
-
/**
* Return a DefaultConfiguration build on the given command name and
* classname.
@@ -209,14 +171,7 @@ public abstract class ProtocolHandlerCha
return hConf;
}
- /**
- * Returns the Handlers List.
- *
- * @return
- */
- public List<String> getHandlers() {
- return handlers;
- }
+
/*
* (non-Javadoc)
@@ -227,25 +182,21 @@ public abstract class ProtocolHandlerCha
*/
public <T> LinkedList<T> getHandlers(Class<T> type) {
LinkedList<T> classHandlers = new LinkedList<T>();
- String[] names = beanFactory.getBeanNamesForType(type);
-
- for (int i = 0; i < names.length; i++) {
- String name = names[i];
- // check if the handler is registered in the handler chain
- if (handlers.contains(name)) {
- classHandlers.add(beanFactory.getBean(name, type));
+ for (int i = 0; i < handlers.size(); i++) {
+ if (type.isInstance(handlers.get(i))) {
+ classHandlers.add((T)handlers.get(i));
}
+
}
return classHandlers;
}
- public void setBeanName(String beanname) {
- this.beanname = beanname;
- }
- private String getBeanName(String name) {
- return beanname + ":" + name;
+ /*
+ *
+ */
+ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
+ this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
}
-
}
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=1100381&r1=1100380&r2=1100381&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 Fri May 6 21:21:48 2011
@@ -23,7 +23,7 @@ import javax.net.ssl.SSLContext;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.protocols.api.ProtocolHandlerChain;
+import org.apache.james.protocols.lib.ConfigurableProtocolHandlerchain;
import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
import org.apache.james.protocols.smtp.SMTPConfiguration;
import org.apache.james.smtpserver.netty.SMTPChannelUpstreamHandler;
@@ -38,12 +38,13 @@ public class LMTPServer extends Abstract
* 0, means no limit.
*/
private long maxMessageSize = 0;
- private ProtocolHandlerChain handlerChain;
+ private ConfigurableProtocolHandlerchain handlerChain;
private LMTPConfiguration lmtpConfig = new LMTPConfiguration();
private String lmtpGreeting;
+ private HierarchicalConfiguration config;
@Resource(name = "lmtphandlerchain")
- public void setProtocolHandlerChain(ProtocolHandlerChain handlerChain) {
+ public void setProtocolHandlerChain(ConfigurableProtocolHandlerchain handlerChain) {
this.handlerChain = handlerChain;
}
@@ -67,7 +68,20 @@ public class LMTPServer extends Abstract
return "LMTP Service";
}
+ @Override
+ protected void preInit() throws Exception {
+ super.preInit();
+ HierarchicalConfiguration hconfig = config.configurationAt("handlerchain");
+ hconfig.addProperty("[@jmxName]", jmxName);
+ hconfig.addProperty("[@jmxHandlersPackage]", "org.apache.james.lmtpserver.jmx.JMXHandlersLoader");
+ hconfig.addProperty("[@coreHandlersPackage]", "org.apache.james.lmtpserver.CoreCmdHandlerLoader");
+
+ handlerChain.init(hconfig);
+ }
+
public void doConfigure(final HierarchicalConfiguration configuration) throws ConfigurationException {
+ this.config = configuration;
+
if (isEnabled()) {
// get the message size limit from the conf file and multiply
Modified: james/server/trunk/pop3server/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/pom.xml?rev=1100381&r1=1100380&r2=1100381&view=diff
==============================================================================
--- james/server/trunk/pop3server/pom.xml (original)
+++ james/server/trunk/pop3server/pom.xml Fri May 6 21:21:48 2011
@@ -89,6 +89,11 @@
</dependency>
<dependency>
<groupId>org.apache.james</groupId>
+ <artifactId>apache-james-mailbox-maildir</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
<artifactId>james-server-core</artifactId>
<type>test-jar</type>
<scope>test</scope>
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=1100381&r1=1100380&r2=1100381&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 Fri May 6 21:21:48 2011
@@ -20,8 +20,10 @@ package org.apache.james.pop3server.nett
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.protocols.api.ProtocolHandlerChain;
+import org.apache.james.protocols.lib.ConfigurableProtocolHandlerchain;
import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
import org.jboss.netty.channel.ChannelUpstreamHandler;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
@@ -36,14 +38,34 @@ public class POP3Server extends Abstract
*/
private POP3HandlerConfigurationData theConfigData = new POP3HandlerConfigurationDataImpl();
- private ProtocolHandlerChain handlerChain;
+ private ConfigurableProtocolHandlerchain handlerChain;
+
+ private HierarchicalConfiguration config;
@Resource(name = "pop3handlerchain")
- public void setProtocolHandlerChain(ProtocolHandlerChain handlerChain) {
+ public void setProtocolHandlerChain(ConfigurableProtocolHandlerchain handlerChain) {
this.handlerChain = handlerChain;
}
@Override
+ protected void preInit() throws Exception {
+ super.preInit();
+ HierarchicalConfiguration hconfig = config.configurationAt("handlerchain");
+ hconfig.addProperty("[@jmxName]", jmxName);
+ hconfig.addProperty("[@jmxHandlersPackage]", "org.apache.james.pop3server.jmx.JMXHandlersLoader");
+ hconfig.addProperty("[@coreHandlersPackage]", "org.apache.james.pop3server.core.CoreCmdHandlerLoader");
+
+ handlerChain.init(hconfig);
+ }
+
+ public void doConfigure(final HierarchicalConfiguration configuration) throws ConfigurationException {
+ super.doConfigure(configuration);
+ this.config = configuration;
+
+
+ }
+
+ @Override
protected int getDefaultPort() {
return 110;
}
Added: james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ConfigurableProtocolHandlerchain.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ConfigurableProtocolHandlerchain.java?rev=1100381&view=auto
==============================================================================
--- james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ConfigurableProtocolHandlerchain.java (added)
+++ james/server/trunk/protocols-library/src/main/java/org/apache/james/protocols/lib/ConfigurableProtocolHandlerchain.java Fri May 6 21:21:48 2011
@@ -0,0 +1,10 @@
+package org.apache.james.protocols.lib;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.protocols.api.ProtocolHandlerChain;
+
+public interface ConfigurableProtocolHandlerchain extends ProtocolHandlerChain {
+
+ public void init(HierarchicalConfiguration config) throws ConfigurationException;
+}
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=1100381&r1=1100380&r2=1100381&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 Fri May 6 21:21:48 2011
@@ -103,7 +103,7 @@ public abstract class AbstractConfigurab
private SSLContext context;
- private String jmxName;
+ protected String jmxName;
private String[] enabledCipherSuites;
Modified: james/server/trunk/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerChain.java
URL: http://svn.apache.org/viewvc/james/server/trunk/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerChain.java?rev=1100381&r1=1100380&r2=1100381&view=diff
==============================================================================
--- james/server/trunk/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerChain.java (original)
+++ james/server/trunk/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerChain.java Fri May 6 21:21:48 2011
@@ -33,6 +33,7 @@ import org.apache.james.protocols.api.Ex
import org.apache.james.protocols.api.HandlersPackage;
import org.apache.james.protocols.api.ProtocolHandlerChain;
import org.apache.james.protocols.api.WiringException;
+import org.apache.james.protocols.lib.ConfigurableProtocolHandlerchain;
import org.slf4j.Logger;
/**
@@ -43,7 +44,7 @@ import org.slf4j.Logger;
* TODO: Move this to test package as it is the only place where it get used
*/
@SuppressWarnings("unchecked")
-public class MockProtocolHandlerChain implements ProtocolHandlerChain, Configurable, LogEnabled {
+public class MockProtocolHandlerChain implements ConfigurableProtocolHandlerchain, Configurable, LogEnabled {
private Logger log;
private String coreHandlersPackage;
@@ -223,4 +224,9 @@ public class MockProtocolHandlerChain im
public void setLog(Logger log) {
this.log = log;
}
+
+ @Override
+ public void init(HierarchicalConfiguration config) throws ConfigurationException {
+
+ }
}
\ No newline at end of file
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=1100381&r1=1100380&r2=1100381&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 Fri May 6 21:21:48 2011
@@ -23,7 +23,7 @@ import javax.annotation.Resource;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.james.dnsservice.library.netmatcher.NetMatcher;
-import org.apache.james.protocols.api.ProtocolHandlerChain;
+import org.apache.james.protocols.lib.ConfigurableProtocolHandlerchain;
import org.apache.james.protocols.lib.netty.AbstractConfigurableAsyncServer;
import org.apache.james.protocols.smtp.SMTPConfiguration;
import org.jboss.netty.channel.ChannelUpstreamHandler;
@@ -39,7 +39,7 @@ public class SMTPServer extends Abstract
* Command handlers , Message handlers and connection handlers Constructed
* during initialisation to allow dependency injection.
*/
- private ProtocolHandlerChain handlerChain;
+ private ConfigurableProtocolHandlerchain handlerChain;
/**
* Whether authentication is required to use this SMTP server.
@@ -86,12 +86,27 @@ public class SMTPServer extends Abstract
private boolean verifyIdentity;
+ private HierarchicalConfiguration config;
+
@Resource(name = "smtphandlerchain")
- public void setProtocolHandlerChain(ProtocolHandlerChain handlerChain) {
+ public void setProtocolHandlerChain(ConfigurableProtocolHandlerchain handlerChain) {
this.handlerChain = handlerChain;
}
+ @Override
+ protected void preInit() throws Exception {
+ super.preInit();
+ HierarchicalConfiguration hconfig = config.configurationAt("handlerchain");
+ hconfig.addProperty("[@jmxName]", jmxName);
+
+ hconfig.addProperty("[@jmxHandlersPackage]", "org.apache.james.smtpserver.jmx.JMXHandlersLoader");
+ hconfig.addProperty("[@coreHandlersPackage]", "org.apache.james.smtpserver.CoreCmdHandlerLoader");
+ handlerChain.init(hconfig);
+ }
+
public void doConfigure(final HierarchicalConfiguration configuration) throws ConfigurationException {
+ this.config = configuration;
+
if (isEnabled()) {
String authRequiredString = configuration.getString("authRequired", "false").trim().toLowerCase();
if (authRequiredString.equals("true"))
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org