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/04 20:56:11 UTC

svn commit: r895758 - in /james/server/sandbox/active/pure_spring_deployment: avalon-user-function/src/main/java/org/apache/james/core/ core-api/src/main/java/org/apache/james/api/kernel/ core-function/src/main/java/org/apache/james/mailrepository/ nnt...

Author: norman
Date: Mon Jan  4 19:56:00 2010
New Revision: 895758

URL: http://svn.apache.org/viewvc?rev=895758&view=rev
Log:
AbstractJSR250LoaderService now supports PreDestroy annotation

Modified:
    james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java
    james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/AbstractJSR250LoaderService.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-function/src/main/java/org/apache/james/mailrepository/MailStore.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/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/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/JSR250LoaderService.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/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.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?rev=895758&r1=895757&r2=895758&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java Mon Jan  4 19:56:00 2010
@@ -89,8 +89,9 @@
             if (theClassLoader == null) {
                 theClassLoader = Thread.currentThread().getContextClassLoader();
             }         
-            Type object = (Type)theClassLoader.loadClass(repClass).newInstance();
-            loader.injectDependenciesWithLifecycle(object, getLogger(), repConf);
+            Class<Type> objectClass = (Class<Type>)theClassLoader.loadClass(repClass);
+            
+            Type object = loader.load(objectClass, getLogger(), repConf);
 
             if (getLogger().isDebugEnabled()) {
                 getLogger().debug("Load instance " + object);

Modified: james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/AbstractJSR250LoaderService.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/AbstractJSR250LoaderService.java?rev=895758&r1=895757&r2=895758&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/AbstractJSR250LoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/AbstractJSR250LoaderService.java Mon Jan  4 19:56:00 2010
@@ -20,8 +20,11 @@
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
 import javax.annotation.Resource;
 
 import org.apache.commons.configuration.ConfigurationException;
@@ -37,21 +40,66 @@
  */
 public abstract class AbstractJSR250LoaderService implements LoaderService{
 
-	 /*
-	 * (non-Javadoc)
-	 * @see org.apache.james.api.kernel.LoaderService#injectDependencies(java.lang.Object)
-	 */
-	public void injectDependencies(Object obj) {
+    private List<Object> loaderRegistry = new ArrayList<Object>();
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class)
+     */
+    public <T>T load(Class<T> type) {
+        return load(type, null, null);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class, org.apache.commons.logging.Log, org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public <T>T load(Class<T> type, Log logger, HierarchicalConfiguration config) {
         try {
+            T obj = type.newInstance();
+            if (obj instanceof LogEnabled && logger != null) {
+                ((LogEnabled) obj).setLog(logger);
+            }
+            if (obj instanceof Configurable && config != null) {
+                try {
+                ((Configurable) obj).configure(config);
+                } catch (ConfigurationException ex) {
+                    throw new RuntimeException("Unable to configure object " + obj, ex);
+                }
+            }
+            
             injectResources(obj);
             postConstruct(obj);
+            synchronized (this) {
+                loaderRegistry.add(obj);
+            }
+            return obj;
         } catch (IllegalAccessException e) {
-            throw new RuntimeException("Unable to handle dependency injection of object " + obj, e);
+            throw new RuntimeException("Unable to load instance of class " + type, e);
         } catch (InvocationTargetException e) {
-            throw new RuntimeException("Unable to handle dependency injection of object " + obj, e);
+            throw new RuntimeException("Unable to load instance of class " + type, e);
+        } catch (InstantiationException e) {
+            throw new RuntimeException("Unable to load instance of class " + type, e);
         }
+            
+    }
+    
+    /**
+     * Dispose all loaded instances by calling the method of the instances which is annotated
+     * with @PreDestroy
+     */
+    public synchronized void dispose() {
+        for (int i = 0; i < loaderRegistry.size(); i++) {
+            try {
+                preDestroy(loaderRegistry.get(i));
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                e.printStackTrace();
+            }
+        }
+        loaderRegistry.clear();
     }
-
 	   
     private void postConstruct(Object resource) throws IllegalAccessException,
             InvocationTargetException {
@@ -67,6 +115,19 @@
         }
     }
     
+    private void preDestroy(Object resource) throws IllegalAccessException, InvocationTargetException {
+        Method[] methods = resource.getClass().getMethods();
+        for (Method method : methods) {
+            PreDestroy preDestroyAnnotation = method.getAnnotation(PreDestroy.class);
+            if (preDestroyAnnotation != null) {
+                Object[] args = {};
+                method.invoke(resource, args);
+
+            }
+        }
+    }
+
+    
     private void injectResources(Object resource) {
         final Method[] methods = resource.getClass().getMethods();
         for (Method method : methods) {
@@ -98,24 +159,6 @@
         }
     }
 
-	/*
-	 * (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);
-	}
 	
 	/**
 	 * Return the Object which should be injected for given name

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -28,20 +28,26 @@
 public interface LoaderService {
 
     /**
-     * Inject dependencies to the given object using jsr250. Before the injection is done set the Log and config 
-     * to the object if the right LifeCycle methods are implement and Log / Config is not null
-     * 
-     * @param obj
-     * @param logger
-     * @param config
+     * Loads an instance of the given class.
+     * The load may elect to return a new instance
+     * and use the logger and config for the lifecycle.
+     * Instances should - where appropriate - have dependencies injected.
+     * @param <T> 
+     * @param type may be interface or concrete, not null
+     * @return an instance of the type
      */
-    public void injectDependenciesWithLifecycle(Object obj, Log logger, HierarchicalConfiguration config);
+
+    public <T>T load(Class<T> type, Log logger, HierarchicalConfiguration config);
     
     
     /**
-     * Inject dependencies to the given object using jsr250
-     * 
-     * @param obj
+     * Loads an instance of the given class.
+     * The load return a new instance
+     * Instances should - where appropriate - have dependencies injected.
+     * @param <T> 
+     * @param type may be interface or concrete, not null
+     * @return an instance of the type
      */
-    public void injectDependencies(Object obj);
+
+    public <T>T load(Class<T> type);
 }

Modified: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.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?rev=895758&r1=895757&r2=895758&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java Mon Jan  4 19:56:00 2010
@@ -28,7 +28,6 @@
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
 
-import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
 import org.apache.avalon.cornerstone.services.store.Store;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.commons.collections.map.ReferenceMap;
@@ -39,7 +38,6 @@
 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;
 
 /**
  * Provides a registry of mail repositories. A mail repository is uniquely
@@ -263,8 +261,8 @@
             }
 
             try {
-                reply = Thread.currentThread().getContextClassLoader().loadClass(repClass).newInstance();
-                loader.injectDependenciesWithLifecycle(reply, logger, config);
+                Class<?> replyClass = Thread.currentThread().getContextClassLoader().loadClass(repClass);
+                reply = loader.load(replyClass, logger, config);
 
                 repositories.put(repID, reply);
                 if (getLogger().isInfoEnabled()) {

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -24,7 +24,6 @@
 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;
@@ -141,8 +140,6 @@
 
     private Log logger;
 
-	private LoaderService loader;
-
     public void configure(HierarchicalConfiguration configuration) throws ConfigurationException{
         this.configuration = configuration;
         readOnly = configuration.getBoolean("readOnly", false);
@@ -186,11 +183,6 @@
     public void setLog(Log logger) {
         this.logger = logger;
     }
-
-    @Resource(name="org.apache.james.LoaderService")
-    public void setLoaderService(LoaderService loader) {
-    	this.loader = loader;
-    }
     
     /**
      * Setter for the FileSystem dependency
@@ -467,8 +459,11 @@
         }
         try {
             NNTPSpooler obj = (NNTPSpooler) Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+            obj.configure(spoolerConfiguration.configurationAt("configuration"));
             obj.setArticleIDRepository(articleIDRepo);
-            loader.injectDependenciesWithLifecycle(obj, logger, spoolerConfiguration.configurationAt("configuration"));
+            obj.setFileSystem(fileSystem);
+            obj.setLog(logger);
+            obj.init();
 
             return obj;
         } catch(ClassCastException cce) {

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -189,19 +189,14 @@
      * @throws Exception
      */
     private void prepareHandlerChain() throws Exception {
-    	handlerChain = new ProtocolHandlerChainImpl();
-                      
-        //set the logger
-        handlerChain.setLog(getLogger());
-        
         //read from the XML configuration and create and configure each of the handlers
         HierarchicalConfiguration handlerchainConfig = handlerConfiguration.configurationAt("handlerchain");
         if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
             handlerchainConfig.addProperty("[@coreHandlersPackage]", CoreCmdHandlerLoader.class.getName());
+        
+        handlerChain = getLoader().load(ProtocolHandlerChainImpl.class, getLogger(), handlerConfiguration);
         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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -43,9 +43,7 @@
         if (jamesConfiguration.getString("[@coreHandlersPackage]") == null)
             jamesConfiguration.addProperty("[@coreHandlersPackage]", getHandlersPackage().getName());
         
-        System.out.println("jamesConfiguration="+jamesConfiguration);
-    	handlerChain = new ProtocolHandlerChainImpl();
-        loader.injectDependenciesWithLifecycle(handlerChain, getLogger(), jamesConfiguration);
+    	handlerChain = loader.load(ProtocolHandlerChainImpl.class, 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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -128,8 +128,8 @@
             org.apache.commons.configuration.HierarchicalConfiguration config) throws Exception {
         final Class<?> handlerClass = classLoader.loadClass(className);
         
-        Object handler = handlerClass.newInstance();
-        loader.injectDependenciesWithLifecycle(handler, getLog(), config);
+       
+        Object handler =loader.load(handlerClass, getLog(), config);
 
         // if it is a commands handler add it to the map with key as command
         // name

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -90,17 +90,9 @@
         return logger;
     }
     protected Object load(String className) throws ClassNotFoundException {
-        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);			
-		}
+        Class<?> mClass = Thread.currentThread().getContextClassLoader().loadClass(className);
+        Object newInstance = loaderService.load(mClass);
+		return newInstance;
         
     }
 

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -142,8 +142,8 @@
         
         String processorClass = config.getString("processorClass","org.apache.james.transport.StateAwareProcessorList");
         try {
-            processorList = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();;
-            loaderService.injectDependenciesWithLifecycle(processorList, logger, config);
+             Class<MailProcessor> mClass = (Class<MailProcessor>) Thread.currentThread().getContextClassLoader().loadClass(processorClass);
+             processorList = loaderService.load(mClass, logger, config);
         } catch (Exception e1) {
             logger.error("Unable to instantiate spoolmanager processor: "+processorClass, e1);
             throw new ConfigurationException("Instantiation exception: "+processorClass, e1);

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -88,9 +88,9 @@
             String processorClass = processorConf.getString("[@class]","org.apache.james.transport.LinearProcessor");
 
             try {
-               
-                MailProcessor processor = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();
-                loader.injectDependenciesWithLifecycle(processor, logger, processorConf);
+                Class<MailProcessor> mClass = (Class<MailProcessor>)Thread.currentThread().getContextClassLoader().loadClass(processorClass);
+                 
+                MailProcessor processor = loader.load(mClass, logger, processorConf);
               
                 processors.put(processorName, processor);
                 

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -108,8 +108,7 @@
 	</bean>
 
 	<bean id="configurationProvider"
-		class="org.apache.james.container.spring.lifecycle.SpringConfigurationProvider"
-		init-method="init">
+		class="org.apache.james.container.spring.lifecycle.SpringConfigurationProvider">
 		<property name="configurationResource" value="classpath:james-config.xml" />
 	</bean>
 

Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/JSR250LoaderService.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/JSR250LoaderService.java?rev=895758&r1=895757&r2=895758&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/JSR250LoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/JSR250LoaderService.java Mon Jan  4 19:56:00 2010
@@ -23,6 +23,7 @@
 import org.apache.james.api.kernel.AbstractJSR250LoaderService;
 import org.apache.james.api.kernel.LoaderService;
 import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -35,26 +36,9 @@
  *
  */
 @SuppressWarnings("serial")
-public class JSR250LoaderService extends CommonAnnotationBeanPostProcessor implements LoaderService, ApplicationContextAware {
+public class JSR250LoaderService extends CommonAnnotationBeanPostProcessor implements LoaderService, ApplicationContextAware, DisposableBean {
 
 	private SpringJSR250LoaderService loader;
-	
-    /*
-	 * (non-Javadoc)
-	 * @see org.apache.james.api.kernel.LoaderService#injectDependencies(java.lang.Object)
-	 */
-	public void injectDependencies(Object obj) {
-        loader.injectDependencies(obj);
-    }
-
-	/*
-	 * (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) {
-		loader.injectDependenciesWithLifecycle(obj, logger, config);
-	}
 
 	/*
 	 * (non-Javadoc)
@@ -64,6 +48,32 @@
         loader = new SpringJSR250LoaderService(applicationContext);
     }
     
+
+    /*
+     * (non-Javadoc)
+     * @see org.springframework.beans.factory.DisposableBean#destroy()
+     */
+    public void destroy() throws Exception {
+        loader.dispose();
+    }
+  
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class, org.apache.commons.logging.Log, org.apache.commons.configuration.HierarchicalConfiguration)
+     */
+    public <T> T load(Class<T> type, Log logger, HierarchicalConfiguration config) {
+        return loader.load(type, logger, config);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class)
+     */
+    public <T> T load(Class<T> type) {
+        return loader.load(type);
+    }
+    
     private final class SpringJSR250LoaderService extends AbstractJSR250LoaderService {
 
     	private ApplicationContext context;
@@ -77,4 +87,5 @@
 		}
     	
     }
+
 }

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=895758&r1=895757&r2=895758&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 Mon Jan  4 19:56:00 2010
@@ -25,6 +25,7 @@
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.james.container.spring.AvalonConfigurationProvider;
 import org.apache.james.container.spring.ConfigurationProvider;
+import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ResourceLoaderAware;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
@@ -34,7 +35,7 @@
  * 
  *
  */
-public class SpringConfigurationProvider implements ConfigurationProvider, AvalonConfigurationProvider, ResourceLoaderAware{
+public class SpringConfigurationProvider implements ConfigurationProvider, AvalonConfigurationProvider, ResourceLoaderAware, InitializingBean{
 
 	private ResourceLoader loader;
 	private String configFile;
@@ -45,24 +46,6 @@
 		this.configFile = configFile;
 	}
 
-	public void init() {
-		Resource resource = loader.getResource(configFile);
-		if (!resource.exists()) {
-			throw new RuntimeException("could not locate configuration file "
-					+ configFile);
-		}
-		try {
-			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);
-		}
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.apache.james.container.spring.ConfigurationProvider#getConfigurationForComponent(java.lang.String)
@@ -90,4 +73,22 @@
 		return avalonConfig.getChild(name);
 	}
 
+    public void afterPropertiesSet() throws Exception {
+        Resource resource = loader.getResource(configFile);
+        if (!resource.exists()) {
+            throw new RuntimeException("could not locate configuration file "
+                    + configFile);
+        }
+        try {
+            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);
+        }
+    }
+
 }



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