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

Reply via email to