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