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