Author: norman Date: Wed Dec 30 19:54:46 2009 New Revision: 894701 URL: http://svn.apache.org/viewvc?rev=894701&view=rev Log: * Implement PriorityOrdered in BeanPostProcessors because we need to hook in before CommonAnnotationBeanPostProcessor * Correctly handle Avalon Configurable * Provide mapping for ThreadManager for DefaultScheduler via ServiceManager
Added: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/AvalonConfigurationProvider.java Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifeCycleBeanPostProcessor.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonLogEnabledBeanPostProcessor.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java Wed Dec 30 19:54:46 2009 @@ -130,7 +130,16 @@ public void configure(HierarchicalConfiguration config) throws ConfigurationException { numThreads = config.getInt("threads",1); + this.config = config; + } + /** + * Initialises the spool manager. + */ + @PostConstruct + public void init() throws Exception { + logger.info("JamesSpoolManager init..."); + String processorClass = config.getString("processorClass","org.apache.james.transport.StateAwareProcessorList"); try { Class<?> cObj = Thread.currentThread().getContextClassLoader().loadClass(processorClass); @@ -139,15 +148,7 @@ logger.error("Unable to instantiate spoolmanager processor: "+processorClass, e1); throw new ConfigurationException("Instantiation exception: "+processorClass, e1); } - - } - - /** - * Initialises the spool manager. - */ - @PostConstruct - public void init() throws Exception { - logger.info("JamesSpoolManager init..."); + ContainerUtil.initialize(processorList); if (logger.isInfoEnabled()) { Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml Wed Dec 30 19:54:46 2009 @@ -115,50 +115,62 @@ - <bean - class="org.apache.james.container.spring.lifecycle.AvalonServiceableBeanPostProcessor"> + <bean class="org.apache.james.container.spring.lifecycle.AvalonServiceableBeanPostProcessor"> + <property name="order" value="2" /> + <property name="beanRoleMap"> + <map> + <entry> + <key> + <value>org.apache.avalon.cornerstone.services.threads.ThreadManager</value> + </key> + <value>thread-manager</value> + </entry> + </map> + </property> </bean> - <bean - class="org.apache.james.container.spring.lifecycle.AvalonInitializableBeanPostProcessor"> + <bean class="org.apache.james.container.spring.lifecycle.AvalonInitializableBeanPostProcessor"> + <property name="order" value="4" /> </bean> - <bean - class="org.apache.james.container.spring.lifecycle.AvalonConfigurableBeanPostProcessor"> + <bean class="org.apache.james.container.spring.lifecycle.AvalonConfigurableBeanPostProcessor"> <property name="configurationProvider" ref="configurationProvider" /> + <property name="order" value="1" /> </bean> <bean class="org.apache.james.container.spring.lifecycle.CommonsConfigurableBeanPostProcessor"> <property name="configurationProvider" ref="configurationProvider" /> + <property name="order" value="1" /> </bean> - <bean id="configurationProvider" - class="org.apache.james.container.spring.lifecycle.SpringConfigurationProvider" - init-method="init"> + <bean id="configurationProvider" class="org.apache.james.container.spring.lifecycle.SpringConfigurationProvider" init-method="init"> <property name="configurationResource" value="classpath:james-config.xml" /> </bean> <bean class="org.apache.james.container.spring.lifecycle.LogEnabledBeanPostProcessor"> <property name="logProvider" ref="logProvider" /> + <property name="order" value="0" /> </bean> <bean class="org.apache.james.container.spring.lifecycle.AvalonLogEnabledBeanPostProcessor"> <property name="logProvider" ref="logProvider" /> + <property name="order" value="0" /> </bean> - <bean id="logProvider" - class="org.apache.james.container.spring.lifecycle.SpringLogProvider" /> + <bean id="logProvider" class="org.apache.james.container.spring.lifecycle.SpringLogProvider" /> + - <bean - class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /> + <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" > + <property name="order" value="3" /> + </bean> <bean id="James" class="org.apache.james.James" /> <!-- The James Spool Manager block --> - <bean id="spoolmanager" class="org.apache.james.transport.AvalonJamesSpoolManager" /> + <bean id="spoolmanager" class="org.apache.james.transport.JamesSpoolManager" /> <bean id="matcherpackages" class="org.apache.james.transport.JamesMatcherLoader" /> @@ -209,14 +221,14 @@ <bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler" /> <!-- The High Level Storage block --> - <bean id="mailstore" class="org.apache.james.mailrepository.MailStore" /> + <bean id="mailstore" class="org.apache.james.mailrepository.GuiceMailStore" /> <!-- The main SpoolRepository --> <bean id="spoolrepository" class="org.apache.james.mailrepository.MailStoreSpoolRepository" /> <!-- The User Storage block --> - <bean id="users-store" class="org.apache.james.core.UsersStore" /> + <bean id="users-store" class="org.apache.james.core.GuiceUsersStore" /> <!-- This is needed to link the smtpserver to the local user repository @@ -243,21 +255,21 @@ <bean id="virtualusertablemanagement" class="org.apache.james.impl.vut.VirtualUserTableManagement" /> <!-- VirtualUserTable Store --> - <bean id="virtualusertable-store" class="org.apache.james.core.VirtualUserTableStore" /> + <bean id="virtualusertable-store" class="org.apache.james.core.GuiceVirtualUserTableStore" /> - <bean id="defaultvirtualusertable" class="org.apache.james.impl.vut.AvalonDefaultVirtualUserTable" /> + <bean id="defaultvirtualusertable" class="org.apache.james.impl.vut.DefaultVirtualUserTable" /> <!-- ######################################################################## --> <!-- The context domainlist implementation --> - <bean id="domainlist" class="org.apache.james.domain.AvalonXMLDomainList" /> + <bean id="domainlist" class="org.apache.james.domain.XMLDomainList" /> <!-- JDBC implementation of the domainlist service--> <!-- <bean id="domainlist" - class="org.apache.james.domain.AvalonJDBCDomainList" /> + class="org.apache.james.domain.JDBCDomainList" /> --> <!-- JDBC VirtualUserTable implementation of the domainlist service --> @@ -269,7 +281,7 @@ <!-- XML VirtualUserTable implementation of the domainlist service --> <!-- <bean id="domainlist" - class="org.apache.james.vut.AvalonXMLVirtualUserTable" /> + class="org.apache.james.vut.XMLVirtualUserTable" /> --> <!-- IMAP server --> Added: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/AvalonConfigurationProvider.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/AvalonConfigurationProvider.java?rev=894701&view=auto ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/AvalonConfigurationProvider.java (added) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/AvalonConfigurationProvider.java Wed Dec 30 19:54:46 2009 @@ -0,0 +1,10 @@ +package org.apache.james.container.spring; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; + + +public interface AvalonConfigurationProvider { + + public Configuration getAvalonConfigurationForComponent(String name) throws ConfigurationException; +} Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifeCycleBeanPostProcessor.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifeCycleBeanPostProcessor.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifeCycleBeanPostProcessor.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifeCycleBeanPostProcessor.java Wed Dec 30 19:54:46 2009 @@ -25,6 +25,7 @@ import org.springframework.beans.FatalBeanException; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.Ordered; +import org.springframework.core.PriorityOrdered; /** * Abstract base class which BeanPostProcessors should extend if they provide an LifeCycle handling @@ -32,9 +33,10 @@ * * @param <T> */ -public abstract class AbstractLifeCycleBeanPostProcessor<T> implements BeanPostProcessor, Ordered{ +public abstract class AbstractLifeCycleBeanPostProcessor<T> implements BeanPostProcessor, PriorityOrdered{ private Map<String, String> mappings = new HashMap<String, String>(); + private int order = Ordered.HIGHEST_PRECEDENCE; public void setMappings(Map<String,String> mappings) { this.mappings = mappings; @@ -109,4 +111,17 @@ return newname; } + + public void setOrder(int order) { + this.order = order; + } + + /* + * (non-Javadoc) + * @see org.springframework.core.Ordered#getOrder() + */ + public int getOrder() { + return order; + } + } Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java Wed Dec 30 19:54:46 2009 @@ -22,10 +22,8 @@ import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; -import org.apache.commons.configuration.ConfigurationUtils; -import org.apache.commons.configuration.HierarchicalConfiguration; -import org.apache.james.container.spring.ConfigurationProvider; + +import org.apache.james.container.spring.AvalonConfigurationProvider; /** * Inject Avalon Configuration to beans which implement Configurable @@ -33,15 +31,12 @@ */ public class AvalonConfigurableBeanPostProcessor extends AbstractLifeCycleBeanPostProcessor<Configurable>{ - private ConfigurationProvider provider; + private AvalonConfigurationProvider provider; @Override protected void executeLifecycleMethodBeforeInit(Configurable bean, String beanname, String lifecyclename) throws Exception { - HierarchicalConfiguration config = provider.getConfigurationForComponent(lifecyclename); - DefaultConfigurationBuilder confBuilder = new DefaultConfigurationBuilder(); - - Configuration avalonConf = confBuilder.build(new ByteArrayInputStream(ConfigurationUtils.toString(config).getBytes())); + Configuration avalonConf = provider.getAvalonConfigurationForComponent(lifecyclename); bean.configure(avalonConf); } @@ -49,12 +44,9 @@ protected Class<Configurable> getLifeCycleInterface() { return Configurable.class; } - - public int getOrder() { - return 2; - } - - public void setConfigurationProvider(ConfigurationProvider provider) { + + public void setConfigurationProvider(AvalonConfigurationProvider provider) { this.provider = provider; } + } Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonLogEnabledBeanPostProcessor.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonLogEnabledBeanPostProcessor.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonLogEnabledBeanPostProcessor.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonLogEnabledBeanPostProcessor.java Wed Dec 30 19:54:46 2009 @@ -42,9 +42,6 @@ return LogEnabled.class; } - public int getOrder() { - return 1; - } public void setLogProvider(LogProvider provider) { this.provider = provider; Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java Wed Dec 30 19:54:46 2009 @@ -39,14 +39,6 @@ bean.configure(beanConfig); } - /* - * (non-Javadoc) - * - * @see org.springframework.core.Ordered#getOrder() - */ - public int getOrder() { - return 2; - } public void setConfigurationProvider(ConfigurationProvider provider) { Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java Wed Dec 30 19:54:46 2009 @@ -33,17 +33,10 @@ @Override protected void executeLifecycleMethodBeforeInit(LogEnabled bean, String beanname, String lifecyclename) throws Exception { + System.out.println("comp=" + lifecyclename + " log=" + provider.getLogForComponent(lifecyclename)); bean.setLog(provider.getLogForComponent(lifecyclename)); } - /* - * (non-Javadoc) - * @see org.springframework.core.Ordered#getOrder() - */ - public int getOrder() { - return 1; - } - @Override protected Class<LogEnabled> getLifeCycleInterface() { return LogEnabled.class; Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java?rev=894701&r1=894700&r2=894701&view=diff ============================================================================== --- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java (original) +++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java Wed Dec 30 19:54:46 2009 @@ -18,9 +18,12 @@ ****************************************************************/ package org.apache.james.container.spring.lifecycle; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.XMLConfiguration; +import org.apache.james.container.spring.AvalonConfigurationProvider; import org.apache.james.container.spring.ConfigurationProvider; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.Resource; @@ -31,12 +34,13 @@ * * */ -public class SpringConfigurationProvider implements ConfigurationProvider, ResourceLoaderAware{ +public class SpringConfigurationProvider implements ConfigurationProvider, AvalonConfigurationProvider, ResourceLoaderAware{ private ResourceLoader loader; private String configFile; private XMLConfiguration config; - + private Configuration avalonConfig; + public void setConfigurationResource(String configFile) { this.configFile = configFile; } @@ -51,6 +55,8 @@ config = new XMLConfiguration(); config.setDelimiterParsingDisabled(true); config.load(resource.getFile()); + + avalonConfig = new DefaultConfigurationBuilder().buildFromFile(resource.getFile()); } catch (Exception e1) { throw new RuntimeException("could not open configuration file " + configFile, e1); @@ -75,4 +81,13 @@ this.loader = loader; } + /* + * (non-Javadoc) + * @see org.apache.james.container.spring.AvalonConfigurationProvider#getAvalonConfigurationForComponent(java.lang.String) + */ + public Configuration getAvalonConfigurationForComponent(String name) + throws org.apache.avalon.framework.configuration.ConfigurationException { + return avalonConfig.getChild(name); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org