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 2009/12/30 20:54:47 UTC
svn commit: r894701 - in /james/server/sandbox/active/pure_spring_deployment:
spoolmanager-function/src/main/java/org/apache/james/transport/
spring-deployment/src/main/config/james/
spring-deployment/src/main/java/org/apache/james/container/spring/ sp...
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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org