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 2010/01/01 20:41:16 UTC

svn commit: r895059 - in /james/server/sandbox/active/pure_spring_deployment: avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/ avalon-user-function/src/main/java/org/apache/james/core/ avalon-user-function/src/mai...

Author: norman
Date: Fri Jan  1 19:41:14 2010
New Revision: 895059

URL: http://svn.apache.org/viewvc?rev=895059&view=rev
Log:
More work on getting pure-spring-deployment to work:
 * Refactor LoaderService to handle lifecycle stuff
 * Start to remove Guice

Added:
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java
      - copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java
      - copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java
      - copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java
      - copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java
Removed:
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractAvalonStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AvalonUsersStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AvalonVirtualUserTableStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/vut/AvalonJDBCVirtualUserTable.java
    james/server/sandbox/active/pure_spring_deployment/basic-user-function/src/main/java/org/apache/james/vut/AvalonXMLVirtualUserTable.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/AvalonMailStore.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/AvalonMailStoreSpoolRepository.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/FakeLoaderService.java
    james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/jamesuser/AvalonLocalJamesUsersRepository.java
    james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AbstractAvalonVirtualUserTable.java
    james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AvalonDefaultVirtualUserTable.java
    james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AvalonVirtualUserTableManagement.java
Modified:
    james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java
    james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java
    james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java
    james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java
    james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java
    james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java
    james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java
    james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java
    james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java
    james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java
    james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
    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/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
    james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.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/SpringLoaderService.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/LogEnabledBeanPostProcessor.java

Modified: james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java Fri Jan  1 19:41:14 2010
@@ -26,7 +26,12 @@
 
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
 import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.core.Ordered;
@@ -115,4 +120,23 @@
             throw new RuntimeException(e);
         } 
     }
+
+	public void injectDependencies(Object obj) {
+		injectResources(obj);
+	}
+
+	public void injectDependenciesWithLifecycle(Object obj, Log logger,
+			HierarchicalConfiguration config) {
+		if (obj instanceof LogEnabled) {
+			((LogEnabled) obj).setLog(logger);
+		}
+		if (obj instanceof Configurable) {
+			try {
+			((Configurable) obj).configure(config);
+			} catch (ConfigurationException ex) {
+				throw new RuntimeException("Unable to configure object " + obj, ex);
+			}
+		}
+		injectDependencies(obj);
+	}
 }

Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java Fri Jan  1 19:41:14 2010
@@ -28,27 +28,24 @@
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
 import org.apache.james.lifecycle.Configurable;
 import org.apache.james.lifecycle.LogEnabled;
-import org.guiceyfruit.jsr250.Jsr250Module;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
 
 /**
- * Abstract base class for Stores which use Guice to load stuff
+ * Abstract base class for Stores 
  *
  * @param <Type>
  */
-public abstract class AbstractGuiceStore<Type> implements LogEnabled, Configurable{
+public abstract class AbstractStore<Type> implements LogEnabled, Configurable{
 
     private HashMap<String,Type> objects;
     
     protected Log logger;
 
     protected HierarchicalConfiguration config;
+
+	private LoaderService loader;
     
     public void setLog(Log logger) {
         this.logger = logger;
@@ -61,6 +58,11 @@
     public void configure(HierarchicalConfiguration config) throws ConfigurationException{
         this.config = config;
     }   
+    
+    @Resource(name="org.apache.james.LoaderService")
+    public void setLoaderService(LoaderService loader) {
+    	this.loader = loader;
+    }
 
     /**
      * @see org.apache.avalon.framework.activity.Initializable#initialize()
@@ -86,16 +88,10 @@
             }
             if (theClassLoader == null) {
                 theClassLoader = Thread.currentThread().getContextClassLoader();
-            }            
-            Type object = (Type) Guice.createInjector(getModule(),new Jsr250Module(), new AbstractModule() {
+            }         
+            Type object = (Type)theClassLoader.loadClass(repClass).newInstance();
+            loader.injectDependenciesWithLifecycle(object, getLogger(), repConf);
 
-                @Override
-                protected void configure() {
-                    bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(repConf);
-                }
-                
-            }).getInstance(theClassLoader.loadClass(repClass));
-            
             if (getLogger().isDebugEnabled()) {
                 getLogger().debug("Load instance " + object);
             }
@@ -152,11 +148,4 @@
      */
     public abstract String getStoreName();
     
-    /**
-     * Return the Module to use for Injecting
-     * 
-     * @return module
-     */
-    protected abstract Module getModule();
-    
 }

Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java Fri Jan  1 19:41:14 2010
@@ -43,28 +43,9 @@
  * Provides a registry of user repositories.
  *
  */
-public class GuiceUsersStore
-    extends AbstractGuiceStore<UsersRepository>
+public class UsersStoreImpl
+    extends AbstractStore<UsersRepository>
     implements UsersStore {
-
-    private FileSystem fs;
-    private DataSourceSelector selector;
-    private Store store;
-
-    @Resource(name="filesystem")
-    public void setFileSystem(FileSystem fs) {
-        this.fs = fs;
-    }
-    
-    @Resource(name="database-connections")
-    public void setDataSourceSelector(DataSourceSelector selector) {
-        this.selector = selector;
-    }
-    
-    @Resource(name="mailstore")
-    public void setStore(Store store) {
-        this.store = store;
-    }
     
 
     /** 
@@ -98,29 +79,15 @@
      * @see org.apache.james.core.AbstractAvalonStore#getStoreName()
      */
     public String getStoreName() {
-        return "GuiceUsersStore";
+        return "UsersStoreImpl";
     }
 
     /**
-     * @see org.apache.james.core.AbstractGuiceStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
+     * @see org.apache.james.core.AbstractStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
      */
     @SuppressWarnings("unchecked")
     public List<HierarchicalConfiguration> getConfigurations(
             HierarchicalConfiguration config) {
         return config.configurationsAt("repository");
     }
-
-    @Override
-    protected Module getModule() {
-        return new AbstractModule() {
-            
-            @Override
-            protected void configure() {
-                bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
-                bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(selector);
-                bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
-                bind(Store.class).annotatedWith(Names.named("mailstore")).toInstance(store);
-            }
-        };
-    }
 }

Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java Fri Jan  1 19:41:14 2010
@@ -23,57 +23,19 @@
 
 import java.util.List;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-
-import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
 import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.james.api.dnsservice.DNSService;
 import org.apache.james.api.vut.VirtualUserTable;
 import org.apache.james.api.vut.VirtualUserTableStore;
-import org.apache.james.services.FileSystem;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
 
 /**
  * Provides a registry of VirtualUserTables
  *
  */
-public class GuiceVirtualUserTableStore
-    extends AbstractGuiceStore<VirtualUserTable>
+public class VirtualUserTableStoreImpl
+    extends AbstractStore<VirtualUserTable>
     implements VirtualUserTableStore {
 
-    private FileSystem fs;
-    private DNSService dns;
-    private DataSourceSelector selector;
-
 
-    // TODO: REMOVE ME!!
-    @PostConstruct
-    @Override
-    public void init() throws Exception {
-        super.init();
-    }
-
-    @Resource(name="database-connections")
-    public void setDataSourceSelector(DataSourceSelector selector) {
-        this.selector = selector;
-    }
-    
-    
-    @Resource(name="filesystem")
-    public void setFileSystem(FileSystem fs) {
-        this.fs = fs;
-    }
-    
-    @Resource(name="dnsserver")
-    public void setDNSService(DNSService dns) {
-        this.dns = dns;
-    }
-    
     /** 
      * Get the repository, if any, whose name corresponds to
      * the argument parameter
@@ -94,31 +56,16 @@
      * @see org.apache.james.core.AbstractAvalonStore#getStoreName()
      */
     public String getStoreName() {
-        return "AvalonVirtualUserTableStore";
+        return "VirtualUserTableStoreImpl";
     }
 
 
     /**
-     * @see org.apache.james.core.AbstractGuiceStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
+     * @see org.apache.james.core.AbstractStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
      */
     @SuppressWarnings("unchecked")
     public List<HierarchicalConfiguration> getConfigurations(
             HierarchicalConfiguration config) {
         return config.configurationsAt("table");
     }
-
-
-    @Override
-    protected Module getModule() {
-        return new AbstractModule() {
-            
-            @Override
-            protected void configure() {
-                bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
-                bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(selector);
-                bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
-                bind(DNSService.class).annotatedWith(Names.named("dnsserver")).toInstance(dns);
-            }
-        };
-    }
 }

Modified: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java Fri Jan  1 19:41:14 2010
@@ -233,6 +233,7 @@
      */
     @Resource(name="database-connections")
     void setDatasources(DataSourceSelector datasources) {
+    	System.out.println("database-connections" + datasources);
         m_datasources = datasources;
     }
     /**

Modified: james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java Fri Jan  1 19:41:14 2010
@@ -19,19 +19,21 @@
 
 package org.apache.james.api.kernel;
 
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
+
 /**
  * Loads instances of given types.
  */
 public interface LoaderService {
+
+    public void injectDependenciesWithLifecycle(Object obj, Log logger, HierarchicalConfiguration config);
+    
     
     /**
-     * Loads an instance of the given class.
-     * The load may elect to return a new instance
-     * or reuse an existing one, as appropriate for the type.
-     * Instances should - where appropriate - have dependencies injected.
-     * @param <T> 
-     * @param type may be interface or concrete, not null
-     * @return an instance of the type
+     * Inject dependencies to the given object using jsr250
+     * 
+     * @param obj
      */
-    public <T>T load(Class<T> type);
+    public void injectDependencies(Object obj);
 }

Modified: james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java Fri Jan  1 19:41:14 2010
@@ -24,10 +24,16 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
 import org.apache.avalon.framework.service.ServiceException;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
 import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
 
 public class FakeLoader implements LoaderService, org.apache.avalon.framework.service.ServiceManager{
 
@@ -68,7 +74,6 @@
     public Object get(String name) { 
         Object service = servicesByName.get(mapName(name));
         
-        System.out.println("KEYS="+servicesByName.keySet().toString());
         return service;
     }
     
@@ -77,7 +82,6 @@
         if(newName == null) {
             newName = name;
         }
-        System.out.println("NEW=" + newName);
         return newName;
     }
     private void injectResources(Object resource) {
@@ -110,16 +114,6 @@
             }
         }
     }
-    
-    public <T> T load(Class<T> type) {
-        try {
-            final T newInstance = type.newInstance();
-            injectResources(newInstance);
-            return newInstance;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
 
 
     public boolean hasService(String name) {
@@ -136,4 +130,45 @@
     public void put(String role, Object service) {
         servicesByName.put(role, service);
     }
+
+
+	public void injectDependencies(Object obj) {
+        injectResources(obj);	
+        try {
+        	postConstruct(obj);
+        } catch (Exception e) {
+        	throw new RuntimeException(e);
+        }
+	}
+
+
+	public void injectDependenciesWithLifecycle(Object obj, Log logger,
+			HierarchicalConfiguration config) {
+		if (obj instanceof LogEnabled) {
+			((LogEnabled)obj).setLog(logger);
+		}
+		if (obj instanceof Configurable) {
+			try {
+				((Configurable) obj).configure(config);
+			} catch (ConfigurationException e) {
+				e.printStackTrace();
+				throw new RuntimeException(e);
+			}		
+		}
+		injectDependencies(obj);
+	}
+	
+	private void postConstruct(Object resource) throws IllegalAccessException,
+			InvocationTargetException {
+		Method[] methods = resource.getClass().getMethods();
+		for (Method method : methods) {
+			PostConstruct postConstructAnnotation = method
+					.getAnnotation(PostConstruct.class);
+			if (postConstructAnnotation != null) {
+				Object[] args = {};
+				method.invoke(resource, args);
+
+			}
+		}
+	}
 }

Modified: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java Fri Jan  1 19:41:14 2010
@@ -139,6 +139,10 @@
 
     private FileSystem fileSystem;
 
+	private String filestore;
+
+	private String destination;
+
     @Resource(name="database-connections")
     public void setDatasources(DataSourceSelector datasources) {
         this.datasources = datasources;
@@ -155,7 +159,7 @@
         if (getLogger().isDebugEnabled()) {
             getLogger().debug(this.getClass().getName() + ".configure()");
         }
-        String destination = configuration.getString("[@destinationURL]");
+        destination = configuration.getString("[@destinationURL]");
 
         // normalize the destination, to simplify processing.
         if ( ! destination.endsWith("/") ) {
@@ -216,8 +220,30 @@
         
         inMemorySizeLimit = configuration.getInt("inMemorySizeLimit", 409600000); 
 
-        String filestore = configuration.getString("filestore", null);
+        filestore = configuration.getString("filestore", null);
         sqlFileName = configuration.getString("sqlFile");
+      
+        
+    }
+
+
+    /**
+     * Initialises the JDBC repository.
+     * 1) Tests the connection to the database.
+     * 2) Loads SQL strings from the SQL definition file,
+     *     choosing the appropriate SQL for this connection,
+     *     and performing paramter substitution,
+     * 3) Initialises the database with the required tables, if necessary.
+     *
+     * @throws Exception if an error occurs
+     */
+    @PostConstruct
+    public void init() throws Exception {        
+        StringBuffer logBuffer = null;
+        if (getLogger().isDebugEnabled()) {
+            getLogger().debug(this.getClass().getName() + ".initialize()");
+        }
+        
         try {
             if (filestore != null) {
                 
@@ -236,38 +262,18 @@
             }
 
             if (getLogger().isDebugEnabled()) {
-                StringBuffer logBuffer =
+                StringBuffer logBuf =
                     new StringBuffer(128)
                             .append(this.getClass().getName())
                             .append(" created according to ")
                             .append(destination);
-                getLogger().debug(logBuffer.toString());
+                getLogger().debug(logBuf.toString());
             }
         } catch (Exception e) {
             final String message = "Failed to retrieve Store component:" + e.getMessage();
             getLogger().error(message, e);
             throw new ConfigurationException(message, e);
         } 
-        
-    }
-
-
-    /**
-     * Initialises the JDBC repository.
-     * 1) Tests the connection to the database.
-     * 2) Loads SQL strings from the SQL definition file,
-     *     choosing the appropriate SQL for this connection,
-     *     and performing paramter substitution,
-     * 3) Initialises the database with the required tables, if necessary.
-     *
-     * @throws Exception if an error occurs
-     */
-    @PostConstruct
-    public void init() throws Exception {        
-        StringBuffer logBuffer = null;
-        if (getLogger().isDebugEnabled()) {
-            getLogger().debug(this.getClass().getName() + ".initialize()");
-        }
 
         theJDBCUtil =
             new JDBCUtil() {

Modified: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java Fri Jan  1 19:41:14 2010
@@ -32,8 +32,6 @@
 import java.sql.SQLException;
 import java.util.LinkedList;
 
-import javax.annotation.PostConstruct;
-
 /**
  * Implementation of a SpoolRepository on a database.
  *
@@ -119,12 +117,6 @@
         super.doConfigure(conf);
         maxPendingMessages = conf.getInt("config.maxcache",1000);
     }
-
-    @PostConstruct
-    public void init() throws Exception {
-        super.init();
-    }
-    
     
     /**
      * @see org.apache.james.services.SpoolRepository#accept()

Copied: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java (from r894642, james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java?p2=james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java&p1=james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java Fri Jan  1 19:41:14 2010
@@ -36,21 +36,17 @@
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
 import org.apache.james.lifecycle.Configurable;
 import org.apache.james.lifecycle.LogEnabled;
 import org.apache.james.services.FileSystem;
-import org.guiceyfruit.jsr250.Jsr250Module;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.name.Names;
 
 /**
  * Provides a registry of mail repositories. A mail repository is uniquely
  * identified by its destinationURL, type and model.
  *
  */
-public class GuiceMailStore
+public class MailStore
     implements Store, LogEnabled, Configurable {
 
     // Prefix for repository names
@@ -80,6 +76,8 @@
     private FileSystem fs;
 
     private DataSourceSelector datasources;
+
+	private LoaderService loader;
     
     @Resource(name="database-connections")
     public void setDatasources(DataSourceSelector datasources) {
@@ -109,6 +107,10 @@
         this.fs = fs;
     }
 
+    @Resource(name="org.apache.james.LoaderService")
+    public void setLoaderService(LoaderService loader) {
+    	this.loader = loader;
+    }
 
     @PostConstruct
     @SuppressWarnings("unchecked")
@@ -278,32 +280,8 @@
             }
 
             try {
-                Class<?> objectClass = Thread.currentThread().getContextClassLoader().loadClass(repClass);
-                reply = Guice.createInjector(new Jsr250Module(), new AbstractModule() {
-                        
-                    @Override
-                    protected void configure() {
-                        bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
-                        bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(config);
-                        bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
-                        bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(datasources);
-                        bind(Store.class).annotatedWith(Names.named("mailstore")).toInstance(new Store() {
-
-                            public Object select(Object arg0) throws ServiceException {
-                                return GuiceMailStore.this.select(arg0);
-                            }
-
-                            public boolean isSelectable(Object arg0) {
-                                return GuiceMailStore.this.isSelectable(arg0);                            
-                            }
-
-                            public void release(Object arg0) {
-                                GuiceMailStore.this.release(arg0);
-                            }
-                            
-                        });
-                    }
-                }).getInstance(objectClass);
+                reply = Thread.currentThread().getContextClassLoader().loadClass(repClass).newInstance();
+                loader.injectDependenciesWithLifecycle(reply, logger, config);
 
                 repositories.put(repID, reply);
                 if (getLogger().isInfoEnabled()) {
@@ -338,7 +316,7 @@
      * @return a new repository name
      */
     public static final String getName() {
-        synchronized (GuiceMailStore.class) {
+        synchronized (MailStore.class) {
             return REPOSITORY_NAME + id++;
         }
     }

Modified: james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java Fri Jan  1 19:41:14 2010
@@ -24,6 +24,7 @@
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
 import org.apache.james.lifecycle.Configurable;
 import org.apache.james.lifecycle.LogEnabled;
 import org.apache.james.nntpserver.DateSinceFileFilter;
@@ -32,11 +33,7 @@
 import org.apache.james.util.io.AndFileFilter;
 import org.apache.james.util.io.DirectoryFileFilter;
 import org.apache.oro.io.GlobFilenameFilter;
-import org.guiceyfruit.jsr250.Jsr250Module;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.name.Names;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -144,6 +141,8 @@
 
     private Log logger;
 
+	private LoaderService loader;
+
     public void configure(HierarchicalConfiguration configuration) throws ConfigurationException{
         this.configuration = configuration;
         readOnly = configuration.getBoolean("readOnly", false);
@@ -188,6 +187,11 @@
         this.logger = logger;
     }
 
+    @Resource(name="org.apache.james.LoaderService")
+    public void setLoaderService(LoaderService loader) {
+    	this.loader = loader;
+    }
+    
     /**
      * Setter for the FileSystem dependency
      * 
@@ -462,54 +466,11 @@
         	className = NNTPSpooler.class.getName();
         }
         try {
-            Class<?> myClass = Thread.currentThread().getContextClassLoader().loadClass(className);
-            Object obj = Guice.createInjector(new Jsr250Module(), new AbstractModule() {
-
-                @Override
-                protected void configure() {
-                    bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(spoolerConfiguration.configurationAt("configuration"));
-                    bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
-                    bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fileSystem);
-                    bind(ArticleIDRepository.class).annotatedWith(Names.named("org.apache.james.nntpserver.repository.ArticleIDRepository")).toInstance(articleIDRepo);
-                    bind(NNTPRepository.class).annotatedWith(Names.named("nntp-repository")).toInstance(new NNTPRepository() {
-
-                        public void createArticle(InputStream in) {
-                            NNTPRepositoryImpl.this.createArticle(in);
-                        }
-
-                        public NNTPArticle getArticleFromID(String id) {
-                            return NNTPRepositoryImpl.this.getArticleFromID(id);
-                        }
-
-                        public Iterator<NNTPArticle> getArticlesSince(Date dt) {
-                            return NNTPRepositoryImpl.this.getArticlesSince(dt);
-                        }
+            NNTPSpooler obj = (NNTPSpooler) Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+            obj.setArticleIDRepository(articleIDRepo);
+            loader.injectDependenciesWithLifecycle(obj, logger, spoolerConfiguration.configurationAt("configuration"));
 
-                        public NNTPGroup getGroup(String groupName) {
-                            return NNTPRepositoryImpl.this.getGroup(groupName);
-                        }
-
-                        public Iterator<NNTPGroup> getGroupsSince(Date dt) {
-                            return NNTPRepositoryImpl.this.getGroupsSince(dt);
-                        }
-
-                        public Iterator<NNTPGroup> getMatchedGroups(String wildmat) {
-                            return NNTPRepositoryImpl.this.getMatchedGroups(wildmat);
-                        }
-
-                        public String[] getOverviewFormat() {
-                            return NNTPRepositoryImpl.this.getOverviewFormat();
-                        }
-
-                        public boolean isReadOnly() {
-                            return NNTPRepositoryImpl.this.isReadOnly();
-                        }
-                        
-                    });
-                }
-                
-            }).getInstance(myClass);
-            return (NNTPSpooler)obj;
+            return obj;
         } catch(ClassCastException cce) {
             StringBuffer errorBuffer =
                 new StringBuffer(128)

Modified: james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java Fri Jan  1 19:41:14 2010
@@ -133,7 +133,6 @@
      *
      * @param articleIDRepo the article id repository to be used
      */
-    @Resource(name="org.apache.james.nntpserver.repository.ArticleIDRepository")
     void setArticleIDRepository(ArticleIDRepository idRepos) {
         this.idRepos = idRepos;
     }

Modified: james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java Fri Jan  1 19:41:14 2010
@@ -32,8 +32,12 @@
 import org.apache.avalon.phoenix.ApplicationEvent;
 import org.apache.avalon.phoenix.ApplicationListener;
 import org.apache.avalon.phoenix.BlockEvent;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
 import org.apache.james.api.kernel.LoaderService;
 import org.apache.james.bridge.GuiceInjected;
+import org.apache.james.lifecycle.Configurable;
 
 public class PhoenixLoader implements LoaderService, ApplicationListener, LogEnabled {
 
@@ -214,21 +218,24 @@
         this.logger = logger;
     }
 
-    public <T> T load(Class<T> type) {
-        try {
-            // TODO: Use Guice to load type
-            final T base = type.newInstance();
-            injectResources(base);
-            return base;
-        } catch (InstantiationException e) {
-            logger.warn("Cannot instantiate type", e);
-            throw new RuntimeException(e);
-        } catch (IllegalAccessException e) {
-            logger.warn("Cannot instantiate type", e);
-            throw new RuntimeException(e);
-        } catch (IllegalArgumentException e) {
-            logger.warn("Cannot instantiate type", e);
-            throw new RuntimeException(e);
+
+    public void injectDependencies(Object obj) {    
+        injectResources(obj);
+
+    }
+
+    public void injectDependenciesWithLifecycle(Object obj, Log logger,
+            HierarchicalConfiguration config) {
+        if (obj instanceof LogEnabled) {
+            ((org.apache.james.lifecycle.LogEnabled) obj).setLog(logger);
+        }
+        if (obj instanceof Configurable) {
+            try {
+            ((Configurable) obj).configure(config);
+            } catch (ConfigurationException ex) {
+                throw new RuntimeException("Unable to configure object " + obj, ex);
+            }
         }
+        injectDependencies(obj);        
     }
 }

Modified: james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java Fri Jan  1 19:41:14 2010
@@ -26,8 +26,13 @@
 
 import javax.annotation.Resource;
 
+import org.apache.avalon.framework.logger.LogEnabled;
 import org.apache.avalon.framework.service.ServiceException;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
 import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
 
 public class FakeLoader implements LoaderService, org.apache.avalon.framework.service.ServiceManager{
 
@@ -73,14 +78,26 @@
         }
     }
     
-    public <T> T load(Class<T> type) {
-        try {
-            final T newInstance = type.newInstance();
-            injectResources(newInstance);
-            return newInstance;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
+
+
+    public void injectDependencies(Object obj) {    
+        injectResources(obj);
+
+    }
+
+    public void injectDependenciesWithLifecycle(Object obj, Log logger,
+            HierarchicalConfiguration config) {
+        if (obj instanceof LogEnabled) {
+            ((org.apache.james.lifecycle.LogEnabled) obj).setLog(logger);
+        }
+        if (obj instanceof Configurable) {
+            try {
+            ((Configurable) obj).configure(config);
+            } catch (ConfigurationException ex) {
+                throw new RuntimeException("Unable to configure object " + obj, ex);
+            }
         }
+        injectDependencies(obj);        
     }
 
 

Modified: james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java Fri Jan  1 19:41:14 2010
@@ -189,7 +189,7 @@
      * @throws Exception
      */
     private void prepareHandlerChain() throws Exception {
-        handlerChain = getLoader().load(ProtocolHandlerChainImpl.class);
+    	handlerChain = new ProtocolHandlerChainImpl();
                       
         //set the logger
         handlerChain.setLog(getLogger());
@@ -199,6 +199,9 @@
         if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
             handlerchainConfig.addProperty("[@coreHandlersPackage]", CoreCmdHandlerLoader.class.getName());
         handlerChain.configure(handlerchainConfig);
+        
+        getLoader().injectDependencies(handlerChain);
+
     }
 
 

Modified: james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java Fri Jan  1 19:41:14 2010
@@ -37,17 +37,15 @@
     }
     
     private void prepareHandlerChain() throws Exception {
-
-        handlerChain = loader.load(ProtocolHandlerChainImpl.class);
-        
-        //set the logger
-        handlerChain.setLog(getLogger());
-        
+    	
         //read from the XML configuration and create and configure each of the handlers
         HierarchicalConfiguration jamesConfiguration = configuration.configurationAt("handler.handlerchain");
         if (jamesConfiguration.getString("[@coreHandlersPackage]") == null)
             jamesConfiguration.addProperty("[@coreHandlersPackage]", getHandlersPackage().getName());
-        handlerChain.configure(jamesConfiguration);
+        
+        System.out.println("jamesConfiguration="+jamesConfiguration);
+    	handlerChain = new ProtocolHandlerChainImpl();
+        loader.injectDependenciesWithLifecycle(handlerChain, getLogger(), jamesConfiguration);
     }
 
     @Override

Modified: james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java Fri Jan  1 19:41:14 2010
@@ -24,6 +24,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
 import org.apache.commons.configuration.ConfigurationException;
@@ -126,18 +127,10 @@
     protected void loadClass(ClassLoader classLoader, String className,
             org.apache.commons.configuration.HierarchicalConfiguration config) throws Exception {
         final Class<?> handlerClass = classLoader.loadClass(className);
-        Object handler = loader.load(handlerClass);
-
-        // enable logging
-        if (handler instanceof LogEnabled) {
-            ((LogEnabled) handler).setLog(getLog());
-        }
-
-        // configure the handler
-        if (handler instanceof org.apache.james.lifecycle.Configurable) {
-            org.apache.james.lifecycle.Configurable configurableHandler = (org.apache.james.lifecycle.Configurable) handler;
-            configurableHandler.configure(config);
-        }
+        
+        Object handler = handlerClass.newInstance();
+        System.out.println("LOADER=" + loader);
+        loader.injectDependenciesWithLifecycle(handler, getLog(), config);
 
         // if it is a commands handler add it to the map with key as command
         // name
@@ -238,12 +231,12 @@
      */
     public void configure(HierarchicalConfiguration commonsConf) throws ConfigurationException {
         this.commonsConf =  commonsConf;
-        try {
-            loadHandlers();
-            wireExtensibleHandlers();
-        } catch (Exception e) {
-            throw new ConfigurationException(e.getMessage(), e);
-        }    
+    }
+    
+    @PostConstruct
+    public void init() throws Exception {
+         loadHandlers();
+         wireExtensibleHandlers();
     }
     
 }

Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java Fri Jan  1 19:41:14 2010
@@ -90,8 +90,18 @@
         return logger;
     }
     protected Object load(String className) throws ClassNotFoundException {
-        final Object newInstance = loaderService.load(Thread.currentThread().getContextClassLoader().loadClass(className));
-        return newInstance;
+        Object newInstance;
+		try {
+			newInstance = Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+			loaderService.injectDependencies(newInstance);
+	        return newInstance;
+		} catch (IllegalAccessException e) {
+			throw new RuntimeException("Unable to load class " + className, e);			
+
+		} catch (InstantiationException e) {
+			throw new RuntimeException("Unable to load class " + className, e);			
+		}
+        
     }
 
     @SuppressWarnings("unchecked")

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=895059&r1=895058&r2=895059&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 Fri Jan  1 19:41:14 2010
@@ -142,15 +142,13 @@
         
         String processorClass = config.getString("processorClass","org.apache.james.transport.StateAwareProcessorList");
         try {
-            Class<?> cObj = Thread.currentThread().getContextClassLoader().loadClass(processorClass);
-            processorList = (MailProcessor) loaderService.load(cObj);
+            processorList = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();;
+            loaderService.injectDependencies(processorList);
         } catch (Exception e1) {
             logger.error("Unable to instantiate spoolmanager processor: "+processorClass, e1);
             throw new ConfigurationException("Instantiation exception: "+processorClass, e1);
         }
         
-        ContainerUtil.initialize(processorList);
-
         if (logger.isInfoEnabled()) {
             StringBuffer infoBuffer =
                 new StringBuffer(64)

Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java Fri Jan  1 19:41:14 2010
@@ -22,7 +22,16 @@
 package org.apache.james.transport;
 
 
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.mail.MessagingException;
+
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.james.lifecycle.Configurable;
@@ -36,16 +45,6 @@
 import com.google.inject.Guice;
 import com.google.inject.name.Names;
 
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.annotation.Resource;
-import javax.mail.MessagingException;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
 /**
  * This class is responsible for creating a set of named processors and
  * directing messages to the appropriate processor (given the State of the mail)

Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java Fri Jan  1 19:41:14 2010
@@ -25,6 +25,7 @@
 import org.apache.avalon.framework.configuration.DefaultConfiguration;
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.api.kernel.mock.FakeLoader;
 import org.apache.james.test.util.Util;
 import org.apache.james.transport.mailets.MailetLoaderTestMailet;
 import org.apache.james.util.ConfigurationAdapter;
@@ -69,7 +70,7 @@
         m_conf.init();
         m_jamesMailetLoader.setLog(new SimpleLog("Test"));
         m_jamesMailetLoader.configure(new ConfigurationAdapter(m_conf));
-        m_jamesMailetLoader.setLoaderService(new FakeLoaderService());
+        m_jamesMailetLoader.setLoaderService(new FakeLoader());
     }
 
     private void assetIsNullMailet(Mailet mailet) {

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=895059&r1=895058&r2=895059&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 Fri Jan  1 19:41:14 2010
@@ -163,7 +163,7 @@
 	<bean id="logProvider" class="org.apache.james.container.spring.lifecycle.SpringLogProvider" />
 	
 
-	<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" >
+	<bean id="jsr250" class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" >
 		<property name="order" value="3" />	
 	</bean>
 
@@ -221,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.GuiceMailStore" />
+	<bean id="mailstore" class="org.apache.james.mailrepository.MailStore" />
 
 	<!-- 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.GuiceUsersStore" />
+	<bean id="users-store" class="org.apache.james.core.UsersStoreImpl" />
 
 	<!--
 		This is needed to link the smtpserver to the local user repository
@@ -255,7 +255,7 @@
 	<bean id="virtualusertablemanagement" class="org.apache.james.impl.vut.VirtualUserTableManagement" />
 
 	<!-- VirtualUserTable Store -->
-	<bean id="virtualusertable-store" class="org.apache.james.core.GuiceVirtualUserTableStore" />
+	<bean id="virtualusertable-store" class="org.apache.james.core.VirtualUserTableStoreImpl" />
 
 
 	<bean id="defaultvirtualusertable" class="org.apache.james.impl.vut.DefaultVirtualUserTable" />

Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java Fri Jan  1 19:41:14 2010
@@ -18,11 +18,15 @@
  ****************************************************************/
 package org.apache.james.container.spring;
 
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
 import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -37,22 +41,6 @@
 
 	private ConfigurableApplicationContext context;
 	
-	
-	/*
-	 * (non-Javadoc)
-	 * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class)
-	 */
-	public <T> T load(Class<T> type) {
-		String beanName = type.getName();
-		
-		// Check if we have a bean with the name already registered if not register it
-		if (context.containsBean(beanName) == false) {
-			DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
-			beanFactory.registerBeanDefinition(beanName, BeanDefinitionBuilder.rootBeanDefinition(type).getBeanDefinition());
-		}
-		return (T) context.getBean(beanName);
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
@@ -65,4 +53,31 @@
 			throw new FatalBeanException("Application needs to be a instance of ConfigurableApplicationContext");
 		}
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.james.api.kernel.LoaderService#injectDependencies(java.lang.Object)
+	 */
+	public void injectDependencies(Object obj) {
+		((BeanPostProcessor) context.getBean("jsr250")).postProcessAfterInitialization(obj, obj.getClass().getName());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.james.api.kernel.LoaderService#injectDependenciesWithLifecycle(java.lang.Object, org.apache.commons.logging.Log, org.apache.commons.configuration.HierarchicalConfiguration)
+	 */
+	public void injectDependenciesWithLifecycle(Object obj, Log logger,
+			HierarchicalConfiguration config) {
+		if (obj instanceof LogEnabled) {
+			((LogEnabled) obj).setLog(logger);
+		}
+		if (obj instanceof Configurable) {
+			try {
+			((Configurable) obj).configure(config);
+			} catch (ConfigurationException ex) {
+				throw new RuntimeException("Unable to configure object " + obj, ex);
+			}
+		}
+		injectDependencies(obj);
+	}
 }

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=895059&r1=895058&r2=895059&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 Fri Jan  1 19:41:14 2010
@@ -18,11 +18,8 @@
  ****************************************************************/
 package org.apache.james.container.spring.lifecycle;
 
-import java.io.ByteArrayInputStream;
-
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
-
 import org.apache.james.container.spring.AvalonConfigurationProvider;
 
 /**

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=895059&r1=895058&r2=895059&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 Fri Jan  1 19:41:14 2010
@@ -33,7 +33,6 @@
 	@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));
 	}
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org