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/10/08 19:38:52 UTC
svn commit: r1005919 - in /james/server/trunk:
core-api/src/main/java/org/apache/james/services/
core-library/src/main/java/org/apache/james/filepair/
core-library/src/main/java/org/apache/james/services/
mail-library/src/main/java/org/apache/james/mai...
Author: norman
Date: Fri Oct 8 17:38:50 2010
New Revision: 1005919
URL: http://svn.apache.org/viewvc?rev=1005919&view=rev
Log:
Rework components to make james components as less depend on spring as possible.
Added:
james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/JamesMailStore.java
- copied, changed from r1005333, james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/AbstractMailStore.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/JamesProtocolHandlerChain.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringProtocolHandlerChain.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationProvider.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogProvider.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/RestrictedLifeCycleBeanPostProcessor.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogProvider.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogRegistry.java
james/server/trunk/user-library/src/main/java/org/apache/james/impl/AbstractStore.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/AbstractStore.java
james/server/trunk/user-library/src/main/java/org/apache/james/impl/user/JamesUsersStore.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringUsersStore.java
james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/JamesVirtualUserTableStore.java
- copied, changed from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringVirtualUserTableStore.java
Removed:
james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/AbstractMailStore.java
james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/netty/ProtocolHandlerChainImpl.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/AbstractStore.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/Registry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringMailStore.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringProtocolHandlerChain.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringUsersStore.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringVirtualUserTableStore.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationRegistry.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogRegistry.java
Modified:
james/server/trunk/core-api/src/main/java/org/apache/james/services/InstanceFactory.java
james/server/trunk/core-library/src/main/java/org/apache/james/filepair/AbstractFileRepository.java
james/server/trunk/core-library/src/main/java/org/apache/james/services/AbstractJSR250InstanceFactory.java
james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AbstractLoader.java
james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMailetLoader.java
james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMatcherLoader.java
james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java
james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java
james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/AbstractSMTPServerTest.java
james/server/trunk/spring-common/pom.xml
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringInstanceFactory.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java
james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
Modified: james/server/trunk/core-api/src/main/java/org/apache/james/services/InstanceFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-api/src/main/java/org/apache/james/services/InstanceFactory.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/core-api/src/main/java/org/apache/james/services/InstanceFactory.java (original)
+++ james/server/trunk/core-api/src/main/java/org/apache/james/services/InstanceFactory.java Fri Oct 8 17:38:50 2010
@@ -19,6 +19,9 @@
package org.apache.james.services;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
+
/**
* Loads instances of given types.
*/
@@ -31,7 +34,10 @@ public interface InstanceFactory {
* @param type may be interface or concrete, not null
* @return an instance of the type
*/
- public Object newInstance(String className) throws InstanceException, ClassNotFoundException;
+ public <T> T newInstance(Class<T> clazz) throws InstanceException;
+
+ public <T> T newInstance(Class<T> clazz, Log log, HierarchicalConfiguration config) throws InstanceException;
+
@SuppressWarnings("serial")
public class InstanceException extends Exception {
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/filepair/AbstractFileRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/filepair/AbstractFileRepository.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/filepair/AbstractFileRepository.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/filepair/AbstractFileRepository.java Fri Oct 8 17:38:50 2010
@@ -71,13 +71,14 @@ public abstract class AbstractFileReposi
private FileSystem fileSystem;
private Log logger;
+
+ private String destination;
public void configure(HierarchicalConfiguration configuration) throws ConfigurationException{
- final String destination = configuration.getString( "[@destinationURL]" );
- setDestination( destination );
-
+ destination = configuration.getString( "[@destinationURL]" );
}
+
@Resource(name="filesystem")
public void setFileSystem(FileSystem fileSystem) {
this.fileSystem = fileSystem;
@@ -97,8 +98,10 @@ public abstract class AbstractFileReposi
public void init()
throws Exception
{
+
getLogger().info( "Init " + getClass().getName() + " Store" );
-
+ setDestination( destination );
+
File directory;
try
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/services/AbstractJSR250InstanceFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/services/AbstractJSR250InstanceFactory.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/core-library/src/main/java/org/apache/james/services/AbstractJSR250InstanceFactory.java (original)
+++ james/server/trunk/core-library/src/main/java/org/apache/james/services/AbstractJSR250InstanceFactory.java Fri Oct 8 17:38:50 2010
@@ -27,6 +27,9 @@ import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
+
/**
* Abstract base class which implements a JSR250 based LoaderService
*
@@ -41,19 +44,21 @@ public abstract class AbstractJSR250Inst
*
* @see org.apache.james.api.kernel.Factory#newInstance(java.lang.String)
*/
- public final Object newInstance(String className) throws InstanceException, ClassNotFoundException {
+ public final <T> T newInstance(Class<T> clazz) throws InstanceException {
+ return newInstance(clazz, null, null);
+ }
+
+ public final <T> T newInstance(Class<T> clazz, Log log, HierarchicalConfiguration config) throws InstanceException {
try {
- Object obj = create(className);
+ T obj = clazz.newInstance();
injectResources(obj);
postConstruct(obj);
synchronized (this) {
loaderRegistry.add(obj);
}
return obj;
- } catch (ClassNotFoundException e) {
- throw e;
} catch (Exception e) {
- throw new InstanceException("Unable to load instance of class " + className, e);
+ throw new InstanceException("Unable to load instance of class " + clazz, e);
}
}
Copied: james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/JamesMailStore.java (from r1005333, james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/AbstractMailStore.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/JamesMailStore.java?p2=james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/JamesMailStore.java&p1=james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/AbstractMailStore.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/AbstractMailStore.java (original)
+++ james/server/trunk/mail-library/src/main/java/org/apache/james/mailstore/JamesMailStore.java Fri Oct 8 17:38:50 2010
@@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
import org.apache.commons.collections.map.ReferenceMap;
import org.apache.commons.configuration.CombinedConfiguration;
@@ -35,14 +36,14 @@ import org.apache.commons.logging.Log;
import org.apache.james.lifecycle.Configurable;
import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.mailstore.MailStore;
+import org.apache.james.services.InstanceFactory;
/**
* Provides a registry of mail repositories. A mail repository is uniquely
* identified by its destinationURL, type and model.
*
*/
-public abstract class AbstractMailStore
- implements MailStore, LogEnabled, Configurable {
+public class JamesMailStore implements MailStore, LogEnabled, Configurable {
// Prefix for repository names
private static final String REPOSITORY_NAME = "Repository";
@@ -68,6 +69,8 @@ public abstract class AbstractMailStore
private Log logger;
+ private InstanceFactory factory;
+
//private LoaderService loader;
@@ -84,6 +87,11 @@ public abstract class AbstractMailStore
}
+ @Resource(name="instanceFactory")
+ public void setInstanceFactory(InstanceFactory factory) {
+ this.factory = factory;
+ }
+
@PostConstruct
@SuppressWarnings("unchecked")
public void init()
@@ -243,8 +251,8 @@ public abstract class AbstractMailStore
config.addConfiguration(defConf);
}
- try {
- reply = load(repClass, config, logger);
+ try {
+ reply = factory.newInstance(Thread.currentThread().getContextClassLoader().loadClass(repClass), logger, config);
repositories.put(repID, reply);
if (getLogger().isInfoEnabled()) {
@@ -277,10 +285,8 @@ public abstract class AbstractMailStore
* @return a new repository name
*/
public static final String getName() {
- synchronized (AbstractMailStore.class) {
+ synchronized (JamesMailStore.class) {
return REPOSITORY_NAME + id++;
}
}
-
- protected abstract Object load(String className, HierarchicalConfiguration config, Log log) throws Exception;
}
Modified: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AbstractLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AbstractLoader.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AbstractLoader.java (original)
+++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AbstractLoader.java Fri Oct 8 17:38:50 2010
@@ -31,7 +31,6 @@ import org.apache.commons.logging.Log;
import org.apache.james.lifecycle.Configurable;
import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.services.InstanceFactory;
-import org.apache.james.services.InstanceFactory.InstanceException;
import org.apache.mailet.MailetContext;
import org.apache.mailet.MailetException;
@@ -52,7 +51,7 @@ public abstract class AbstractLoader imp
private Log logger;
- private InstanceFactory factory;
+ protected InstanceFactory factory;
/*
@@ -82,13 +81,6 @@ public abstract class AbstractLoader imp
return logger;
}
- protected Object load(String className) throws ClassNotFoundException {
- try {
- return factory.newInstance(className);
- } catch (InstanceException e) {
- return null;
- }
- }
@SuppressWarnings("unchecked")
protected void getPackages(HierarchicalConfiguration conf, String packageType)
Modified: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMailetLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMailetLoader.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMailetLoader.java (original)
+++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMailetLoader.java Fri Oct 8 17:38:50 2010
@@ -54,7 +54,7 @@ public class JamesMailetLoader extends A
for (final String packageName:packages) {
final String className = packageName + mailetName;
try {
- final Mailet mailet = (Mailet) load(className);;
+ final Mailet mailet = (Mailet)factory.newInstance(Thread.currentThread().getContextClassLoader().loadClass(className));
final MailetConfigImpl configImpl = new MailetConfigImpl();
configImpl.setMailetName(mailetName);
Modified: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMatcherLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMatcherLoader.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMatcherLoader.java (original)
+++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/JamesMatcherLoader.java Fri Oct 8 17:38:50 2010
@@ -57,7 +57,7 @@ public class JamesMatcherLoader extends
for (final String packageName: packages) {
final String className = packageName + matchName;
try {
- final Matcher matcher = (Matcher) load(className);
+ final Matcher matcher = (Matcher) factory.newInstance(Thread.currentThread().getContextClassLoader().loadClass(className));
final MatcherConfigImpl configImpl = new MatcherConfigImpl();
configImpl.setMatcherName(matchName);
Copied: james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/JamesProtocolHandlerChain.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringProtocolHandlerChain.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/JamesProtocolHandlerChain.java?p2=james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/JamesProtocolHandlerChain.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringProtocolHandlerChain.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringProtocolHandlerChain.java (original)
+++ james/server/trunk/netty-socket/src/main/java/org/apache/james/socket/JamesProtocolHandlerChain.java Fri Oct 8 17:38:50 2010
@@ -16,85 +16,63 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.container.spring;
+package org.apache.james.socket;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.protocols.api.ExtensibleHandler;
import org.apache.james.protocols.api.HandlersPackage;
import org.apache.james.protocols.api.ProtocolHandlerChain;
import org.apache.james.protocols.api.WiringException;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.BeanNameAware;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.context.ApplicationEvent;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
+import org.apache.james.services.InstanceFactory;
/**
- * ProtocolHandlerchain implementation which register all configured Handlers
- * in the BeanFactory of the Spring context.
+ * ProtocolHandlerchain implementation which instance all the configured handlers
*
*
*/
@SuppressWarnings("unchecked")
-public class SpringProtocolHandlerChain implements BeanFactoryPostProcessor, ProtocolHandlerChain, ApplicationContextAware, ApplicationListener, BeanNameAware {
-
- private final List<String> handlers = new LinkedList<String>();
- private Registry<HierarchicalConfiguration> confProvider;
- private Registry<Log> logProvider;
+public class JamesProtocolHandlerChain implements ProtocolHandlerChain, Configurable, LogEnabled {
+
private Log log;
- private ApplicationContext context;
private String coreHandlersPackage;
- private String name;
+ private LinkedList handlers = new LinkedList();
+ private HierarchicalConfiguration config;
+ private InstanceFactory factory;
- public void setConfigurationRegistry(Registry<HierarchicalConfiguration> confProvider) {
- this.confProvider = confProvider;
- }
-
- public void setLogRegistry(Registry<Log> logProvider) {
- this.logProvider = logProvider;
- }
public void setCoreHandlersPackage(String coreHandlersPackage) {
this.coreHandlersPackage = coreHandlersPackage;
}
- /*
- * (non-Javadoc)
- * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
- */
- public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
- HierarchicalConfiguration handlerchainConfig;
- BeanDefinitionRegistry registry = (BeanDefinitionRegistry) arg0;
+
+ @Resource(name="instanceFactory")
+ public void setInstanceFactory(InstanceFactory factory) {
+ this.factory = factory;
+ }
+
+
+ @PostConstruct
+ public void init() throws Exception {
+ HierarchicalConfiguration handlerchainConfig = config.configurationAt("handler.handlerchain");
+ if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
+ handlerchainConfig.addProperty("[@coreHandlersPackage]", coreHandlersPackage);
- try {
- log = logProvider.getForComponent(name);
- handlerchainConfig = confProvider.getForComponent(name).configurationAt("handler.handlerchain");
- if (handlerchainConfig.getString("[@coreHandlersPackage]") == null)
- handlerchainConfig.addProperty("[@coreHandlersPackage]", coreHandlersPackage);
-
- loadHandlers(registry, handlerchainConfig);
- } catch (Exception e) {
- throw new FatalBeanException("Unable to instance ProtocolHandlerChain",e);
- }
-
+ loadHandlers(handlerchainConfig);
+ wireExtensibleHandlers();
}
-
/**
* ExtensibleHandler wiring
@@ -102,14 +80,10 @@ public class SpringProtocolHandlerChain
* @throws WiringException
*/
private void wireExtensibleHandlers() throws WiringException {
- String[] beanNames = context.getBeanNamesForType(ExtensibleHandler.class);
-
- for (int a = 0; a < beanNames.length; a++) {
- String name = beanNames[a];
-
- // check if the bean is one of our handlers
- if (handlers.contains(name)) {
- final ExtensibleHandler extensibleHandler = (ExtensibleHandler) context.getBean(name);
+ for (int a = 0; a < handlers.size(); a++) {
+ final Object obj = handlers.get(a);
+ if (obj instanceof ExtensibleHandler) {
+ final ExtensibleHandler extensibleHandler = (ExtensibleHandler) obj;
final List<Class<?>> markerInterfaces = extensibleHandler.getMarkerInterfaces();
for (int i = 0; i < markerInterfaces.size(); i++) {
final Class<?> markerInterface = markerInterfaces.get(i);
@@ -117,6 +91,7 @@ public class SpringProtocolHandlerChain
extensibleHandler.wireExtensions(markerInterface, extensions);
}
}
+
}
}
@@ -129,38 +104,30 @@ public class SpringProtocolHandlerChain
* @param config The configuration
* @throws ConfigurationException Get thrown on error
*/
- private void loadClass(BeanDefinitionRegistry registry, String className,
- org.apache.commons.configuration.HierarchicalConfiguration config) throws Exception {
- final Class<?> handlerClass = context.getClassLoader().loadClass(className);
-
-
-
+ private void loadClass(String className, org.apache.commons.configuration.HierarchicalConfiguration config) throws Exception {
+ Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
+ Object obj = factory.newInstance(clazz, log, config);
+
// if it is a commands handler add it to the map with key as command
// name
- if (HandlersPackage.class.isAssignableFrom(handlerClass)) {
- List<String> c = ((HandlersPackage) handlerClass.newInstance()).getHandlers();
+ if (obj instanceof HandlersPackage) {
+
+ List<String> c = ((HandlersPackage) obj).getHandlers();
for (Iterator<String> i = c.iterator(); i.hasNext(); ) {
String cName = i.next();
HierarchicalConfiguration cmdConf = addHandler(cName);
- loadClass(registry, cName, cmdConf);
+ loadClass(cName, cmdConf);
}
} else {
- String beanName = name + ":" + className;
-
- confProvider.registerForComponent(beanName, config);
- logProvider.registerForComponent(beanName, log);
-
- registry.registerBeanDefinition(beanName, BeanDefinitionBuilder.genericBeanDefinition(className).setLazyInit(false).getBeanDefinition());
- // fill the big handler table
- handlers.add(beanName);
+ handlers.add(obj);
if (log.isInfoEnabled()) {
- log.info("Added Handler: " + beanName);
+ log.info("Added Handler: " + className);
}
}
@@ -186,17 +153,15 @@ public class SpringProtocolHandlerChain
* @see org.apache.james.socket.shared.ProtocolHandlerChain#getHandlers(java.lang.Class)
*/
public <T> LinkedList<T> getHandlers(Class<T> type) {
- LinkedList<T> result = new LinkedList<T>();
- Map<String,T> beans = context.getBeansOfType(type);
-
- for (Iterator<String> i = handlers.iterator(); i.hasNext(); ) {
- String handler = i.next();
- T bean = beans.get(handler);
- if (bean != null) {
- result.add(bean);
+ LinkedList<T> classHandlers = new LinkedList<T>();
+ Iterator hList = handlers.iterator();
+ while (hList.hasNext()) {
+ Object obj = hList.next();
+ if (type.isInstance(obj)) {
+ classHandlers.add((T)obj);
}
}
- return result;
+ return classHandlers;
}
/**
@@ -205,13 +170,13 @@ public class SpringProtocolHandlerChain
* @param configuration
* configuration under handlerchain node
*/
- private void loadHandlers(BeanDefinitionRegistry registry, HierarchicalConfiguration commonsConf) throws Exception {
+ private void loadHandlers(HierarchicalConfiguration commonsConf) throws Exception {
List<org.apache.commons.configuration.HierarchicalConfiguration> children = ((HierarchicalConfiguration) commonsConf).configurationsAt("handler");
String coreCmdName = commonsConf.getString("[@coreHandlersPackage]");
// load the core handlers
- loadClass(registry, coreCmdName,
+ loadClass(coreCmdName,
addHandler(coreCmdName));
// load the configured handlers
@@ -226,7 +191,7 @@ public class SpringProtocolHandlerChain
if (!className.equals(coreCmdName)) {
// load the handler
- loadClass(registry, className, hConf);
+ loadClass(className, hConf);
}
}
}
@@ -236,38 +201,20 @@ public class SpringProtocolHandlerChain
}
+
/*
* (non-Javadoc)
- * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
+ * @see org.apache.james.lifecycle.Configurable#configure(org.apache.commons.configuration.HierarchicalConfiguration)
*/
- public void setApplicationContext(ApplicationContext context) throws BeansException {
- this.context = context;
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.config = config;
}
-
-
- /*
- * (non-Javadoc)
- * @see org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang.String)
- */
- public void setBeanName(String name) {
- this.name = name;
- }
-
-
+
/*
* (non-Javadoc)
- * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
+ * @see org.apache.james.lifecycle.LogEnabled#setLog(org.apache.commons.logging.Log)
*/
- public void onApplicationEvent(ApplicationEvent event) {
- if (event instanceof ContextRefreshedEvent) {
- try {
- // wire the extensions after the startup of the application was complete
- // This is needed to be sure that every dependency was injected and every bean was
- // initialized
- wireExtensibleHandlers();
- } catch (WiringException e) {
- throw new RuntimeException("Unable to wire handlers", e);
- }
- }
+ public void setLog(Log log) {
+ this.log = log;
}
}
\ No newline at end of file
Modified: james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java (original)
+++ james/server/trunk/pop3server/src/test/java/org/apache/james/pop3server/AbstractAsyncPOP3ServerTest.java Fri Oct 8 17:38:50 2010
@@ -51,7 +51,7 @@ import org.apache.james.mailbox.MailboxS
import org.apache.james.lifecycle.LifecycleUtil;
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.services.MailServer;
-import org.apache.james.socket.netty.ProtocolHandlerChainImpl;
+import org.apache.james.socket.JamesProtocolHandlerChain;
import org.apache.james.userrepository.MockUsersRepository;
import org.apache.james.util.POP3BeforeSMTPHelper;
import org.apache.james.util.TestUtil;
@@ -66,7 +66,7 @@ public abstract class AbstractAsyncPOP3S
private MockJSR250Loader serviceManager;
protected DNSService dnsservice;
protected MockFileSystem fSystem;
- protected ProtocolHandlerChainImpl chain;
+ protected JamesProtocolHandlerChain chain;
private InMemoryMailboxManager manager;
public AbstractAsyncPOP3ServerTest() {
@@ -76,7 +76,7 @@ public abstract class AbstractAsyncPOP3S
protected void setUp() throws Exception {
setUpServiceManager();
- chain = new ProtocolHandlerChainImpl();
+ chain = new JamesProtocolHandlerChain();
chain.setInstanceFactory(serviceManager);
chain.setLog(new SimpleLog("ChainLog"));
@@ -86,7 +86,7 @@ public abstract class AbstractAsyncPOP3S
protected void finishSetUp(POP3TestConfiguration testConfiguration) throws Exception {
testConfiguration.init();
- chain.configure(testConfiguration.configurationAt("handler.handlerchain"));
+ chain.configure(testConfiguration);
chain.init();
initPOP3Server(testConfiguration);
}
Modified: james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java (original)
+++ james/server/trunk/remotemanager/src/test/java/org/apache/james/remotemanager/AbstractRemoteManagerTest.java Fri Oct 8 17:38:50 2010
@@ -58,7 +58,7 @@ import org.apache.james.management.Spool
import org.apache.james.management.SpoolManagementException;
import org.apache.james.management.SpoolManagementService;
import org.apache.james.services.MailServer;
-import org.apache.james.socket.netty.ProtocolHandlerChainImpl;
+import org.apache.james.socket.JamesProtocolHandlerChain;
import org.apache.james.test.mock.james.MockUsersStore;
import org.apache.james.userrepository.MockUsersRepository;
import org.apache.james.util.InternetPrintWriter;
@@ -78,12 +78,12 @@ public abstract class AbstractRemoteMana
protected DNSService dnsservice;
protected MockFileSystem filesystem;
private MockVirtualUserTableManagementService vutManagement;
- protected ProtocolHandlerChainImpl chain;
+ protected JamesProtocolHandlerChain chain;
protected void setUp() throws Exception {
setUpFakeLoader();
- chain = new ProtocolHandlerChainImpl();
+ chain = new JamesProtocolHandlerChain();
chain.setInstanceFactory(serviceManager);
chain.setLog(new SimpleLog("ChainLog"));
@@ -100,7 +100,7 @@ public abstract class AbstractRemoteMana
protected void finishSetUp(RemoteManagerTestConfiguration testConfiguration)
throws Exception {
testConfiguration.init();
- chain.configure(testConfiguration.configurationAt("handler.handlerchain"));
+ chain.configure(testConfiguration);
chain.init();
initRemoteManager(testConfiguration);
}
Modified: james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/AbstractSMTPServerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/AbstractSMTPServerTest.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/AbstractSMTPServerTest.java (original)
+++ james/server/trunk/smtpserver/src/test/java/org/apache/james/smtpserver/AbstractSMTPServerTest.java Fri Oct 8 17:38:50 2010
@@ -51,7 +51,7 @@ import org.apache.james.services.FileSys
import org.apache.james.services.MailServer;
import org.apache.james.services.MockFileSystem;
import org.apache.james.services.MockMailServer;
-import org.apache.james.socket.netty.ProtocolHandlerChainImpl;
+import org.apache.james.socket.JamesProtocolHandlerChain;
import org.apache.james.test.mock.DummyVirtualUserTableStore;
import org.apache.james.userrepository.MockUsersRepository;
import org.apache.james.util.TestUtil;
@@ -150,7 +150,7 @@ public abstract class AbstractSMTPServer
protected MockMailStore store;
protected MockFileSystem fileSystem;
protected SMTPServerDNSServiceAdapter dnsAdapter;
- protected ProtocolHandlerChainImpl chain;
+ protected JamesProtocolHandlerChain chain;
public AbstractSMTPServerTest() {
super("AsyncSMTPServerTest");
@@ -164,7 +164,7 @@ public abstract class AbstractSMTPServer
m_testConfiguration = new SMTPTestConfiguration(m_smtpListenerPort);
- chain = new ProtocolHandlerChainImpl();
+ chain = new JamesProtocolHandlerChain();
chain.setInstanceFactory(m_serviceManager);
chain.setLog(log);
setUpSMTPServer();
@@ -175,7 +175,7 @@ public abstract class AbstractSMTPServer
protected void finishSetUp(SMTPTestConfiguration testConfiguration) throws Exception {
testConfiguration.init();
- chain.configure(testConfiguration.configurationAt("handler.handlerchain"));
+ chain.configure(testConfiguration);
chain.init();
initSMTPServer(testConfiguration);
Modified: james/server/trunk/spring-common/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/pom.xml?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/pom.xml (original)
+++ james/server/trunk/spring-common/pom.xml Fri Oct 8 17:38:50 2010
@@ -78,21 +78,9 @@
<dependencies>
<dependency>
<groupId>org.apache.james</groupId>
- <artifactId>james-server-user-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.james</groupId>
<artifactId>james-server-core-api</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.james</groupId>
- <artifactId>james-server-mail-library</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.james.protocols</groupId>
- <artifactId>protocols-api</artifactId>
- </dependency>
- <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
Modified: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringInstanceFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringInstanceFactory.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringInstanceFactory.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringInstanceFactory.java Fri Oct 8 17:38:50 2010
@@ -19,22 +19,65 @@
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.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
import org.apache.james.services.InstanceFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+/**
+ * {@link InstanceFactory} implementation which use a {@link BeanFactory} to handle the loading / injection of resources
+ *
+ *
+ */
public class SpringInstanceFactory implements InstanceFactory, BeanFactoryAware{
private ConfigurableListableBeanFactory cFactory;
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.services.InstanceFactory#newInstance(java.lang.Class)
+ */
+ public <T> T newInstance(Class<T> clazz) throws InstanceException {
+ return newInstance(clazz, null, null);
+ }
+
/*
* (non-Javadoc)
- * @see org.apache.james.api.kernel.InstanceFactory#newInstance(java.lang.String)
+ * @see org.apache.james.services.InstanceFactory#newInstance(java.lang.Class, org.apache.commons.logging.Log, org.apache.commons.configuration.HierarchicalConfiguration)
*/
- public Object newInstance(String className) throws InstanceException, ClassNotFoundException {
- return cFactory.createBean(cFactory.getBeanClassLoader().loadClass(className));
+ @SuppressWarnings("unchecked")
+ public <T> T newInstance(Class<T> clazz, Log log, HierarchicalConfiguration config) throws InstanceException {
+ try {
+ Object obj = clazz.newInstance();
+ if (log != null) {
+ if (obj instanceof LogEnabled) {
+ ((LogEnabled) obj).setLog(log);
+ }
+ }
+ if (config != null) {
+ if (obj instanceof Configurable) {
+ try {
+ ((Configurable) obj).configure(config);
+ } catch (ConfigurationException e) {
+ throw new InstanceException("Unable to config " + obj);
+ }
+ }
+ }
+ cFactory.autowireBean(obj);
+ return (T)cFactory.initializeBean(obj, obj.toString());
+
+ } catch (InstantiationException e) {
+ throw new InstanceException("Unable to instance " + clazz , e);
+ } catch (IllegalAccessException e) {
+ throw new InstanceException("Unable to instance " + clazz , e);
+ }
}
/*
Modified: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/CommonsConfigurableBeanPostProcessor.java Fri Oct 8 17:38:50 2010
@@ -19,7 +19,6 @@
package org.apache.james.container.spring.lifecycle;
import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.container.spring.Registry;
import org.apache.james.lifecycle.Configurable;
/**
@@ -27,28 +26,24 @@ import org.apache.james.lifecycle.Config
*
*
*/
-public class CommonsConfigurableBeanPostProcessor extends
- AbstractLifeCycleBeanPostProcessor<Configurable> {
+public class CommonsConfigurableBeanPostProcessor extends RestrictedLifeCycleBeanPostProcessor<Configurable> {
- private Registry<HierarchicalConfiguration> provider;
-
- @Override
- protected void executeLifecycleMethodBeforeInit(Configurable bean, String beanname) throws Exception {
- HierarchicalConfiguration beanConfig = provider.getForComponent(beanname);
- if(beanConfig != null) {
- bean.configure(beanConfig);
- }
- }
+ private ConfigurationProvider provider;
+ @Override
+ protected void executeLifecycleMethodBeforeInitChecked(Configurable bean, String beanname) throws Exception {
+ HierarchicalConfiguration config = provider.getConfiguration(beanname);
+ bean.configure(config);
+ }
- public void setConfigurationRegistry(Registry<HierarchicalConfiguration> provider) {
- this.provider = provider;
- }
-
- @Override
- protected Class<Configurable> getLifeCycleInterface() {
- return Configurable.class;
- }
+ public void setConfigurationProvider(ConfigurationProvider provider) {
+ this.provider = provider;
+ }
+
+ @Override
+ protected Class<Configurable> getLifeCycleInterface() {
+ return Configurable.class;
+ }
}
Added: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java?rev=1005919&view=auto
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java (added)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java Fri Oct 8 17:38:50 2010
@@ -0,0 +1,39 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.container.spring.lifecycle;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+
+/**
+ * Load {@link HierarchicalConfiguration} for beans
+ *
+ *
+ */
+public interface ConfigurationProvider {
+
+ /**
+ * Load the configuration for the bean with the given name
+ *
+ * @param beanName
+ * @return config
+ * @throws ConfigurationException
+ */
+ public HierarchicalConfiguration getConfiguration(String beanName) throws ConfigurationException;
+}
Modified: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogEnabledBeanPostProcessor.java Fri Oct 8 17:38:50 2010
@@ -18,8 +18,6 @@
****************************************************************/
package org.apache.james.container.spring.lifecycle;
-import org.apache.commons.logging.Log;
-import org.apache.james.container.spring.Registry;
import org.apache.james.lifecycle.LogEnabled;
/**
@@ -27,21 +25,22 @@ import org.apache.james.lifecycle.LogEna
*
*
*/
-public class LogEnabledBeanPostProcessor extends AbstractLifeCycleBeanPostProcessor<LogEnabled> {
+public class LogEnabledBeanPostProcessor extends RestrictedLifeCycleBeanPostProcessor<LogEnabled> {
- private Registry<Log> provider;
+ private LogProvider provider;
+
+ @Override
+ protected Class<LogEnabled> getLifeCycleInterface() {
+ return LogEnabled.class;
+ }
+
+ public void setLogProvider(LogProvider provider) {
+ this.provider = provider;
+ }
+
+ @Override
+ protected void executeLifecycleMethodBeforeInitChecked(LogEnabled bean, String beanname) throws Exception {
+ bean.setLog(provider.getLog(beanname));
+ }
- @Override
- protected void executeLifecycleMethodBeforeInit(LogEnabled bean, String beanname) throws Exception {
- bean.setLog(provider.getForComponent(beanname));
- }
-
- @Override
- protected Class<LogEnabled> getLifeCycleInterface() {
- return LogEnabled.class;
- }
-
- public void setLogRegistry(Registry<Log> provider) {
- this.provider = provider;
- }
}
Added: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java?rev=1005919&view=auto
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java (added)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/LogProvider.java Fri Oct 8 17:38:50 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.container.spring.lifecycle;
+
+import org.apache.commons.logging.Log;
+
+/**
+ * Provide {@link Log} instances for Beans
+ *
+ *
+ */
+public interface LogProvider {
+
+ /**
+ * Return the Log for the bean with the given name
+ *
+ * @param name
+ * @return log
+ */
+ public Log getLog(String beanName);
+}
Copied: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationProvider.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationRegistry.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationProvider.java?p2=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationProvider.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationRegistry.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationRegistry.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringConfigurationProvider.java Fri Oct 8 17:38:50 2010
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.james.container.spring.lifecycle;
-public class OsgiSpringConfigurationRegistry extends SpringConfigurationRegistry{
+public class OsgiSpringConfigurationProvider extends SpringConfigurationProvider{
/**
* Load configuration from classpath.
Copied: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogProvider.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogRegistry.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogProvider.java?p2=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogProvider.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogRegistry.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogRegistry.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/OsgiSpringLogProvider.java Fri Oct 8 17:38:50 2010
@@ -21,7 +21,7 @@ package org.apache.james.container.sprin
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-public class OsgiSpringLogRegistry extends SpringLogRegistry{
+public class OsgiSpringLogProvider extends SpringLogProvider{
/**
* Use {@link LogFactory} to create a Log
Added: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/RestrictedLifeCycleBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/RestrictedLifeCycleBeanPostProcessor.java?rev=1005919&view=auto
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/RestrictedLifeCycleBeanPostProcessor.java (added)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/RestrictedLifeCycleBeanPostProcessor.java Fri Oct 8 17:38:50 2010
@@ -0,0 +1,81 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.container.spring.lifecycle;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * {@link AbstractLifeCycleBeanPostProcessor} sub-class which will only try to apply LifeCycle callbacks on beans which are registered on the {@link ApplicationContext}.
+ *
+ *
+ * @param <T>
+ */
+public abstract class RestrictedLifeCycleBeanPostProcessor<T> extends AbstractLifeCycleBeanPostProcessor<T> implements ApplicationContextAware{
+
+ private ApplicationContext context;
+
+ @Override
+ protected final void executeLifecycleMethodAfterInit(T bean, String beanname) throws Exception {
+ // check if the bean is registered in the context. If not it was create by the InstanceFactory and so there is no need to execute the callback
+ if (context.containsBeanDefinition(beanname)) {
+ executeLifecycleMethodAfterInitChecked(bean, beanname);
+ }
+ }
+
+ @Override
+ protected final void executeLifecycleMethodBeforeInit(T bean, String beanname) throws Exception {
+ // check if the bean is registered in the context. If not it was create by the InstanceFactory and so there is no need to execute the callback
+ if (context.containsBeanDefinition(beanname)) {
+ executeLifecycleMethodBeforeInitChecked(bean, beanname);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
+ */
+ public void setApplicationContext(ApplicationContext context) throws BeansException {
+ this.context = context;
+ }
+
+ /**
+ * Execute method on bean which is registered in the {@link ApplicationContext}. Subclasses should override this if needed
+ *
+ * @param bean
+ * @param beanname
+ * @throws Exception
+ */
+ protected void executeLifecycleMethodAfterInitChecked(T bean, String beanname) throws Exception {
+
+ }
+
+ /**
+ * Execute method on bean which is registered in the {@link ApplicationContext}. Subclasses should override this if needed
+ *
+ * @param bean
+ * @param beanname
+ * @throws Exception
+ */
+ protected void executeLifecycleMethodBeforeInitChecked(T bean, String beanname) throws Exception {
+
+ }
+
+}
Copied: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationRegistry.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java?p2=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationRegistry.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationRegistry.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringConfigurationProvider.java Fri Oct 8 17:38:50 2010
@@ -26,7 +26,6 @@ import java.util.Map;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.james.container.spring.Registry;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
@@ -37,33 +36,12 @@ import org.springframework.core.io.Resou
*
*
*/
-public class SpringConfigurationRegistry implements Registry<HierarchicalConfiguration>, ResourceLoaderAware, InitializingBean {
+public class SpringConfigurationProvider implements ConfigurationProvider, ResourceLoaderAware, InitializingBean {
private ResourceLoader loader;
private Map<String,HierarchicalConfiguration> confMap = new HashMap<String,HierarchicalConfiguration>();
private Map<String,String> resources;
- /*
- * (non-Javadoc)
- * @see org.apache.james.container.spring.Registry#getForComponent(java.lang.String)
- */
- public HierarchicalConfiguration getForComponent(String name)
- throws RegistryException {
- HierarchicalConfiguration conf = confMap.get(name);
- if (conf != null) {
- return conf;
- } else {
- Resource r = loader.getResource(getConfigPrefix()+ name + ".xml");
- if (r.exists()) {
- try {
- return getConfig(r);
- } catch (Exception e) {
- throw new RegistryException("Unable to load configuration for component " + name,e);
- }
- }
- }
- throw new RegistryException("Unable to load configuration for component " + name);
- }
/**
@@ -117,9 +95,26 @@ public class SpringConfigurationRegistry
while (it.hasNext()) {
String key = it.next();
String value = resources.get(key);
- confMap.put(key,getForComponent(value));
+ confMap.put(key,getConfiguration(value));
+ }
+ }
+ }
+
+ public HierarchicalConfiguration getConfiguration(String name) throws ConfigurationException {
+ HierarchicalConfiguration conf = confMap.get(name);
+ if (conf != null) {
+ return conf;
+ } else {
+ Resource r = loader.getResource(getConfigPrefix()+ name + ".xml");
+ if (r.exists()) {
+ try {
+ return getConfig(r);
+ } catch (Exception e) {
+ throw new ConfigurationException("Unable to load configuration for component " + name, e);
+ }
}
}
+ throw new ConfigurationException("Unable to load configuration for component " + name);
}
}
Copied: james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogProvider.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogRegistry.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogProvider.java?p2=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogProvider.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogRegistry.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogRegistry.java (original)
+++ james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/lifecycle/SpringLogProvider.java Fri Oct 8 17:38:50 2010
@@ -24,7 +24,6 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.Log4JLogger;
-import org.apache.james.container.spring.Registry;
import org.springframework.beans.factory.InitializingBean;
/**
@@ -32,25 +31,12 @@ import org.springframework.beans.factory
*
*
*/
-public class SpringLogRegistry implements Registry<Log>, InitializingBean {
+public class SpringLogProvider implements LogProvider, InitializingBean {
private final Map<String,Log> logMap = new HashMap<String,Log>();
private Map<String, String> logs;
private final static String PREFIX = "james.";
- /*
- * (non-Javadoc)
- * @see org.apache.james.container.spring.Registry#getForComponent(java.lang.String)
- */
- public Log getForComponent(String componentname) throws RegistryException{
- Log log = logMap.get(componentname);
- if (log != null) {
- return log;
- } else {
- return createLog(PREFIX + componentname);
- }
- }
-
/**
* Use {@link Log4JLogger} to create the Log
*
@@ -88,4 +74,13 @@ public class SpringLogRegistry implement
}
}
}
+
+ public Log getLog(String name) {
+ Log log = logMap.get(name);
+ if (log != null) {
+ return log;
+ } else {
+ return createLog(PREFIX + name);
+ }
+ }
}
Modified: james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml?rev=1005919&r1=1005918&r2=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml (original)
+++ james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml Fri Oct 8 17:38:50 2010
@@ -70,14 +70,13 @@
-->
<bean class="org.apache.james.container.spring.lifecycle.CommonsConfigurableBeanPostProcessor">
- <property name="configurationRegistry" ref="configurationRegistry" />
+ <property name="configurationProvider" ref="configurationProvider" />
<property name="order" value="1" />
</bean>
- <bean id="configurationRegistry" class="org.apache.james.container.spring.lifecycle.SpringConfigurationRegistry">
+ <bean id="configurationProvider" class="org.apache.james.container.spring.lifecycle.SpringConfigurationProvider">
<property name="configurationMappings">
<map>
- <entry key="mailboxmanager" value="imapserver" />
<entry key="mailetcontext" value="James"/>
<entry key="lmtpProtocolHandlerChain" value="lmtpserver"/>
<entry key="smtpProtocolHandlerChain" value="smtpserver"/>
@@ -99,11 +98,11 @@
</bean>
<bean class="org.apache.james.container.spring.lifecycle.LogEnabledBeanPostProcessor">
- <property name="logRegistry" ref="logRegistry" />
+ <property name="logProvider" ref="logProvider" />
<property name="order" value="0" />
</bean>
- <bean id="logRegistry" class="org.apache.james.container.spring.lifecycle.SpringLogRegistry">
+ <bean id="logProvider" class="org.apache.james.container.spring.lifecycle.SpringLogProvider">
<property name="logMappings">
<map>
<entry key="lmtpProtocolHandlerChain" value="lmtpserver"/>
@@ -112,7 +111,6 @@
<entry key="remoteProtocolHandlerChain" value="remoteManager"/>
<entry key="mailProcessor" value="spoolmanager"/>
<entry key="mailserver" value="James"/>
- <entry key="poster" value="James"/>
</map>
</property>
</bean>
@@ -204,9 +202,7 @@
<property name="protocolHandlerChain" ref="remoteProtocolHandlerChain"/>
</bean>
- <bean id="remoteProtocolHandlerChain" class="org.apache.james.container.spring.SpringProtocolHandlerChain">
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
+ <bean id="remoteProtocolHandlerChain" class="org.apache.james.socket.JamesProtocolHandlerChain">
<property name="coreHandlersPackage" value="org.apache.james.remotemanager.core.CoreCmdHandlerLoader"/>
</bean>
@@ -218,9 +214,7 @@
<property name="protocolHandlerChain" ref="pop3ProtocolHandlerChain"/>
</bean>
- <bean id="pop3ProtocolHandlerChain" class="org.apache.james.container.spring.SpringProtocolHandlerChain">
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
+ <bean id="pop3ProtocolHandlerChain" class="org.apache.james.socket.JamesProtocolHandlerChain">
<property name="coreHandlersPackage" value="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
</bean>
@@ -229,9 +223,7 @@
<property name="protocolHandlerChain" ref="smtpProtocolHandlerChain"/>
</bean>
- <bean id="smtpProtocolHandlerChain" class="org.apache.james.container.spring.SpringProtocolHandlerChain">
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
+ <bean id="smtpProtocolHandlerChain" class="org.apache.james.socket.JamesProtocolHandlerChain">
<property name="coreHandlersPackage" value="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
</bean>
@@ -240,9 +232,7 @@
<property name="protocolHandlerChain" ref="lmtpProtocolHandlerChain"/>
</bean>
- <bean id="lmtpProtocolHandlerChain" class="org.apache.james.container.spring.SpringProtocolHandlerChain">
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
+ <bean id="lmtpProtocolHandlerChain" class="org.apache.james.socket.JamesProtocolHandlerChain">
<property name="coreHandlersPackage" value="org.apache.james.lmtpserver.CoreCmdHandlerLoader"/>
</bean>
@@ -250,14 +240,12 @@
<bean id="fetchmail" class="org.apache.james.fetchmail.FetchScheduler" />
<!-- The High Level Storage block -->
- <bean id="mailstore" class="org.apache.james.container.spring.SpringMailStore" />
+ <bean id="mailstore" class="org.apache.james.mailstore.JamesMailStore" />
<!-- The User Storage block -->
- <bean id="users-store" class="org.apache.james.container.spring.SpringUsersStore" >
+ <bean id="users-store" class="org.apache.james.impl.user.JamesUsersStore" >
<property name="defaultRepository" value="LocalUsers"/>
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
</bean>
<!-- This is needed to link the smtpserver to the local user repository
@@ -281,10 +269,8 @@
<bean id="virtualusertablemanagementservice" class="org.apache.james.impl.vut.VirtualUserTableManagement" />
<!-- VirtualUserTable Store -->
- <bean id="virtualusertable-store" class="org.apache.james.container.spring.SpringVirtualUserTableStore">
+ <bean id="virtualusertable-store" class="org.apache.james.impl.vut.JamesVirtualUserTableStore">
<property name="defaultTable" value="DefaultVirtualUserTable"/>
- <property name="logRegistry" ref="logRegistry"/>
- <property name="configurationRegistry" ref="configurationRegistry"/>
</bean>
Copied: james/server/trunk/user-library/src/main/java/org/apache/james/impl/AbstractStore.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/AbstractStore.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/main/java/org/apache/james/impl/AbstractStore.java?p2=james/server/trunk/user-library/src/main/java/org/apache/james/impl/AbstractStore.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/AbstractStore.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/AbstractStore.java (original)
+++ james/server/trunk/user-library/src/main/java/org/apache/james/impl/AbstractStore.java Fri Oct 8 17:38:50 2010
@@ -16,119 +16,79 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.container.spring;
+package org.apache.james.impl;
-import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.commons.logging.Log;
-import org.apache.james.container.spring.Registry.RegistryException;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.FatalBeanException;
-import org.springframework.beans.factory.BeanNameAware;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.BeanDefinitionRegistry;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
+import org.apache.james.lifecycle.Configurable;
+import org.apache.james.lifecycle.LogEnabled;
+import org.apache.james.services.InstanceFactory;
/**
* Abstract base class which implement Store behavior based on Spring
*
*/
-public abstract class AbstractStore implements BeanFactoryPostProcessor, BeanNameAware, ApplicationContextAware{
+public abstract class AbstractStore<E> implements Configurable, LogEnabled {
- protected String beanName;
- protected ApplicationContext context;
- protected Registry<Log> logProvider;
- protected Registry<HierarchicalConfiguration> confProvider;
protected Log log;
- protected final List<String> objects = Collections.synchronizedList(new ArrayList<String>());
-
- public void setConfigurationRegistry(Registry<HierarchicalConfiguration> confProvider) {
- this.confProvider = confProvider;
+ protected final Map<String, E> objects = Collections.synchronizedMap(new HashMap<String, E>());
+ private InstanceFactory factory;
+ private HierarchicalConfiguration config;
+
+
+ @Resource(name="instanceFactory")
+ public void setInstanceFactory(InstanceFactory factory) {
+ this.factory = factory;
}
-
- public void setLogRegistry(Registry<Log> logProvider) {
- this.logProvider = logProvider;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * org.springframework.beans.factory.BeanNameAware#setBeanName(java.lang
- * .String)
- */
- public void setBeanName(String beanName) {
- this.beanName = beanName;
+ public void setLog(Log log) {
+ this.log = log;
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.springframework.context.ApplicationContextAware#setApplicationContext
- * (org.springframework.context.ApplicationContext)
- */
- public void setApplicationContext(ApplicationContext context) throws BeansException {
- this.context = context;
+ public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ this.config = config;
}
- /*
- * (non-Javadoc)
- * @see org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
- */
- public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
- // Store the log object for later usage
-
- BeanDefinitionRegistry registry = (BeanDefinitionRegistry) arg0;
-
- try {
- log = logProvider.getForComponent(beanName);
- List<HierarchicalConfiguration> repConfs = getSubConfigurations(confProvider.getForComponent(beanName));
- ClassLoader theClassLoader = arg0.getBeanClassLoader();
- for (int i = 0; i < repConfs.size(); i++) {
- final HierarchicalConfiguration repConf = repConfs.get(i);
- String repName = repConf.getString("[@name]", null);
- String repClass = repConf.getString("[@class]");
-
- if (repName == null) {
- repName = repClass;
- }
-
- if (log.isDebugEnabled()) {
- log.debug("Starting " + repClass);
- }
-
- Class<?> objectClass = (Class<?>) theClassLoader.loadClass(repClass);
-
- // register configuration and log for the bean
- confProvider.registerForComponent(repName, repConf);
- logProvider.registerForComponent(repName, log);
-
- registry.registerBeanDefinition(repName, BeanDefinitionBuilder.rootBeanDefinition(objectClass).setLazyInit(false).getBeanDefinition());
-
- objects.add(repName);
-
- if (log.isInfoEnabled()) {
- StringBuffer logBuffer = new StringBuffer(64).append("Bean ").append(repName).append(" started.");
- log.info(logBuffer.toString());
- }
+ @PostConstruct
+ @SuppressWarnings("unchecked")
+ public void init() throws Exception {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ List<HierarchicalConfiguration> repConfs = getSubConfigurations(config);
+ for (int i = 0; i < repConfs.size(); i++) {
+ final HierarchicalConfiguration repConf = repConfs.get(i);
+ String repName = repConf.getString("[@name]", null);
+ String repClass = repConf.getString("[@class]");
+
+ if (repName == null) {
+ repName = repClass;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug("Starting " + repClass);
+ }
+
+
+ objects.put(repName, (E)factory.newInstance(loader.loadClass(repClass), log, repConf));
+
+ if (log.isInfoEnabled()) {
+ StringBuffer logBuffer = new StringBuffer(64).append("Bean ").append(repName).append(" started.");
+ log.info(logBuffer.toString());
}
- } catch (RegistryException e) {
- throw new FatalBeanException("Unable to read configuration for " + beanName, e);
- } catch (ClassNotFoundException e) {
- throw new FatalBeanException("Unable to instance class", e);
}
-
+
}
+
protected abstract List<HierarchicalConfiguration> getSubConfigurations(HierarchicalConfiguration rootConf);
}
Copied: james/server/trunk/user-library/src/main/java/org/apache/james/impl/user/JamesUsersStore.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringUsersStore.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/main/java/org/apache/james/impl/user/JamesUsersStore.java?p2=james/server/trunk/user-library/src/main/java/org/apache/james/impl/user/JamesUsersStore.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringUsersStore.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringUsersStore.java (original)
+++ james/server/trunk/user-library/src/main/java/org/apache/james/impl/user/JamesUsersStore.java Fri Oct 8 17:38:50 2010
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.container.spring;
+package org.apache.james.impl.user;
import java.util.Iterator;
import java.util.List;
@@ -24,15 +24,13 @@ import java.util.List;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.james.api.user.UsersRepository;
import org.apache.james.api.user.UsersStore;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.apache.james.impl.AbstractStore;
/**
- * UsersStore implementation which will parse the configuration file for users-store and add every configured repository
- * to the Spring BeanFactory.
- * @author norman
+ * UsersStore implementation which will parse the configuration file for users-store and add every configured repository
*
*/
-public class SpringUsersStore extends AbstractStore implements UsersStore {
+public class JamesUsersStore extends AbstractStore<UsersRepository> implements UsersStore {
private String defaultName;
@@ -47,15 +45,8 @@ public class SpringUsersStore extends Ab
name = defaultName;
}
- UsersRepository response = null;
+ UsersRepository response = objects.get(name);
- if (objects.contains(name)) {
- try {
- response = (UsersRepository) context.getBean(name, UsersRepository.class);
- } catch (NoSuchBeanDefinitionException e) {
- // Just catch the exception
- }
- }
if ((response == null) && (log.isWarnEnabled())) {
log.warn("No users repository called: " + name);
}
@@ -72,7 +63,7 @@ public class SpringUsersStore extends Ab
* @see org.apache.james.api.user.UsersStore#getRepositoryNames()
*/
public Iterator<String> getRepositoryNames() {
- return objects.iterator();
+ return objects.keySet().iterator();
}
@SuppressWarnings("unchecked")
Copied: james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/JamesVirtualUserTableStore.java (from r1005333, james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringVirtualUserTableStore.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/JamesVirtualUserTableStore.java?p2=james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/JamesVirtualUserTableStore.java&p1=james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringVirtualUserTableStore.java&r1=1005333&r2=1005919&rev=1005919&view=diff
==============================================================================
--- james/server/trunk/spring-common/src/main/java/org/apache/james/container/spring/SpringVirtualUserTableStore.java (original)
+++ james/server/trunk/user-library/src/main/java/org/apache/james/impl/vut/JamesVirtualUserTableStore.java Fri Oct 8 17:38:50 2010
@@ -16,16 +16,16 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.container.spring;
+package org.apache.james.impl.vut;
import java.util.List;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.james.api.vut.VirtualUserTable;
import org.apache.james.api.vut.VirtualUserTableStore;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.apache.james.impl.AbstractStore;
-public class SpringVirtualUserTableStore extends AbstractStore implements VirtualUserTableStore{
+public class JamesVirtualUserTableStore extends AbstractStore<VirtualUserTable> implements VirtualUserTableStore{
private String defaultName;
@@ -49,15 +49,8 @@ public class SpringVirtualUserTableStore
name = defaultName;
}
- VirtualUserTable response = null;
+ VirtualUserTable response = objects.get(name);
- if (objects.contains(name)) {
- try {
- response = (VirtualUserTable) context.getBean(name, VirtualUserTable.class);
- } catch (NoSuchBeanDefinitionException e) {
- // Just catch the exception
- }
- }
if ((response == null) && (log.isWarnEnabled())) {
log.warn("No VirtualUserTable called: " + name);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org