You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/01/01 20:41:16 UTC
svn commit: r895059 - in /james/server/sandbox/active/pure_spring_deployment:
avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/
avalon-user-function/src/main/java/org/apache/james/core/
avalon-user-function/src/mai...
Author: norman
Date: Fri Jan 1 19:41:14 2010
New Revision: 895059
URL: http://svn.apache.org/viewvc?rev=895059&view=rev
Log:
More work on getting pure-spring-deployment to work:
* Refactor LoaderService to handle lifecycle stuff
* Start to remove Guice
Added:
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java
- copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java
- copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java
- copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java
- copied, changed from r894642, james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java
Removed:
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractAvalonStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AvalonUsersStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AvalonVirtualUserTableStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/vut/AvalonJDBCVirtualUserTable.java
james/server/sandbox/active/pure_spring_deployment/basic-user-function/src/main/java/org/apache/james/vut/AvalonXMLVirtualUserTable.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/AvalonMailStore.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/AvalonMailStoreSpoolRepository.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/FakeLoaderService.java
james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/jamesuser/AvalonLocalJamesUsersRepository.java
james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AbstractAvalonVirtualUserTable.java
james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AvalonDefaultVirtualUserTable.java
james/server/sandbox/active/pure_spring_deployment/user-library/src/main/java/org/apache/james/impl/vut/AvalonVirtualUserTableManagement.java
Modified:
james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java
james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java
james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java
james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java
james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java
james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java
james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java
james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java
james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java
james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java
james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java
james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml
james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java
james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java
james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
Modified: james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/lifecycle/InitializationPropagator.java Fri Jan 1 19:41:14 2010
@@ -26,7 +26,12 @@
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
@@ -115,4 +120,23 @@
throw new RuntimeException(e);
}
}
+
+ public void injectDependencies(Object obj) {
+ injectResources(obj);
+ }
+
+ public void injectDependenciesWithLifecycle(Object obj, Log logger,
+ HierarchicalConfiguration config) {
+ if (obj instanceof LogEnabled) {
+ ((LogEnabled) obj).setLog(logger);
+ }
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException ex) {
+ throw new RuntimeException("Unable to configure object " + obj, ex);
+ }
+ }
+ injectDependencies(obj);
+ }
}
Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractGuiceStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/AbstractStore.java Fri Jan 1 19:41:14 2010
@@ -28,27 +28,24 @@
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
import org.apache.james.lifecycle.Configurable;
import org.apache.james.lifecycle.LogEnabled;
-import org.guiceyfruit.jsr250.Jsr250Module;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
/**
- * Abstract base class for Stores which use Guice to load stuff
+ * Abstract base class for Stores
*
* @param <Type>
*/
-public abstract class AbstractGuiceStore<Type> implements LogEnabled, Configurable{
+public abstract class AbstractStore<Type> implements LogEnabled, Configurable{
private HashMap<String,Type> objects;
protected Log logger;
protected HierarchicalConfiguration config;
+
+ private LoaderService loader;
public void setLog(Log logger) {
this.logger = logger;
@@ -61,6 +58,11 @@
public void configure(HierarchicalConfiguration config) throws ConfigurationException{
this.config = config;
}
+
+ @Resource(name="org.apache.james.LoaderService")
+ public void setLoaderService(LoaderService loader) {
+ this.loader = loader;
+ }
/**
* @see org.apache.avalon.framework.activity.Initializable#initialize()
@@ -86,16 +88,10 @@
}
if (theClassLoader == null) {
theClassLoader = Thread.currentThread().getContextClassLoader();
- }
- Type object = (Type) Guice.createInjector(getModule(),new Jsr250Module(), new AbstractModule() {
+ }
+ Type object = (Type)theClassLoader.loadClass(repClass).newInstance();
+ loader.injectDependenciesWithLifecycle(object, getLogger(), repConf);
- @Override
- protected void configure() {
- bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(repConf);
- }
-
- }).getInstance(theClassLoader.loadClass(repClass));
-
if (getLogger().isDebugEnabled()) {
getLogger().debug("Load instance " + object);
}
@@ -152,11 +148,4 @@
*/
public abstract String getStoreName();
- /**
- * Return the Module to use for Injecting
- *
- * @return module
- */
- protected abstract Module getModule();
-
}
Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceUsersStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/UsersStoreImpl.java Fri Jan 1 19:41:14 2010
@@ -43,28 +43,9 @@
* Provides a registry of user repositories.
*
*/
-public class GuiceUsersStore
- extends AbstractGuiceStore<UsersRepository>
+public class UsersStoreImpl
+ extends AbstractStore<UsersRepository>
implements UsersStore {
-
- private FileSystem fs;
- private DataSourceSelector selector;
- private Store store;
-
- @Resource(name="filesystem")
- public void setFileSystem(FileSystem fs) {
- this.fs = fs;
- }
-
- @Resource(name="database-connections")
- public void setDataSourceSelector(DataSourceSelector selector) {
- this.selector = selector;
- }
-
- @Resource(name="mailstore")
- public void setStore(Store store) {
- this.store = store;
- }
/**
@@ -98,29 +79,15 @@
* @see org.apache.james.core.AbstractAvalonStore#getStoreName()
*/
public String getStoreName() {
- return "GuiceUsersStore";
+ return "UsersStoreImpl";
}
/**
- * @see org.apache.james.core.AbstractGuiceStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
+ * @see org.apache.james.core.AbstractStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
*/
@SuppressWarnings("unchecked")
public List<HierarchicalConfiguration> getConfigurations(
HierarchicalConfiguration config) {
return config.configurationsAt("repository");
}
-
- @Override
- protected Module getModule() {
- return new AbstractModule() {
-
- @Override
- protected void configure() {
- bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
- bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(selector);
- bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
- bind(Store.class).annotatedWith(Names.named("mailstore")).toInstance(store);
- }
- };
- }
}
Copied: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java (from r894642, james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java?p2=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java&p1=james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/GuiceVirtualUserTableStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/core/VirtualUserTableStoreImpl.java Fri Jan 1 19:41:14 2010
@@ -23,57 +23,19 @@
import java.util.List;
-import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-
-import org.apache.avalon.cornerstone.services.datasources.DataSourceSelector;
import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.james.api.dnsservice.DNSService;
import org.apache.james.api.vut.VirtualUserTable;
import org.apache.james.api.vut.VirtualUserTableStore;
-import org.apache.james.services.FileSystem;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
-import com.google.inject.name.Names;
/**
* Provides a registry of VirtualUserTables
*
*/
-public class GuiceVirtualUserTableStore
- extends AbstractGuiceStore<VirtualUserTable>
+public class VirtualUserTableStoreImpl
+ extends AbstractStore<VirtualUserTable>
implements VirtualUserTableStore {
- private FileSystem fs;
- private DNSService dns;
- private DataSourceSelector selector;
-
- // TODO: REMOVE ME!!
- @PostConstruct
- @Override
- public void init() throws Exception {
- super.init();
- }
-
- @Resource(name="database-connections")
- public void setDataSourceSelector(DataSourceSelector selector) {
- this.selector = selector;
- }
-
-
- @Resource(name="filesystem")
- public void setFileSystem(FileSystem fs) {
- this.fs = fs;
- }
-
- @Resource(name="dnsserver")
- public void setDNSService(DNSService dns) {
- this.dns = dns;
- }
-
/**
* Get the repository, if any, whose name corresponds to
* the argument parameter
@@ -94,31 +56,16 @@
* @see org.apache.james.core.AbstractAvalonStore#getStoreName()
*/
public String getStoreName() {
- return "AvalonVirtualUserTableStore";
+ return "VirtualUserTableStoreImpl";
}
/**
- * @see org.apache.james.core.AbstractGuiceStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
+ * @see org.apache.james.core.AbstractStore#getConfigurations(org.apache.commons.configuration.HierarchicalConfiguration)
*/
@SuppressWarnings("unchecked")
public List<HierarchicalConfiguration> getConfigurations(
HierarchicalConfiguration config) {
return config.configurationsAt("table");
}
-
-
- @Override
- protected Module getModule() {
- return new AbstractModule() {
-
- @Override
- protected void configure() {
- bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
- bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(selector);
- bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
- bind(DNSService.class).annotatedWith(Names.named("dnsserver")).toInstance(dns);
- }
- };
- }
}
Modified: james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/avalon-user-function/src/main/java/org/apache/james/userrepository/AbstractJdbcUsersRepository.java Fri Jan 1 19:41:14 2010
@@ -233,6 +233,7 @@
*/
@Resource(name="database-connections")
void setDatasources(DataSourceSelector datasources) {
+ System.out.println("database-connections" + datasources);
m_datasources = datasources;
}
/**
Modified: james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-api/src/main/java/org/apache/james/api/kernel/LoaderService.java Fri Jan 1 19:41:14 2010
@@ -19,19 +19,21 @@
package org.apache.james.api.kernel;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
+
/**
* Loads instances of given types.
*/
public interface LoaderService {
+
+ public void injectDependenciesWithLifecycle(Object obj, Log logger, HierarchicalConfiguration config);
+
/**
- * Loads an instance of the given class.
- * The load may elect to return a new instance
- * or reuse an existing one, as appropriate for the type.
- * Instances should - where appropriate - have dependencies injected.
- * @param <T>
- * @param type may be interface or concrete, not null
- * @return an instance of the type
+ * Inject dependencies to the given object using jsr250
+ *
+ * @param obj
*/
- public <T>T load(Class<T> type);
+ public void injectDependencies(Object obj);
}
Modified: james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-api/src/test/java/org/apache/james/api/kernel/mock/FakeLoader.java Fri Jan 1 19:41:14 2010
@@ -24,10 +24,16 @@
import java.util.HashMap;
import java.util.Map;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.apache.avalon.framework.service.ServiceException;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
public class FakeLoader implements LoaderService, org.apache.avalon.framework.service.ServiceManager{
@@ -68,7 +74,6 @@
public Object get(String name) {
Object service = servicesByName.get(mapName(name));
- System.out.println("KEYS="+servicesByName.keySet().toString());
return service;
}
@@ -77,7 +82,6 @@
if(newName == null) {
newName = name;
}
- System.out.println("NEW=" + newName);
return newName;
}
private void injectResources(Object resource) {
@@ -110,16 +114,6 @@
}
}
}
-
- public <T> T load(Class<T> type) {
- try {
- final T newInstance = type.newInstance();
- injectResources(newInstance);
- return newInstance;
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
public boolean hasService(String name) {
@@ -136,4 +130,45 @@
public void put(String role, Object service) {
servicesByName.put(role, service);
}
+
+
+ public void injectDependencies(Object obj) {
+ injectResources(obj);
+ try {
+ postConstruct(obj);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public void injectDependenciesWithLifecycle(Object obj, Log logger,
+ HierarchicalConfiguration config) {
+ if (obj instanceof LogEnabled) {
+ ((LogEnabled)obj).setLog(logger);
+ }
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException e) {
+ e.printStackTrace();
+ throw new RuntimeException(e);
+ }
+ }
+ injectDependencies(obj);
+ }
+
+ private void postConstruct(Object resource) throws IllegalAccessException,
+ InvocationTargetException {
+ Method[] methods = resource.getClass().getMethods();
+ for (Method method : methods) {
+ PostConstruct postConstructAnnotation = method
+ .getAnnotation(PostConstruct.class);
+ if (postConstructAnnotation != null) {
+ Object[] args = {};
+ method.invoke(resource, args);
+
+ }
+ }
+ }
}
Modified: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCMailRepository.java Fri Jan 1 19:41:14 2010
@@ -139,6 +139,10 @@
private FileSystem fileSystem;
+ private String filestore;
+
+ private String destination;
+
@Resource(name="database-connections")
public void setDatasources(DataSourceSelector datasources) {
this.datasources = datasources;
@@ -155,7 +159,7 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug(this.getClass().getName() + ".configure()");
}
- String destination = configuration.getString("[@destinationURL]");
+ destination = configuration.getString("[@destinationURL]");
// normalize the destination, to simplify processing.
if ( ! destination.endsWith("/") ) {
@@ -216,8 +220,30 @@
inMemorySizeLimit = configuration.getInt("inMemorySizeLimit", 409600000);
- String filestore = configuration.getString("filestore", null);
+ filestore = configuration.getString("filestore", null);
sqlFileName = configuration.getString("sqlFile");
+
+
+ }
+
+
+ /**
+ * Initialises the JDBC repository.
+ * 1) Tests the connection to the database.
+ * 2) Loads SQL strings from the SQL definition file,
+ * choosing the appropriate SQL for this connection,
+ * and performing paramter substitution,
+ * 3) Initialises the database with the required tables, if necessary.
+ *
+ * @throws Exception if an error occurs
+ */
+ @PostConstruct
+ public void init() throws Exception {
+ StringBuffer logBuffer = null;
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug(this.getClass().getName() + ".initialize()");
+ }
+
try {
if (filestore != null) {
@@ -236,38 +262,18 @@
}
if (getLogger().isDebugEnabled()) {
- StringBuffer logBuffer =
+ StringBuffer logBuf =
new StringBuffer(128)
.append(this.getClass().getName())
.append(" created according to ")
.append(destination);
- getLogger().debug(logBuffer.toString());
+ getLogger().debug(logBuf.toString());
}
} catch (Exception e) {
final String message = "Failed to retrieve Store component:" + e.getMessage();
getLogger().error(message, e);
throw new ConfigurationException(message, e);
}
-
- }
-
-
- /**
- * Initialises the JDBC repository.
- * 1) Tests the connection to the database.
- * 2) Loads SQL strings from the SQL definition file,
- * choosing the appropriate SQL for this connection,
- * and performing paramter substitution,
- * 3) Initialises the database with the required tables, if necessary.
- *
- * @throws Exception if an error occurs
- */
- @PostConstruct
- public void init() throws Exception {
- StringBuffer logBuffer = null;
- if (getLogger().isDebugEnabled()) {
- getLogger().debug(this.getClass().getName() + ".initialize()");
- }
theJDBCUtil =
new JDBCUtil() {
Modified: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/JDBCSpoolRepository.java Fri Jan 1 19:41:14 2010
@@ -32,8 +32,6 @@
import java.sql.SQLException;
import java.util.LinkedList;
-import javax.annotation.PostConstruct;
-
/**
* Implementation of a SpoolRepository on a database.
*
@@ -119,12 +117,6 @@
super.doConfigure(conf);
maxPendingMessages = conf.getInt("config.maxcache",1000);
}
-
- @PostConstruct
- public void init() throws Exception {
- super.init();
- }
-
/**
* @see org.apache.james.services.SpoolRepository#accept()
Copied: james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java (from r894642, james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java?p2=james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java&p1=james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java&r1=894642&r2=895059&rev=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/GuiceMailStore.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/core-function/src/main/java/org/apache/james/mailrepository/MailStore.java Fri Jan 1 19:41:14 2010
@@ -36,21 +36,17 @@
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
import org.apache.james.lifecycle.Configurable;
import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.services.FileSystem;
-import org.guiceyfruit.jsr250.Jsr250Module;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.name.Names;
/**
* Provides a registry of mail repositories. A mail repository is uniquely
* identified by its destinationURL, type and model.
*
*/
-public class GuiceMailStore
+public class MailStore
implements Store, LogEnabled, Configurable {
// Prefix for repository names
@@ -80,6 +76,8 @@
private FileSystem fs;
private DataSourceSelector datasources;
+
+ private LoaderService loader;
@Resource(name="database-connections")
public void setDatasources(DataSourceSelector datasources) {
@@ -109,6 +107,10 @@
this.fs = fs;
}
+ @Resource(name="org.apache.james.LoaderService")
+ public void setLoaderService(LoaderService loader) {
+ this.loader = loader;
+ }
@PostConstruct
@SuppressWarnings("unchecked")
@@ -278,32 +280,8 @@
}
try {
- Class<?> objectClass = Thread.currentThread().getContextClassLoader().loadClass(repClass);
- reply = Guice.createInjector(new Jsr250Module(), new AbstractModule() {
-
- @Override
- protected void configure() {
- bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
- bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(config);
- bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fs);
- bind(DataSourceSelector.class).annotatedWith(Names.named("database-connections")).toInstance(datasources);
- bind(Store.class).annotatedWith(Names.named("mailstore")).toInstance(new Store() {
-
- public Object select(Object arg0) throws ServiceException {
- return GuiceMailStore.this.select(arg0);
- }
-
- public boolean isSelectable(Object arg0) {
- return GuiceMailStore.this.isSelectable(arg0);
- }
-
- public void release(Object arg0) {
- GuiceMailStore.this.release(arg0);
- }
-
- });
- }
- }).getInstance(objectClass);
+ reply = Thread.currentThread().getContextClassLoader().loadClass(repClass).newInstance();
+ loader.injectDependenciesWithLifecycle(reply, logger, config);
repositories.put(repID, reply);
if (getLogger().isInfoEnabled()) {
@@ -338,7 +316,7 @@
* @return a new repository name
*/
public static final String getName() {
- synchronized (GuiceMailStore.class) {
+ synchronized (MailStore.class) {
return REPOSITORY_NAME + id++;
}
}
Modified: james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPRepositoryImpl.java Fri Jan 1 19:41:14 2010
@@ -24,6 +24,7 @@
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
+import org.apache.james.api.kernel.LoaderService;
import org.apache.james.lifecycle.Configurable;
import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.nntpserver.DateSinceFileFilter;
@@ -32,11 +33,7 @@
import org.apache.james.util.io.AndFileFilter;
import org.apache.james.util.io.DirectoryFileFilter;
import org.apache.oro.io.GlobFilenameFilter;
-import org.guiceyfruit.jsr250.Jsr250Module;
-import com.google.inject.AbstractModule;
-import com.google.inject.Guice;
-import com.google.inject.name.Names;
import java.io.File;
import java.io.FileOutputStream;
@@ -144,6 +141,8 @@
private Log logger;
+ private LoaderService loader;
+
public void configure(HierarchicalConfiguration configuration) throws ConfigurationException{
this.configuration = configuration;
readOnly = configuration.getBoolean("readOnly", false);
@@ -188,6 +187,11 @@
this.logger = logger;
}
+ @Resource(name="org.apache.james.LoaderService")
+ public void setLoaderService(LoaderService loader) {
+ this.loader = loader;
+ }
+
/**
* Setter for the FileSystem dependency
*
@@ -462,54 +466,11 @@
className = NNTPSpooler.class.getName();
}
try {
- Class<?> myClass = Thread.currentThread().getContextClassLoader().loadClass(className);
- Object obj = Guice.createInjector(new Jsr250Module(), new AbstractModule() {
-
- @Override
- protected void configure() {
- bind(HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(spoolerConfiguration.configurationAt("configuration"));
- bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
- bind(FileSystem.class).annotatedWith(Names.named("filesystem")).toInstance(fileSystem);
- bind(ArticleIDRepository.class).annotatedWith(Names.named("org.apache.james.nntpserver.repository.ArticleIDRepository")).toInstance(articleIDRepo);
- bind(NNTPRepository.class).annotatedWith(Names.named("nntp-repository")).toInstance(new NNTPRepository() {
-
- public void createArticle(InputStream in) {
- NNTPRepositoryImpl.this.createArticle(in);
- }
-
- public NNTPArticle getArticleFromID(String id) {
- return NNTPRepositoryImpl.this.getArticleFromID(id);
- }
-
- public Iterator<NNTPArticle> getArticlesSince(Date dt) {
- return NNTPRepositoryImpl.this.getArticlesSince(dt);
- }
+ NNTPSpooler obj = (NNTPSpooler) Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+ obj.setArticleIDRepository(articleIDRepo);
+ loader.injectDependenciesWithLifecycle(obj, logger, spoolerConfiguration.configurationAt("configuration"));
- public NNTPGroup getGroup(String groupName) {
- return NNTPRepositoryImpl.this.getGroup(groupName);
- }
-
- public Iterator<NNTPGroup> getGroupsSince(Date dt) {
- return NNTPRepositoryImpl.this.getGroupsSince(dt);
- }
-
- public Iterator<NNTPGroup> getMatchedGroups(String wildmat) {
- return NNTPRepositoryImpl.this.getMatchedGroups(wildmat);
- }
-
- public String[] getOverviewFormat() {
- return NNTPRepositoryImpl.this.getOverviewFormat();
- }
-
- public boolean isReadOnly() {
- return NNTPRepositoryImpl.this.isReadOnly();
- }
-
- });
- }
-
- }).getInstance(myClass);
- return (NNTPSpooler)obj;
+ return obj;
} catch(ClassCastException cce) {
StringBuffer errorBuffer =
new StringBuffer(128)
Modified: james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/nntpserver-function/src/main/java/org/apache/james/nntpserver/repository/NNTPSpooler.java Fri Jan 1 19:41:14 2010
@@ -133,7 +133,6 @@
*
* @param articleIDRepo the article id repository to be used
*/
- @Resource(name="org.apache.james.nntpserver.repository.ArticleIDRepository")
void setArticleIDRepository(ArticleIDRepository idRepos) {
this.idRepos = idRepos;
}
Modified: james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/java/org/apache/james/phoenix/PhoenixLoader.java Fri Jan 1 19:41:14 2010
@@ -32,8 +32,12 @@
import org.apache.avalon.phoenix.ApplicationEvent;
import org.apache.avalon.phoenix.ApplicationListener;
import org.apache.avalon.phoenix.BlockEvent;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.james.api.kernel.LoaderService;
import org.apache.james.bridge.GuiceInjected;
+import org.apache.james.lifecycle.Configurable;
public class PhoenixLoader implements LoaderService, ApplicationListener, LogEnabled {
@@ -214,21 +218,24 @@
this.logger = logger;
}
- public <T> T load(Class<T> type) {
- try {
- // TODO: Use Guice to load type
- final T base = type.newInstance();
- injectResources(base);
- return base;
- } catch (InstantiationException e) {
- logger.warn("Cannot instantiate type", e);
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- logger.warn("Cannot instantiate type", e);
- throw new RuntimeException(e);
- } catch (IllegalArgumentException e) {
- logger.warn("Cannot instantiate type", e);
- throw new RuntimeException(e);
+
+ public void injectDependencies(Object obj) {
+ injectResources(obj);
+
+ }
+
+ public void injectDependenciesWithLifecycle(Object obj, Log logger,
+ HierarchicalConfiguration config) {
+ if (obj instanceof LogEnabled) {
+ ((org.apache.james.lifecycle.LogEnabled) obj).setLog(logger);
+ }
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException ex) {
+ throw new RuntimeException("Unable to configure object " + obj, ex);
+ }
}
+ injectDependencies(obj);
}
}
Modified: james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/phoenix-deployment/src/test/org/apache/james/FakeLoader.java Fri Jan 1 19:41:14 2010
@@ -26,8 +26,13 @@
import javax.annotation.Resource;
+import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.service.ServiceException;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
public class FakeLoader implements LoaderService, org.apache.avalon.framework.service.ServiceManager{
@@ -73,14 +78,26 @@
}
}
- public <T> T load(Class<T> type) {
- try {
- final T newInstance = type.newInstance();
- injectResources(newInstance);
- return newInstance;
- } catch (Exception e) {
- throw new RuntimeException(e);
+
+
+ public void injectDependencies(Object obj) {
+ injectResources(obj);
+
+ }
+
+ public void injectDependenciesWithLifecycle(Object obj, Log logger,
+ HierarchicalConfiguration config) {
+ if (obj instanceof LogEnabled) {
+ ((org.apache.james.lifecycle.LogEnabled) obj).setLog(logger);
+ }
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException ex) {
+ throw new RuntimeException("Unable to configure object " + obj, ex);
+ }
}
+ injectDependencies(obj);
}
Modified: james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/smtpserver-function/src/main/java/org/apache/james/smtpserver/mina/AsyncSMTPServer.java Fri Jan 1 19:41:14 2010
@@ -189,7 +189,7 @@
* @throws Exception
*/
private void prepareHandlerChain() throws Exception {
- handlerChain = getLoader().load(ProtocolHandlerChainImpl.class);
+ handlerChain = new ProtocolHandlerChainImpl();
//set the logger
handlerChain.setLog(getLogger());
@@ -199,6 +199,9 @@
if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
handlerchainConfig.addProperty("[@coreHandlersPackage]", CoreCmdHandlerLoader.class.getName());
handlerChain.configure(handlerchainConfig);
+
+ getLoader().injectDependencies(handlerChain);
+
}
Modified: james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/AbstractSupportLoaderProtocolHandlerFactory.java Fri Jan 1 19:41:14 2010
@@ -37,17 +37,15 @@
}
private void prepareHandlerChain() throws Exception {
-
- handlerChain = loader.load(ProtocolHandlerChainImpl.class);
-
- //set the logger
- handlerChain.setLog(getLogger());
-
+
//read from the XML configuration and create and configure each of the handlers
HierarchicalConfiguration jamesConfiguration = configuration.configurationAt("handler.handlerchain");
if (jamesConfiguration.getString("[@coreHandlersPackage]") == null)
jamesConfiguration.addProperty("[@coreHandlersPackage]", getHandlersPackage().getName());
- handlerChain.configure(jamesConfiguration);
+
+ System.out.println("jamesConfiguration="+jamesConfiguration);
+ handlerChain = new ProtocolHandlerChainImpl();
+ loader.injectDependenciesWithLifecycle(handlerChain, getLogger(), jamesConfiguration);
}
@Override
Modified: james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/socket-shared-library/src/main/java/org/apache/james/socket/shared/ProtocolHandlerChainImpl.java Fri Jan 1 19:41:14 2010
@@ -24,6 +24,7 @@
import java.util.LinkedList;
import java.util.List;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.apache.commons.configuration.ConfigurationException;
@@ -126,18 +127,10 @@
protected void loadClass(ClassLoader classLoader, String className,
org.apache.commons.configuration.HierarchicalConfiguration config) throws Exception {
final Class<?> handlerClass = classLoader.loadClass(className);
- Object handler = loader.load(handlerClass);
-
- // enable logging
- if (handler instanceof LogEnabled) {
- ((LogEnabled) handler).setLog(getLog());
- }
-
- // configure the handler
- if (handler instanceof org.apache.james.lifecycle.Configurable) {
- org.apache.james.lifecycle.Configurable configurableHandler = (org.apache.james.lifecycle.Configurable) handler;
- configurableHandler.configure(config);
- }
+
+ Object handler = handlerClass.newInstance();
+ System.out.println("LOADER=" + loader);
+ loader.injectDependenciesWithLifecycle(handler, getLog(), config);
// if it is a commands handler add it to the map with key as command
// name
@@ -238,12 +231,12 @@
*/
public void configure(HierarchicalConfiguration commonsConf) throws ConfigurationException {
this.commonsConf = commonsConf;
- try {
- loadHandlers();
- wireExtensibleHandlers();
- } catch (Exception e) {
- throw new ConfigurationException(e.getMessage(), e);
- }
+ }
+
+ @PostConstruct
+ public void init() throws Exception {
+ loadHandlers();
+ wireExtensibleHandlers();
}
}
Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java Fri Jan 1 19:41:14 2010
@@ -90,8 +90,18 @@
return logger;
}
protected Object load(String className) throws ClassNotFoundException {
- final Object newInstance = loaderService.load(Thread.currentThread().getContextClassLoader().loadClass(className));
- return newInstance;
+ Object newInstance;
+ try {
+ newInstance = Thread.currentThread().getContextClassLoader().loadClass(className).newInstance();
+ loaderService.injectDependencies(newInstance);
+ return newInstance;
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException("Unable to load class " + className, e);
+
+ } catch (InstantiationException e) {
+ throw new RuntimeException("Unable to load class " + className, e);
+ }
+
}
@SuppressWarnings("unchecked")
Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java Fri Jan 1 19:41:14 2010
@@ -142,15 +142,13 @@
String processorClass = config.getString("processorClass","org.apache.james.transport.StateAwareProcessorList");
try {
- Class<?> cObj = Thread.currentThread().getContextClassLoader().loadClass(processorClass);
- processorList = (MailProcessor) loaderService.load(cObj);
+ processorList = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();;
+ loaderService.injectDependencies(processorList);
} catch (Exception e1) {
logger.error("Unable to instantiate spoolmanager processor: "+processorClass, e1);
throw new ConfigurationException("Instantiation exception: "+processorClass, e1);
}
- ContainerUtil.initialize(processorList);
-
if (logger.isInfoEnabled()) {
StringBuffer infoBuffer =
new StringBuffer(64)
Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java Fri Jan 1 19:41:14 2010
@@ -22,7 +22,16 @@
package org.apache.james.transport;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.mail.MessagingException;
+
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
import org.apache.james.lifecycle.Configurable;
@@ -36,16 +45,6 @@
import com.google.inject.Guice;
import com.google.inject.name.Names;
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.annotation.Resource;
-import javax.mail.MessagingException;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
/**
* This class is responsible for creating a set of named processors and
* directing messages to the appropriate processor (given the State of the mail)
Modified: james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java Fri Jan 1 19:41:14 2010
@@ -25,6 +25,7 @@
import org.apache.avalon.framework.configuration.DefaultConfiguration;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
import org.apache.commons.logging.impl.SimpleLog;
+import org.apache.james.api.kernel.mock.FakeLoader;
import org.apache.james.test.util.Util;
import org.apache.james.transport.mailets.MailetLoaderTestMailet;
import org.apache.james.util.ConfigurationAdapter;
@@ -69,7 +70,7 @@
m_conf.init();
m_jamesMailetLoader.setLog(new SimpleLog("Test"));
m_jamesMailetLoader.configure(new ConfigurationAdapter(m_conf));
- m_jamesMailetLoader.setLoaderService(new FakeLoaderService());
+ m_jamesMailetLoader.setLoaderService(new FakeLoader());
}
private void assetIsNullMailet(Mailet mailet) {
Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/config/james/spring-beans.xml Fri Jan 1 19:41:14 2010
@@ -163,7 +163,7 @@
<bean id="logProvider" class="org.apache.james.container.spring.lifecycle.SpringLogProvider" />
- <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" >
+ <bean id="jsr250" class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" >
<property name="order" value="3" />
</bean>
@@ -221,14 +221,14 @@
<bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler" />
<!-- The High Level Storage block -->
- <bean id="mailstore" class="org.apache.james.mailrepository.GuiceMailStore" />
+ <bean id="mailstore" class="org.apache.james.mailrepository.MailStore" />
<!-- The main SpoolRepository -->
<bean id="spoolrepository"
class="org.apache.james.mailrepository.MailStoreSpoolRepository" />
<!-- The User Storage block -->
- <bean id="users-store" class="org.apache.james.core.GuiceUsersStore" />
+ <bean id="users-store" class="org.apache.james.core.UsersStoreImpl" />
<!--
This is needed to link the smtpserver to the local user repository
@@ -255,7 +255,7 @@
<bean id="virtualusertablemanagement" class="org.apache.james.impl.vut.VirtualUserTableManagement" />
<!-- VirtualUserTable Store -->
- <bean id="virtualusertable-store" class="org.apache.james.core.GuiceVirtualUserTableStore" />
+ <bean id="virtualusertable-store" class="org.apache.james.core.VirtualUserTableStoreImpl" />
<bean id="defaultvirtualusertable" class="org.apache.james.impl.vut.DefaultVirtualUserTable" />
Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/SpringLoaderService.java Fri Jan 1 19:41:14 2010
@@ -18,11 +18,15 @@
****************************************************************/
package org.apache.james.container.spring;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
import org.springframework.beans.BeansException;
import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
@@ -37,22 +41,6 @@
private ConfigurableApplicationContext context;
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.api.kernel.LoaderService#load(java.lang.Class)
- */
- public <T> T load(Class<T> type) {
- String beanName = type.getName();
-
- // Check if we have a bean with the name already registered if not register it
- if (context.containsBean(beanName) == false) {
- DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
- beanFactory.registerBeanDefinition(beanName, BeanDefinitionBuilder.rootBeanDefinition(type).getBeanDefinition());
- }
- return (T) context.getBean(beanName);
- }
-
/*
* (non-Javadoc)
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
@@ -65,4 +53,31 @@
throw new FatalBeanException("Application needs to be a instance of ConfigurableApplicationContext");
}
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.api.kernel.LoaderService#injectDependencies(java.lang.Object)
+ */
+ public void injectDependencies(Object obj) {
+ ((BeanPostProcessor) context.getBean("jsr250")).postProcessAfterInitialization(obj, obj.getClass().getName());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.api.kernel.LoaderService#injectDependenciesWithLifecycle(java.lang.Object, org.apache.commons.logging.Log, org.apache.commons.configuration.HierarchicalConfiguration)
+ */
+ public void injectDependenciesWithLifecycle(Object obj, Log logger,
+ HierarchicalConfiguration config) {
+ if (obj instanceof LogEnabled) {
+ ((LogEnabled) obj).setLog(logger);
+ }
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException ex) {
+ throw new RuntimeException("Unable to configure object " + obj, ex);
+ }
+ }
+ injectDependencies(obj);
+ }
}
Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/AvalonConfigurableBeanPostProcessor.java Fri Jan 1 19:41:14 2010
@@ -18,11 +18,8 @@
****************************************************************/
package org.apache.james.container.spring.lifecycle;
-import java.io.ByteArrayInputStream;
-
import org.apache.avalon.framework.configuration.Configurable;
import org.apache.avalon.framework.configuration.Configuration;
-
import org.apache.james.container.spring.AvalonConfigurationProvider;
/**
Modified: james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java?rev=895059&r1=895058&r2=895059&view=diff
==============================================================================
--- james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java (original)
+++ james/server/sandbox/active/pure_spring_deployment/spring-deployment/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java Fri Jan 1 19:41:14 2010
@@ -33,7 +33,6 @@
@Override
protected void executeLifecycleMethodBeforeInit(LogEnabled bean, String beanname,
String lifecyclename) throws Exception {
- System.out.println("comp=" + lifecyclename + " log=" + provider.getLogForComponent(lifecyclename));
bean.setLog(provider.getLogForComponent(lifecyclename));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org