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 2009/11/20 15:51:29 UTC
svn commit: r882589 - in /james/server/trunk:
core-library/src/test/java/org/apache/james/test/mock/james/
phoenix-deployment/src/conf/ spoolmanager-function/
spoolmanager-function/src/main/java/org/apache/james/
spoolmanager-function/src/main/java/org...
Author: norman
Date: Fri Nov 20 14:51:20 2009
New Revision: 882589
URL: http://svn.apache.org/viewvc?rev=882589&view=rev
Log:
More decoupling of Avalon to move to Guice (JAMES-893)
Added:
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/AvalonJamesMailetLoader.xinfo
- copied unchanged from r829946, james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesMailetLoader.xinfo
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/AvalonJamesMatcherLoader.xinfo
- copied unchanged from r829946, james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesMatcherLoader.xinfo
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/AvalonJamesSpoolManager.xinfo
- copied unchanged from r829946, james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesSpoolManager.xinfo
Removed:
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesMailetLoader.xinfo
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesMatcherLoader.xinfo
james/server/trunk/spoolmanager-function/src/main/resources/org/apache/james/transport/JamesSpoolManager.xinfo
Modified:
james/server/trunk/core-library/src/test/java/org/apache/james/test/mock/james/InMemorySpoolRepository.java
james/server/trunk/phoenix-deployment/src/conf/james-assembly.xml
james/server/trunk/spoolmanager-function/pom.xml
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/James.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMailetLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMatcherLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/LinearProcessor.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetConfigImpl.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetContextWrapper.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetLoader.java
james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
james/server/trunk/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java
Modified: james/server/trunk/core-library/src/test/java/org/apache/james/test/mock/james/InMemorySpoolRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/test/java/org/apache/james/test/mock/james/InMemorySpoolRepository.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/core-library/src/test/java/org/apache/james/test/mock/james/InMemorySpoolRepository.java (original)
+++ james/server/trunk/core-library/src/test/java/org/apache/james/test/mock/james/InMemorySpoolRepository.java Fri Nov 20 14:51:20 2009
@@ -55,7 +55,7 @@
protected final static boolean DEEP_DEBUG = true;
private Lock lock;
private MockLogger logger;
- private Hashtable spool;
+ private Hashtable<String, Mail> spool;
private MockLogger getLogger() {
if (logger == null) {
@@ -233,10 +233,10 @@
* @throws MessagingException
* @since 2.2.0
*/
- public void remove(Collection mails) throws MessagingException {
- Iterator delList = mails.iterator();
+ public void remove(Collection<Mail> mails) throws MessagingException {
+ Iterator<Mail> delList = mails.iterator();
while (delList.hasNext()) {
- remove((Mail)delList.next());
+ remove(delList.next());
}
}
@@ -271,12 +271,12 @@
* @return an <code>Iterator</code> over the list of keys in the repository
*
*/
- public Iterator list() {
+ public Iterator<String> list() {
// Fix ConcurrentModificationException by cloning
// the keyset before getting an iterator
- final ArrayList clone;
+ final ArrayList<String> clone;
synchronized(spool) {
- clone = new ArrayList(spool.keySet());
+ clone = new ArrayList<String>(spool.keySet());
}
return clone.iterator();
}
@@ -377,8 +377,8 @@
getLogger().debug("Method accept(Filter) called");
}
while (!Thread.currentThread().isInterrupted()) try {
- for (Iterator it = list(); it.hasNext(); ) {
- String s = it.next().toString();
+ for (Iterator<String> it = list(); it.hasNext(); ) {
+ String s = it.next();
if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {
StringBuffer logBuffer =
new StringBuffer(64)
@@ -426,7 +426,7 @@
*
*/
public InMemorySpoolRepository() {
- spool = new Hashtable();
+ spool = new Hashtable<String,Mail>();
lock = new Lock();
}
@@ -436,9 +436,9 @@
public void clear() {
if (spool != null) {
- Iterator i = list();
+ Iterator<String> i = list();
while (i.hasNext()) {
- String key = (String) i.next();
+ String key = i.next();
try {
remove(key);
} catch (MessagingException e) {
@@ -454,7 +454,7 @@
public String toString() {
StringBuffer result = new StringBuffer();
result.append(super.toString());
- Iterator i = list();
+ Iterator<String> i = list();
while (i.hasNext()) {
result.append("\n\t"+i.next());
}
Modified: james/server/trunk/phoenix-deployment/src/conf/james-assembly.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/conf/james-assembly.xml?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/conf/james-assembly.xml (original)
+++ james/server/trunk/phoenix-deployment/src/conf/james-assembly.xml Fri Nov 20 14:51:20 2009
@@ -60,18 +60,18 @@
</block>
<!-- The James Spool Manager block -->
- <block name="spoolmanager" class="org.apache.james.transport.JamesSpoolManager" >
+ <block name="spoolmanager" class="org.apache.james.transport.AvalonJamesSpoolManager" >
<provide name="spoolrepository" role="org.apache.james.services.SpoolRepository"/>
<provide name="matcherpackages" role="org.apache.james.transport.MatcherLoader"/>
<provide name="mailetpackages" role="org.apache.james.transport.MailetLoader"/>
<proxy disable='true'/>
</block>
- <block name="matcherpackages" class="org.apache.james.transport.JamesMatcherLoader" >
+ <block name="matcherpackages" class="org.apache.james.transport.AvalonJamesMatcherLoader" >
<proxy disable='true'/>
</block>
- <block name="mailetpackages" class="org.apache.james.transport.JamesMailetLoader" >
+ <block name="mailetpackages" class="org.apache.james.transport.AvalonJamesMailetLoader" >
<proxy disable='true'/>
</block>
Modified: james/server/trunk/spoolmanager-function/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/pom.xml?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/pom.xml (original)
+++ james/server/trunk/spoolmanager-function/pom.xml Fri Nov 20 14:51:20 2009
@@ -96,6 +96,32 @@
<groupId>org.apache.james</groupId>
<artifactId>apache-mime4j</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.guice</groupId>
+ <artifactId>guice</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.guiceyfruit</groupId>
+ <artifactId>guiceyfruit-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>spring-aopalliance</groupId>
+ <artifactId>spring-aopalliance</artifactId>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-server-avalon-guice-bridge-api</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.james</groupId>
<artifactId>apache-standard-mailets</artifactId>
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/James.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/James.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/James.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/James.java Fri Nov 20 14:51:20 2009
@@ -440,7 +440,11 @@
DefaultConfiguration conf = new DefaultConfiguration("mailet", "generated:James.initialize()");
MailetConfigImpl configImpl = new MailetConfigImpl();
configImpl.setMailetName("LocalDelivery");
- configImpl.setConfiguration(conf);
+ try {
+ configImpl.setConfiguration(new ConfigurationAdapter(conf));
+ } catch (org.apache.commons.configuration.ConfigurationException e) {
+ throw new MessagingException(e.getMessage());
+ }
configImpl.setMailetContext(this);
localDeliveryMailet = new LocalDelivery();
localDeliveryMailet.init(configImpl);
Added: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java?rev=882589&view=auto
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java (added)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractAvalonJamesLoader.java Fri Nov 20 14:51:20 2009
@@ -0,0 +1,97 @@
+/****************************************************************
+ * 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.transport;
+
+import javax.mail.MessagingException;
+
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.impl.AvalonLogger;
+import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.bridge.GuiceInjected;
+import org.apache.james.util.ConfigurationAdapter;
+import org.apache.mailet.Mailet;
+import org.guiceyfruit.jsr250.Jsr250Module;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+
+public abstract class AbstractAvalonJamesLoader implements Configurable, Initializable, LogEnabled, GuiceInjected {
+
+
+
+ private ConfigurationAdapter config;
+ private AvalonLogger logger;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+ */
+ public void configure(Configuration config) throws ConfigurationException {
+ try {
+ this.config = new ConfigurationAdapter(config);
+ } catch (org.apache.commons.configuration.ConfigurationException e) {
+ throw new ConfigurationException("Unable to convert configuration", e);
+ }
+ }
+
+
+ /**
+ * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(org.apache.avalon.framework.logger.Logger)
+ */
+ public void enableLogging(Logger logger) {
+ this.logger = new AvalonLogger(logger);
+ }
+
+
+ protected class Module extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(org.apache.commons.configuration.HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(config);
+ bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
+ bind(LoaderService.class).annotatedWith(Names.named("org.apache.james.LoaderService")).toProvider(new Provider<LoaderService>() {
+
+ public LoaderService get() {
+ return new MyLoaderService();
+ }
+
+ // Mimic the loaderservice
+ class MyLoaderService implements LoaderService {
+ Injector injector = Guice.createInjector(new Module(), new Jsr250Module());
+
+ public <T> T load(Class<T> type) {
+ return injector.getInstance(type);
+ }
+
+ }
+ });
+ }
+
+ }
+}
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AbstractLoader.java Fri Nov 20 14:51:20 2009
@@ -19,14 +19,16 @@
package org.apache.james.transport;
+import java.util.List;
import java.util.Vector;
+import javax.annotation.PostConstruct;
import javax.annotation.Resource;
-import org.apache.avalon.framework.configuration.Configurable;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
+
+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.mailet.MailetContext;
import org.apache.mailet.MailetException;
@@ -34,7 +36,7 @@
/**
* Common services for loaders.
*/
-public abstract class AbstractLoader extends AbstractLogEnabled implements Configurable {
+public abstract class AbstractLoader {
/**
* The list of packages that may contain Mailets or matchers
@@ -48,6 +50,10 @@
private LoaderService loaderService;
+ private Log logger;
+
+ private HierarchicalConfiguration config;
+
/**
* Gets the loader service used by this instance.
@@ -66,42 +72,55 @@
this.loaderService = loaderService;
}
+ @Resource(name="org.apache.commons.logging.Log")
+ public final void setLogger(Log logger) {
+ this.logger = logger;
+ }
+
+
+ @Resource(name="org.apache.commons.configuration.Configuration")
+ public final void setConfiguration(HierarchicalConfiguration config) {
+ this.config = config;
+ }
/**
* Set the MailetContext
*
* @param mailetContext the MailetContext
*/
- // Pheonix used to play games with service names
- // TODO: Support type based injection
- @Resource(name="James")
+ @Resource(name="org.apache.mailet.MailetContext")
public void setMailetContext(MailetContext mailetContext) {
this.mailetContext = mailetContext;
}
+ protected Log getLogger() {
+ return logger;
+ }
protected Object load(String className) throws ClassNotFoundException {
final Object newInstance = loaderService.load(Thread.currentThread().getContextClassLoader().loadClass(className));
return newInstance;
}
- protected void getPackages(Configuration conf, String packageType)
+ @SuppressWarnings("unchecked")
+ protected void getPackages(HierarchicalConfiguration conf, String packageType)
throws ConfigurationException {
packages = new Vector<String>();
packages.addElement("");
- final Configuration[] pkgConfs = conf.getChildren(packageType);
- for (int i = 0; i < pkgConfs.length; i++) {
- Configuration c = pkgConfs[i];
- String packageName = c.getValue();
+ final List<String> pkgConfs = conf.getList(packageType);
+ for (int i = 0; i < pkgConfs.size(); i++) {
+ String packageName = pkgConfs.get(i);
if (!packageName.endsWith(".")) {
packageName += ".";
}
packages.addElement(packageName);
}
}
+
+ @PostConstruct
+ public void init() throws Exception {
+ configure(config);
+ }
- /**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
- */
- public abstract void configure(Configuration arg0) throws ConfigurationException;
+ protected abstract void configure(HierarchicalConfiguration arg0) throws ConfigurationException;
/**
* Gets a human readable description of the loader.
Added: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java?rev=882589&view=auto
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java (added)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMailetLoader.java Fri Nov 20 14:51:20 2009
@@ -0,0 +1,34 @@
+package org.apache.james.transport;
+
+import javax.mail.MessagingException;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.impl.AvalonLogger;
+import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.util.ConfigurationAdapter;
+import org.apache.mailet.Mailet;
+import org.guiceyfruit.jsr250.Jsr250Module;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+
+public class AvalonJamesMailetLoader extends AbstractAvalonJamesLoader implements MailetLoader{
+
+
+
+ private MailetLoader loader;
+ private ConfigurationAdapter config;
+
+
+ public void initialize() throws Exception {
+ loader = Guice.createInjector(new Jsr250Module(), new Module()).getInstance(JamesMailetLoader.class);
+ }
+
+ public Mailet getMailet(String mailetName, Configuration configuration) throws MessagingException {
+ return loader.getMailet(mailetName, configuration);
+ }
+}
Added: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java?rev=882589&view=auto
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java (added)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesMatcherLoader.java Fri Nov 20 14:51:20 2009
@@ -0,0 +1,41 @@
+/****************************************************************
+ * 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.transport;
+
+import javax.mail.MessagingException;
+
+import org.apache.mailet.Matcher;
+import org.guiceyfruit.jsr250.Jsr250Module;
+
+import com.google.inject.Guice;
+
+public class AvalonJamesMatcherLoader extends AbstractAvalonJamesLoader implements MatcherLoader{
+
+ private MatcherLoader loader;
+ public void initialize() throws Exception {
+ loader = Guice.createInjector(new Jsr250Module(), new Module()).getInstance(JamesMatcherLoader.class);
+ }
+
+ public Matcher getMatcher(String matchName) throws MessagingException {
+ return loader.getMatcher(matchName);
+ }
+
+}
Added: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java?rev=882589&view=auto
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java (added)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/AvalonJamesSpoolManager.java Fri Nov 20 14:51:20 2009
@@ -0,0 +1,110 @@
+package org.apache.james.transport;
+
+import java.util.List;
+
+import org.apache.avalon.framework.activity.Disposable;
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.impl.AvalonLogger;
+import org.apache.james.api.kernel.LoaderService;
+import org.apache.james.services.SpoolManager;
+import org.apache.james.services.SpoolRepository;
+import org.apache.james.util.ConfigurationAdapter;
+import org.apache.mailet.MailetConfig;
+import org.apache.mailet.MatcherConfig;
+import org.guiceyfruit.jsr250.Jsr250Module;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.Guice;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+
+public class AvalonJamesSpoolManager implements Initializable, LogEnabled, Serviceable, Configurable, Disposable, SpoolManager{
+
+ private SpoolManager mgmt;
+ private ConfigurationAdapter config;
+ private AvalonLogger logger;
+ private SpoolRepository repos;
+
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+ */
+ public void configure(Configuration config) throws ConfigurationException {
+ try {
+ this.config = new ConfigurationAdapter(config);
+ } catch (org.apache.commons.configuration.ConfigurationException e) {
+ throw new ConfigurationException("Unable to convert configuration", e);
+ }
+ }
+
+
+ /**
+ * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(org.apache.avalon.framework.logger.Logger)
+ */
+ public void enableLogging(Logger logger) {
+ this.logger = new AvalonLogger(logger);
+ }
+
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
+ */
+ public void service(ServiceManager comp) throws ServiceException {
+ repos = (SpoolRepository) comp.lookup(SpoolRepository.ROLE);
+ }
+
+
+ public void dispose() {
+ }
+
+ public List<MailetConfig> getMailetConfigs(String processorName) {
+ return mgmt.getMailetConfigs(processorName);
+ }
+
+ public List<MatcherConfig> getMatcherConfigs(String processorName) {
+ return mgmt.getMatcherConfigs(processorName);
+ }
+
+ public String[] getProcessorNames() {
+ return mgmt.getProcessorNames();
+ }
+
+ protected class Module extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(org.apache.commons.configuration.HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(config);
+ bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
+ bind(SpoolRepository.class).annotatedWith(Names.named("org.apache.james.services.SpoolRepository")).toInstance(repos);
+ bind(LoaderService.class).annotatedWith(Names.named("org.apache.james.LoaderService")).toProvider(new Provider<LoaderService>() {
+
+ public LoaderService get() {
+ return new MyLoaderService();
+ }
+
+ class MyLoaderService implements LoaderService{
+
+ public <T> T load(Class<T> type) {
+ return Guice.createInjector(new Jsr250Module(), new Module()).getInstance(type);
+ }
+
+ }
+
+ });
+
+
+ }
+
+ }
+
+ public void initialize() throws Exception {
+ mgmt = Guice.createInjector(new Jsr250Module(), new Module()).getInstance(JamesSpoolManager.class);
+ }
+}
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMailetLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMailetLoader.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMailetLoader.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMailetLoader.java Fri Nov 20 14:51:20 2009
@@ -19,10 +19,12 @@
package org.apache.james.transport;
+import javax.annotation.PostConstruct;
import javax.mail.MessagingException;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.mailet.Mailet;
/**
* Loads Mailets for use inside James.
@@ -34,15 +36,22 @@
private final String MAILET_PACKAGE = "mailetpackage";
+
+ @PostConstruct
+ public void init() throws Exception {
+ super.init();
+ }
+
/**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ * @see org.apache.james.transport.AbstractLoader#configure(org.apache.commons.configuration.HierarchicalConfiguration)
*/
- public void configure(Configuration conf) throws ConfigurationException {
+ public void configure(HierarchicalConfiguration conf) throws ConfigurationException {
getPackages(conf,MAILET_PACKAGE);
}
/**
- * @see org.apache.james.transport.MailetLoader#getMailet(java.lang.String, org.apache.avalon.framework.configuration.Configuration)
+ * (non-Javadoc)
+ * @see org.apache.james.transport.MailetLoader#getMailet(java.lang.String, org.apache.commons.configuration.Configuration)
*/
public Mailet getMailet(final String mailetName, final Configuration configuration) throws MessagingException {
try {
@@ -54,7 +63,7 @@
final MailetConfigImpl configImpl = new MailetConfigImpl();
configImpl.setMailetName(mailetName);
configImpl.setConfiguration(configuration);
- configImpl.setMailetContext(new MailetContextWrapper(mailetContext, getLogger().getChildLogger(mailetName)));
+ configImpl.setMailetContext(new MailetContextWrapper(mailetContext, getLogger()));
mailet.init(configImpl);
return mailet;
@@ -66,6 +75,7 @@
} catch (MessagingException me) {
throw me;
} catch (Exception e) {
+ e.printStackTrace();
throw loadFailed(mailetName, e);
}
}
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMatcherLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMatcherLoader.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMatcherLoader.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesMatcherLoader.java Fri Nov 20 14:51:20 2009
@@ -20,10 +20,11 @@
package org.apache.james.transport;
+import javax.annotation.PostConstruct;
import javax.mail.MessagingException;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
import org.apache.mailet.Matcher;
/**
* Loads Matchers for use inside James.
@@ -33,10 +34,17 @@
private static final String DISPLAY_NAME = "matcher";
private final String MATCHER_PACKAGE = "matcherpackage";
+
+ @PostConstruct
+ public void init() throws Exception {
+ super.init();
+ }
+
+
/**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
+ * @see org.apache.james.transport.AbstractLoader#configure(org.apache.commons.configuration.HierarchicalConfiguration)
*/
- public void configure(Configuration conf) throws ConfigurationException {
+ public void configure(HierarchicalConfiguration conf) throws ConfigurationException {
getPackages(conf,MATCHER_PACKAGE);
}
@@ -59,7 +67,7 @@
final MatcherConfigImpl configImpl = new MatcherConfigImpl();
configImpl.setMatcherName(matchName);
configImpl.setCondition(condition);
- configImpl.setMailetContext(new MailetContextWrapper(mailetContext, getLogger().getChildLogger(matchName)));
+ configImpl.setMailetContext(new MailetContextWrapper(mailetContext, getLogger()));
matcher.init(configImpl);
return matcher;
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/JamesSpoolManager.java Fri Nov 20 14:51:20 2009
@@ -26,16 +26,15 @@
import java.util.List;
import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.configuration.Configurable;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.container.ContainerUtil;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
+
+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.services.SpoolManager;
import org.apache.james.services.SpoolRepository;
import org.apache.mailet.Mail;
@@ -50,14 +49,7 @@
*
* @version CVS $Revision$ $Date$
*/
-public class JamesSpoolManager
- extends AbstractLogEnabled
- implements Serviceable, Configurable, Runnable, Disposable, SpoolManager {
-
- /**
- * System component manager
- */
- private ServiceManager compMgr;
+public class JamesSpoolManager implements Runnable, SpoolManager {
/**
* The spool that this manager will process
@@ -106,65 +98,69 @@
*/
private MailProcessor processorList;
+ private Log logger;
+
+ private LoaderService loaderService;
+
+ private HierarchicalConfiguration config;
+
/**
* Set the SpoolRepository
*
* @param spool the SpoolRepository
*/
- public void setSpool(SpoolRepository spool) {
+ @Resource(name="org.apache.james.services.SpoolRepository")
+ public void setSpoolRepository(SpoolRepository spool) {
this.spool = spool;
}
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
- */
- public void service(ServiceManager comp) throws ServiceException {
- compMgr = comp;
- setSpool((SpoolRepository) compMgr.lookup(SpoolRepository.ROLE));
- }
- /**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
- */
- public void configure(Configuration conf) throws ConfigurationException {
- numThreads = conf.getChild("threads").getValueAsInteger(1);
+ @Resource(name="org.apache.james.LoaderService")
+ public final void setLoaderService(LoaderService service) {
+ this.loaderService = service;
+ }
+
+ @Resource(name="org.apache.commons.logging.Log")
+ public final void setLogger(Log logger) {
+ this.logger = logger;
+ }
+
+ @Resource(name="org.apache.commons.configuration.Configuration")
+ public final void setConfiguration(HierarchicalConfiguration config) {
+ this.config = config;
+ }
+
+
+ protected void configure(HierarchicalConfiguration config) throws ConfigurationException {
+ numThreads = config.getInt("threads",1);
- String processorClass = conf.getChild("processorClass").getValue("org.apache.james.transport.StateAwareProcessorList");
+ String processorClass = config.getString("processorClass","org.apache.james.transport.StateAwareProcessorList");
try {
- processorList = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();
+ Class<?> cObj = Thread.currentThread().getContextClassLoader().loadClass(processorClass);
+ processorList = (MailProcessor) loaderService.load(cObj);
} catch (Exception e1) {
- getLogger().error("Unable to instantiate spoolmanager processor: "+processorClass, e1);
+ logger.error("Unable to instantiate spoolmanager processor: "+processorClass, e1);
throw new ConfigurationException("Instantiation exception: "+processorClass, e1);
}
- try {
- ContainerUtil.enableLogging(processorList, getLogger());
- ContainerUtil.service(processorList, compMgr);
- } catch (ServiceException e) {
- getLogger().error(e.getMessage(), e);
- throw new ConfigurationException("Servicing failed with error: "+e.getMessage(),e);
- }
-
- ContainerUtil.configure(processorList, conf);
}
/**
* Initialises the spool manager.
*/
@PostConstruct
- public void initialize() throws Exception {
-
- getLogger().info("JamesSpoolManager init...");
-
+ public void init() throws Exception {
+ logger.info("JamesSpoolManager init...");
+ configure(config);
ContainerUtil.initialize(processorList);
- if (getLogger().isInfoEnabled()) {
+ if (logger.isInfoEnabled()) {
StringBuffer infoBuffer =
new StringBuffer(64)
.append("Spooler Manager uses ")
.append(numThreads)
.append(" Thread(s)");
- getLogger().info(infoBuffer.toString());
+ logger.info(infoBuffer.toString());
}
active = true;
@@ -183,11 +179,10 @@
*/
public void run() {
- if (getLogger().isInfoEnabled())
- {
- getLogger().info("Run JamesSpoolManager: "
+ if (logger.isInfoEnabled()) {
+ logger.info("Run JamesSpoolManager: "
+ Thread.currentThread().getName());
- getLogger().info("Spool=" + spool.getClass().getName());
+ logger.info("Spool=" + spool.getClass().getName());
}
numActive++;
@@ -196,13 +191,13 @@
try {
Mail mail = (Mail)spool.accept();
key = mail.getName();
- if (getLogger().isDebugEnabled()) {
+ if (logger.isDebugEnabled()) {
StringBuffer debugBuffer =
new StringBuffer(64)
.append("==== Begin processing mail ")
.append(mail.getName())
.append("====");
- getLogger().debug(debugBuffer.toString());
+ logger.debug(debugBuffer.toString());
}
processorList.service(mail);
@@ -214,13 +209,13 @@
(mail.getRecipients().size() == 0)) {
ContainerUtil.dispose(mail);
spool.remove(key);
- if (getLogger().isDebugEnabled()) {
+ if (logger.isDebugEnabled()) {
StringBuffer debugBuffer =
new StringBuffer(64)
.append("==== Removed from spool mail ")
.append(key)
.append("====");
- getLogger().debug(debugBuffer.toString());
+ logger.debug(debugBuffer.toString());
}
}
else {
@@ -235,10 +230,10 @@
}
mail = null;
} catch (InterruptedException ie) {
- getLogger().info("Interrupted JamesSpoolManager: " + Thread.currentThread().getName());
+ logger.info("Interrupted JamesSpoolManager: " + Thread.currentThread().getName());
} catch (Throwable e) {
- if (getLogger().isErrorEnabled()) {
- getLogger().error("Exception processing " + key + " in JamesSpoolManager.run "
+ if (logger.isErrorEnabled()) {
+ logger.error("Exception processing " + key + " in JamesSpoolManager.run "
+ e.getMessage(), e);
}
/* Move the mail to ERROR state? If we do, it could be
@@ -257,9 +252,8 @@
*/
}
}
- if (getLogger().isInfoEnabled())
- {
- getLogger().info("Stop JamesSpoolManager: " + Thread.currentThread().getName());
+ if (logger.isInfoEnabled()){
+ logger.info("Stop JamesSpoolManager: " + Thread.currentThread().getName());
}
numActive--;
}
@@ -274,8 +268,9 @@
*
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
+ @PreDestroy
public void dispose() {
- getLogger().info("JamesSpoolManager dispose...");
+ logger.info("JamesSpoolManager dispose...");
active = false; // shutdown the threads
for (Thread thread: spoolThreads) {
thread.interrupt(); // interrupt any waiting accept() calls.
@@ -288,7 +283,7 @@
Thread.sleep(1000);
} catch (Exception ignored) {}
}
- getLogger().info("JamesSpoolManager thread shutdown completed.");
+ logger.info("JamesSpoolManager thread shutdown completed.");
ContainerUtil.dispose(processorList);
}
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/LinearProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/LinearProcessor.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/LinearProcessor.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/LinearProcessor.java Fri Nov 20 14:51:20 2009
@@ -32,6 +32,7 @@
import org.apache.avalon.framework.service.Serviceable;
import org.apache.james.core.MailImpl;
import org.apache.james.services.SpoolRepository;
+import org.apache.james.util.ConfigurationAdapter;
import org.apache.mailet.base.MatcherInverter;
import org.apache.mailet.base.GenericMailet;
import org.apache.mailet.base.GenericMatcher;
@@ -625,7 +626,7 @@
throw new ConfigurationException("Unable to init matcher",c,ex);
}
try {
- mailet = mailetLoader.getMailet(mailetClassName, c);
+ mailet = mailetLoader.getMailet(mailetClassName, new ConfigurationAdapter(c));
if (getLogger().isInfoEnabled()) {
StringBuffer infoBuffer =
new StringBuffer(64)
@@ -651,6 +652,9 @@
System.err.println("Unable to init mailet " + mailetClassName);
System.err.println("Check spool manager logs for more details.");
throw new ConfigurationException("Unable to init mailet",c,ex);
+ } catch (org.apache.commons.configuration.ConfigurationException e) {
+ throw new ConfigurationException("Unable to wrap config",e);
+
}
//Add this pair to the processor
add(matcher, mailet);
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetConfigImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetConfigImpl.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetConfigImpl.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetConfigImpl.java Fri Nov 20 14:51:20 2009
@@ -21,8 +21,7 @@
package org.apache.james.transport;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.commons.configuration.Configuration;
import org.apache.mailet.MailetConfig;
import org.apache.mailet.MailetContext;
@@ -68,24 +67,7 @@
* @return the parameter value
*/
public String getInitParameter(String name) {
- try {
- String result = null;
-
- final Configuration[] values = configuration.getChildren( name );
- for ( int i = 0; i < values.length; i++ ) {
- if (result == null) {
- result = "";
- } else {
- result += ",";
- }
- Configuration conf = values[i];
- result += conf.getValue();
- }
- return result;
- } catch (ConfigurationException ce) {
- throw new RuntimeException("Embedded configuration exception was: " + ce.getMessage());
- }
-
+ return configuration.getString(name);
}
/**
@@ -93,26 +75,9 @@
*
* @return an iterator over the set of configuration parameter names.
*/
+ @SuppressWarnings("unchecked")
public Iterator<String> getInitParameterNames() {
- return new Iterator<String> () {
- Configuration[] children;
- int count = 0;
- {
- children = configuration.getChildren();
- }
-
- public boolean hasNext() {
- return count < children.length;
- }
-
- public String next() {
- return children[count++].getName();
- }
-
- public void remove() {
- throw new UnsupportedOperationException ("remove not supported");
- }
- };
+ return configuration.getKeys();
}
/**
@@ -123,7 +88,7 @@
* @return the attribute value or null if missing
*/
public String getInitAttribute(String name) {
- return configuration.getAttribute(name, null);
+ return configuration.getString("[@" +name+ "]", null);
}
/**
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetContextWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetContextWrapper.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetContextWrapper.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetContextWrapper.java Fri Nov 20 14:51:20 2009
@@ -6,7 +6,7 @@
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.avalon.framework.logger.Logger;
+import org.apache.commons.logging.Log;
import org.apache.mailet.Mail;
import org.apache.mailet.MailAddress;
import org.apache.mailet.MailetContext;
@@ -19,7 +19,7 @@
/** the mailetContext */
private MailetContext mailetContext;
/** the logger */
- private Logger logger;
+ private Log logger;
/**
* Create a mailetContext wrapper that use a different logger for the log
@@ -28,7 +28,7 @@
* @param mailetContext the mailet context to be wrapped
* @param logger the logger to be used instead of the parent one.
*/
- public MailetContextWrapper(MailetContext mailetContext, Logger logger) {
+ public MailetContextWrapper(MailetContext mailetContext, Log logger) {
this.mailetContext = mailetContext;
this.logger = logger;
}
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetLoader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetLoader.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetLoader.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/MailetLoader.java Fri Nov 20 14:51:20 2009
@@ -21,7 +21,7 @@
package org.apache.james.transport;
-import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.commons.configuration.Configuration;
import org.apache.mailet.Mailet;
import javax.mail.MessagingException;
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java (original)
+++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/StateAwareProcessorList.java Fri Nov 20 14:51:20 2009
@@ -21,22 +21,25 @@
package org.apache.james.transport;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
-import org.apache.avalon.framework.configuration.Configurable;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.container.ContainerUtil;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
+
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.logging.Log;
import org.apache.mailet.Mail;
import org.apache.mailet.MailetException;
+import org.guiceyfruit.jsr250.Jsr250Module;
+
+import com.google.inject.AbstractModule;
+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;
/**
@@ -45,81 +48,82 @@
*
* @version CVS $Revision: 405882 $ $Date: 2006-05-12 23:30:04 +0200 (ven, 12 mag 2006) $
*/
-public class StateAwareProcessorList
- extends AbstractLogEnabled
- implements Serviceable, Configurable, Initializable, Disposable, MailProcessor, ProcessorList {
-
- /**
- * System component manager
- */
- private ServiceManager compMgr;
-
- /**
- * The configuration object used by this spool manager.
- */
- private Configuration conf;
+public class StateAwareProcessorList implements MailProcessor, ProcessorList {
/**
* The map of processor names to processors
*/
private final Map<String, MailProcessor> processors;
+
+ private Log logger;
+
+ private HierarchicalConfiguration config;
public StateAwareProcessorList() {
super();
this.processors = new HashMap<String, MailProcessor>();
}
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(ServiceManager)
- */
- public void service(ServiceManager comp) throws ServiceException {
- compMgr = comp;
+
+ @Resource(name="org.apache.commons.logging.Log")
+ public final void setLogger(Log logger) {
+ this.logger = logger;
}
-
- /**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration)
- */
- public void configure(Configuration conf) throws ConfigurationException {
- this.conf = conf;
+
+
+ @Resource(name="org.apache.commons.configuration.Configuration")
+ public final void setConfiguration(HierarchicalConfiguration config) {
+ this.config = config;
}
+
/**
* @see org.apache.avalon.framework.activity.Initializable#initialize()
*/
- public void initialize() throws Exception {
-
- final Configuration[] processorConfs = conf.getChildren( "processor" );
- for ( int i = 0; i < processorConfs.length; i++ )
+ @SuppressWarnings("unchecked")
+ @PostConstruct
+ public void init() throws Exception {
+ final List<HierarchicalConfiguration> processorConfs = config.configurationsAt( "processor" );
+ for ( int i = 0; i < processorConfs.size(); i++ )
{
- Configuration processorConf = processorConfs[i];
- String processorName = processorConf.getAttribute("name");
- String processorClass = processorConf.getAttribute("class","org.apache.james.transport.LinearProcessor");
+ final HierarchicalConfiguration processorConf = processorConfs.get(i);
+ String processorName = processorConf.getString("[@name]");
+ String processorClass = processorConf.getString("[@class]","org.apache.james.transport.LinearProcessor");
try {
- MailProcessor processor = (MailProcessor) Thread.currentThread().getContextClassLoader().loadClass(processorClass).newInstance();
+ Class<MailProcessor> cObj = (Class<MailProcessor>) Thread.currentThread().getContextClassLoader().loadClass(processorClass);
+ MailProcessor processor = Guice.createInjector(new Jsr250Module(), new AbstractModule() {
+
+ @Override
+ protected void configure() {
+ bind(org.apache.commons.configuration.HierarchicalConfiguration.class).annotatedWith(Names.named("org.apache.commons.configuration.Configuration")).toInstance(processorConf);
+ bind(Log.class).annotatedWith(Names.named("org.apache.commons.logging.Log")).toInstance(logger);
+ }
+
+ }).getInstance(cObj);
processors.put(processorName, processor);
- setupLogger(processor, processorName);
- ContainerUtil.service(processor, compMgr);
- ContainerUtil.configure(processor, processorConf);
+ //setupLogger(processor, processorName);
+ //ContainerUtil.service(processor, compMgr);
+ //ContainerUtil.configure(processor, processorConf);
- if (getLogger().isInfoEnabled()) {
+ if (logger.isInfoEnabled()) {
StringBuffer infoBuffer =
new StringBuffer(64)
.append("Processor ")
.append(processorName)
.append(" instantiated.");
- getLogger().info(infoBuffer.toString());
+ logger.info(infoBuffer.toString());
}
} catch (Exception ex) {
- if (getLogger().isErrorEnabled()) {
+ if (logger.isErrorEnabled()) {
StringBuffer errorBuffer =
new StringBuffer(256)
.append("Unable to init processor ")
.append(processorName)
.append(": ")
.append(ex.toString());
- getLogger().error( errorBuffer.toString(), ex );
+ logger.error( errorBuffer.toString(), ex );
}
throw ex;
}
@@ -152,30 +156,30 @@
.append(" requested for processing of ")
.append(mail.getName());
String exceptionMessage = exceptionMessageBuffer.toString();
- getLogger().debug(exceptionMessage);
+ logger.debug(exceptionMessage);
mail.setState(Mail.ERROR);
throw new MailetException(exceptionMessage);
}
StringBuffer logMessageBuffer = null;
- if (getLogger().isDebugEnabled()) {
+ if (logger.isDebugEnabled()) {
logMessageBuffer =
new StringBuffer(64)
.append("Processing ")
.append(mail.getName())
.append(" through ")
.append(processorName);
- getLogger().debug(logMessageBuffer.toString());
+ logger.debug(logMessageBuffer.toString());
}
processor.service(mail);
- if (getLogger().isDebugEnabled()) {
+ if (logger.isDebugEnabled()) {
logMessageBuffer =
new StringBuffer(128)
.append("Processed ")
.append(mail.getName())
.append(" through ")
.append(processorName);
- getLogger().debug(logMessageBuffer.toString());
- getLogger().debug("Result was " + mail.getState());
+ logger.debug(logMessageBuffer.toString());
+ logger.debug("Result was " + mail.getState());
}
return;
} catch (Throwable e) {
@@ -186,7 +190,7 @@
.append("Exception in processor <")
.append(processorName)
.append(">");
- getLogger().error(exceptionBuffer.toString(), e);
+ logger.error(exceptionBuffer.toString(), e);
if (processorName.equals(Mail.ERROR)) {
// We got an error on the error processor...
// kill the message
@@ -201,15 +205,15 @@
mail.setErrorMessage(e.getMessage());
}
}
- if (getLogger().isErrorEnabled()) {
+ if (logger.isErrorEnabled()) {
StringBuffer logMessageBuffer =
new StringBuffer(128)
.append("An error occurred processing ")
.append(mail.getName())
.append(" through ")
.append(processorName);
- getLogger().error(logMessageBuffer.toString());
- getLogger().error("Result was " + mail.getState());
+ logger.error(logMessageBuffer.toString());
+ logger.error("Result was " + mail.getState());
}
}
}
@@ -224,15 +228,15 @@
*
* @see org.apache.avalon.framework.activity.Disposable#dispose()
*/
+ @PreDestroy
public void dispose() {
Iterator<String> it = processors.keySet().iterator();
while (it.hasNext()) {
String processorName = it.next();
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Processor " + processorName);
+ if (logger.isDebugEnabled()) {
+ logger.debug("Processor " + processorName);
}
Object processor = processors.get(processorName);
- ContainerUtil.dispose(processor);
processors.remove(processor);
}
}
Modified: james/server/trunk/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java?rev=882589&r1=882588&r2=882589&view=diff
==============================================================================
--- james/server/trunk/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java (original)
+++ james/server/trunk/spoolmanager-function/src/test/java/org/apache/james/transport/JamesMailetLoaderTest.java Fri Nov 20 14:51:20 2009
@@ -23,30 +23,32 @@
import junit.framework.TestCase;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.james.test.mock.avalon.MockLogger;
+import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.logging.impl.SimpleLog;
import org.apache.james.test.util.Util;
import org.apache.james.transport.mailets.MailetLoaderTestMailet;
+import org.apache.james.util.ConfigurationAdapter;
import org.apache.mailet.Mailet;
import org.apache.mailet.MailetConfig;
import javax.mail.MessagingException;
import java.util.ArrayList;
import java.util.Iterator;
+import java.util.List;
public class JamesMailetLoaderTest extends TestCase {
private JamesMailetLoader m_jamesMailetLoader = new JamesMailetLoader();
private JamesMailetLoaderConfiguration m_conf = new JamesMailetLoaderConfiguration();
private class JamesMailetLoaderConfiguration extends DefaultConfiguration {
- private ArrayList m_packageNames = new ArrayList();
+ private List<String> m_packageNames = new ArrayList<String>();
public JamesMailetLoaderConfiguration() {
super("mailetpackages");
}
public void init() {
- for (Iterator iterator = m_packageNames.iterator(); iterator.hasNext();) {
+ for (Iterator<String> iterator = m_packageNames.iterator(); iterator.hasNext();) {
String packageName = (String) iterator.next();
addChild(Util.getValuedConfiguration("mailetpackage", packageName));
}
@@ -63,11 +65,12 @@
}
- private void setUpLoader() throws ConfigurationException {
+ private void setUpLoader() throws Exception {
m_conf.init();
- m_jamesMailetLoader.enableLogging(new MockLogger());
- m_jamesMailetLoader.configure(m_conf);
+ m_jamesMailetLoader.setLogger(new SimpleLog("Test"));
+ m_jamesMailetLoader.setConfiguration(new ConfigurationAdapter(m_conf));
m_jamesMailetLoader.setLoaderService(new FakeLoaderService());
+ m_jamesMailetLoader.init();
}
private void assetIsNullMailet(Mailet mailet) {
@@ -76,11 +79,11 @@
}
- public void testUsingEmtpyConfig() throws ConfigurationException {
+ public void testUsingEmtpyConfig() throws Exception {
setUpLoader();
}
- public void testFullQualifiedUsingFakeConfig() throws ConfigurationException, MessagingException {
+ public void testFullQualifiedUsingFakeConfig() throws Exception {
m_conf.add("none.existing.package"); // has to be here so the Loader won't choke
setUpLoader();
@@ -88,7 +91,7 @@
assetIsNullMailet(mailet);
}
- public void testStandardMailets() throws ConfigurationException, MessagingException {
+ public void testStandardMailets() throws Exception {
m_conf.addStandardPackages();
setUpLoader();
@@ -102,7 +105,7 @@
}
- public void testTestMailets() throws ConfigurationException, MessagingException {
+ public void testTestMailets() throws Exception {
m_conf.addStandardPackages();
setUpLoader();
@@ -114,8 +117,8 @@
private void checkTestMailet(String mailetName) throws MessagingException {
// use standard package
- DefaultConfiguration configuration = new DefaultConfiguration("mailetLoaderTest");
- configuration.addChild(Util.getValuedConfiguration("testMailetKey", "testMailetValue"));
+ DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+ configuration.addProperty("testMailetKey", "testMailetValue");
Mailet mailet = m_jamesMailetLoader.getMailet(mailetName, configuration);
assertTrue("MailetLoaderTestMailet mailet is expected class", mailet instanceof MailetLoaderTestMailet);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org