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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to