JAMES-1691 Add a decorator to MailQueueItem to be able to launch specific actions
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a5a9ee20 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a5a9ee20 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a5a9ee20 Branch: refs/heads/master Commit: a5a9ee2083f5f28eb370e60211fcd487836f7d8d Parents: 66579d7 Author: Raphael Ouazana <[email protected]> Authored: Wed Feb 17 18:49:42 2016 +0100 Committer: Raphael Ouazana <[email protected]> Committed: Wed Feb 24 15:01:09 2016 +0100 ---------------------------------------------------------------------- .../modules/server/ActiveMQQueueModule.java | 10 +++- .../james/queue/activemq/ActiveMQMailQueue.java | 12 ++-- .../activemq/ActiveMQMailQueueFactory.java | 11 +++- .../META-INF/spring/activemq-queue-context.xml | 10 +++- .../queue/activemq/ActiveMQMailQueueTest.java | 5 +- server/queue/queue-api/pom.xml | 25 +++++++- .../api/MailQueueItemDecoratorFactory.java | 61 ++++++++++++++++++++ .../apache/james/queue/file/FileMailQueue.java | 8 ++- .../james/queue/file/FileMailQueueFactory.java | 7 ++- .../apache/james/queue/jms/JMSMailQueue.java | 51 ++++++++-------- .../james/queue/jms/JMSMailQueueFactory.java | 11 +++- .../queue/jms/AbstractJMSMailQueueTest.java | 43 +++++++------- 12 files changed, 190 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java ---------------------------------------------------------------------- diff --git a/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java b/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java index 6825eb6..92d972c 100644 --- a/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java +++ b/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java @@ -23,6 +23,7 @@ import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Singleton; import org.apache.james.queue.activemq.ActiveMQMailQueueFactory; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.MailQueueFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,12 +47,17 @@ public class ActiveMQQueueModule extends AbstractModule { @Provides @Singleton - public MailQueueFactory createActiveMailQueueFactory(ConnectionFactory connectionFactory, ActiveMQMailQueueFactory activeMQMailQueueFactory) { + public MailQueueFactory createActiveMailQueueFactory(ActiveMQMailQueueFactory activeMQMailQueueFactory) { activeMQMailQueueFactory.setUseJMX(true); - activeMQMailQueueFactory.setConnectionFactory(connectionFactory); activeMQMailQueueFactory.setLog(LOGGER); activeMQMailQueueFactory.init(); return activeMQMailQueueFactory; } + + @Provides + @Singleton + public MailQueueItemDecoratorFactory defaultMailQueueItemDecoratorFactory() { + return MailQueueItemDecoratorFactory.RAW_FACTORY; + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java index fc9d54b..dbb507a 100644 --- a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java +++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java @@ -44,6 +44,7 @@ import org.apache.james.core.MimeMessageCopyOnWriteProxy; import org.apache.james.core.MimeMessageInputStream; import org.apache.james.core.MimeMessageSource; import org.apache.james.queue.api.MailQueue; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.jms.JMSMailQueue; import org.apache.mailet.Mail; import org.slf4j.Logger; @@ -91,8 +92,8 @@ public class ActiveMQMailQueue extends JMSMailQueue implements ActiveMQSupport { * Construct a {@link ActiveMQMailQueue} which only use {@link BlobMessage} * */ - public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final String queuename, final Logger logger) { - this(connectionFactory, queuename, true, logger); + public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String queuename, final Logger logger) { + this(connectionFactory, mailQueueItemDecoratorFactory, queuename, true, logger); } /** @@ -103,8 +104,8 @@ public class ActiveMQMailQueue extends JMSMailQueue implements ActiveMQSupport { * @param useBlob * @param logger */ - public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final String queuename, boolean useBlob, final Logger logger) { - super(connectionFactory, queuename, logger); + public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String queuename, boolean useBlob, final Logger logger) { + super(connectionFactory, mailQueueItemDecoratorFactory, queuename, logger); this.useBlob = useBlob; } @@ -240,7 +241,8 @@ public class ActiveMQMailQueue extends JMSMailQueue implements ActiveMQSupport { @Override protected MailQueueItem createMailQueueItem(Connection connection, Session session, MessageConsumer consumer, Message message) throws JMSException, MessagingException { Mail mail = createMail(message); - return new ActiveMQMailQueueItem(mail, connection, session, consumer, message, logger); + ActiveMQMailQueueItem activeMQMailQueueItem = new ActiveMQMailQueueItem(mail, connection, session, consumer, message, logger); + return mailQueueItemDecoratorFactory.decorate(activeMQMailQueueItem); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java index 1b2d777..6547be3 100644 --- a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java +++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java @@ -18,7 +18,11 @@ ****************************************************************/ package org.apache.james.queue.activemq; +import javax.inject.Inject; +import javax.jms.ConnectionFactory; + import org.apache.james.queue.api.MailQueue; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.MailQueueFactory; import org.apache.james.queue.jms.JMSMailQueueFactory; @@ -30,12 +34,17 @@ public class ActiveMQMailQueueFactory extends JMSMailQueueFactory { private boolean useBlob = true; + @Inject + public ActiveMQMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) { + super(connectionFactory, mailQueueItemDecoratorFactory); + } + public void setUseBlobMessages(boolean useBlob) { this.useBlob = useBlob; } @Override protected MailQueue createMailQueue(String name) { - return new ActiveMQMailQueue(connectionFactory, name, useBlob, log); + return new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, useBlob, log); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml index 5f307bd..1545212 100644 --- a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml +++ b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml @@ -18,14 +18,20 @@ <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core" + xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://activemq.apache.org/schema/core - http://activemq.apache.org/schema/core/activemq-core.xsd"> + http://activemq.apache.org/schema/core/activemq-core.xsd + http://www.springframework.org/schema/util + http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- James Mail Queue Factory --> <bean id="mailqueuefactory" class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory" depends-on="broker"> - <property name="connectionFactory" ref="jmsConnectionFactory"/> + <constructor-arg index="0" ref="jmsConnectionFactory"/> + <constructor-arg index="1"> + <util:constant static-field="org.apache.james.queue.api.MailQueueItemDecoratorFactory.RAW_FACTORY"/> + </constructor-arg> </bean> <!-- http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java index 37b955e..b490d5d 100644 --- a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java +++ b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java @@ -23,6 +23,7 @@ import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.region.policy.PolicyEntry; import org.apache.activemq.broker.region.policy.PolicyMap; import org.apache.activemq.plugin.StatisticsBrokerPlugin; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.jms.AbstractJMSMailQueueTest; import org.apache.james.queue.jms.JMSMailQueue; import org.junit.AfterClass; @@ -71,9 +72,9 @@ public abstract class ActiveMQMailQueueTest extends AbstractJMSMailQueueTest { } @Override - protected JMSMailQueue createQueue(ConnectionFactory factory, String queueName) { + protected JMSMailQueue createQueue(ConnectionFactory factory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) { Logger log = LoggerFactory.getLogger(ActiveMQMailQueueTest.class); - return new ActiveMQMailQueue(factory, queueName, useBlobMessages(), log); + return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, queueName, useBlobMessages(), log); } protected boolean useBlobMessages() { http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-api/pom.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml index 4a6aa50..6a103b0 100644 --- a/server/queue/queue-api/pom.xml +++ b/server/queue/queue-api/pom.xml @@ -39,17 +39,38 @@ <artifactId>apache-mailet-api</artifactId> </dependency> <dependency> + <groupId>org.apache.james</groupId> + <artifactId>james-server-lifecycle-api</artifactId> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> </dependency> + <dependency> <groupId>org.apache.james</groupId> <artifactId>james-server-core</artifactId> <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.james</groupId> - <artifactId>james-server-lifecycle-api</artifactId> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>${assertj-1.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <scope>test</scope> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java new file mode 100644 index 0000000..0a08953 --- /dev/null +++ b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java @@ -0,0 +1,61 @@ +/**************************************************************** + * 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.queue.api; + +import org.apache.james.queue.api.MailQueue.MailQueueException; +import org.apache.james.queue.api.MailQueue.MailQueueItem; +import org.apache.mailet.Mail; + +public interface MailQueueItemDecoratorFactory { + + MailQueueItemDecorator decorate(MailQueueItem mailQueueItem); + + abstract class MailQueueItemDecorator implements MailQueueItem { + protected MailQueueItem mailQueueItem; + + public MailQueueItemDecorator(MailQueueItem mailQueueItem) { + this.mailQueueItem = mailQueueItem; + } + } + + MailQueueItemDecoratorFactory RAW_FACTORY = new MailQueueItemDecoratorFactory() { + @Override + public MailQueueItemDecorator decorate(MailQueueItem mailQueueItem) { + return new RawMailQueueItem(mailQueueItem); + } + }; + + class RawMailQueueItem extends MailQueueItemDecorator { + + public RawMailQueueItem(MailQueueItem mailQueueItem) { + super(mailQueueItem); + } + + @Override + public Mail getMail() { + return mailQueueItem.getMail(); + } + + @Override + public void done(boolean success) throws MailQueueException { + mailQueueItem.done(success); + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java index 2afc46a..ab447a4 100644 --- a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java +++ b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java @@ -47,6 +47,7 @@ import org.apache.james.core.MimeMessageCopyOnWriteProxy; import org.apache.james.core.MimeMessageSource; import org.apache.james.lifecycle.api.Disposable; import org.apache.james.lifecycle.api.LifecycleUtil; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.ManageableMailQueue; import org.apache.mailet.Mail; import org.slf4j.Logger; @@ -67,13 +68,15 @@ public class FileMailQueue implements ManageableMailQueue { private final File queueDir; private final Logger log; + private final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; private final boolean sync; private final static String MSG_EXTENSION = ".msg"; private final static String OBJECT_EXTENSION = ".obj"; private final static String NEXT_DELIVERY = "FileQueueNextDelivery"; private final static int SPLITCOUNT = 10; - public FileMailQueue(File parentDir, String queuename, boolean sync, Logger log) throws IOException { + public FileMailQueue(MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, File parentDir, String queuename, boolean sync, Logger log) throws IOException { + this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory; this.log = log; this.sync = sync; this.queueDir = new File(parentDir, queuename); @@ -269,7 +272,7 @@ public class FileMailQueue implements ManageableMailQueue { oin = new ObjectInputStream(new FileInputStream(objectFile)); final Mail mail = (Mail) oin.readObject(); mail.setMessage(new MimeMessageCopyOnWriteProxy(new FileMimeMessageSource(msgFile))); - return new MailQueueItem() { + MailQueueItem fileMailQueueItem = new MailQueueItem() { @Override public Mail getMail() { @@ -293,6 +296,7 @@ public class FileMailQueue implements ManageableMailQueue { LifecycleUtil.dispose(mail); } }; + return mailQueueItemDecoratorFactory.decorate(fileMailQueueItem); // TODO: Think about exception handling in detail } catch (FileNotFoundException e) { http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java index 238823d..2229e1a 100644 --- a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java +++ b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java @@ -20,6 +20,7 @@ package org.apache.james.queue.file; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.lifecycle.api.LogEnabled; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.MailQueue; import org.apache.james.queue.api.MailQueueFactory; import org.slf4j.Logger; @@ -36,13 +37,15 @@ import java.util.Map; public class FileMailQueueFactory implements MailQueueFactory, LogEnabled { private final Map<String, MailQueue> queues = new HashMap<String, MailQueue>(); + private MailQueueItemDecoratorFactory mailQueueActionItemDecoratorFactory; private FileSystem fs; private Logger log; private boolean sync = true; @Inject - public void setFileSystem(FileSystem fs) { + public FileMailQueueFactory(FileSystem fs, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) { this.fs = fs; + this.mailQueueActionItemDecoratorFactory = mailQueueItemDecoratorFactory; } /** @@ -63,7 +66,7 @@ public class FileMailQueueFactory implements MailQueueFactory, LogEnabled { if (queue == null) { synchronized (queues) { try { - queue = new FileMailQueue(fs.getFile("file://var/store/queue"), name, sync, log); + queue = new FileMailQueue(mailQueueActionItemDecoratorFactory, fs.getFile("file://var/store/queue"), name, sync, log); queues.put(name, queue); } catch (IOException e) { throw new RuntimeException("Unable to access queue " + name, e); http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java index 80f1308..68ed2f2 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java @@ -18,14 +18,19 @@ ****************************************************************/ package org.apache.james.queue.jms; -import org.apache.james.core.MailImpl; -import org.apache.james.core.MimeMessageCopyOnWriteProxy; -import org.apache.james.queue.api.MailPrioritySupport; -import org.apache.james.queue.api.MailQueue; -import org.apache.james.queue.api.ManageableMailQueue; -import org.apache.mailet.Mail; -import org.apache.mailet.MailAddress; -import org.slf4j.Logger; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; +import java.util.concurrent.TimeUnit; import javax.jms.BytesMessage; import javax.jms.Connection; @@ -41,19 +46,16 @@ import javax.jms.Session; import javax.mail.MessagingException; import javax.mail.internet.AddressException; import javax.mail.internet.MimeMessage; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.StringTokenizer; -import java.util.concurrent.TimeUnit; + +import org.apache.james.core.MailImpl; +import org.apache.james.core.MimeMessageCopyOnWriteProxy; +import org.apache.james.queue.api.MailPrioritySupport; +import org.apache.james.queue.api.MailQueue; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; +import org.apache.james.queue.api.ManageableMailQueue; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.slf4j.Logger; /** * <p> @@ -70,11 +72,13 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori protected final String queueName; protected final ConnectionFactory connectionFactory; + protected final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; protected final Logger logger; public final static String FORCE_DELIVERY = "FORCE_DELIVERY"; - public JMSMailQueue(final ConnectionFactory connectionFactory, final String queueName, final Logger logger) { + public JMSMailQueue(final ConnectionFactory connectionFactory, final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String queueName, final Logger logger) { this.connectionFactory = connectionFactory; + this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory; this.queueName = queueName; this.logger = logger; } @@ -472,7 +476,8 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori */ protected MailQueueItem createMailQueueItem(Connection connection, Session session, MessageConsumer consumer, Message message) throws JMSException, MessagingException { final Mail mail = createMail(message); - return new JMSMailQueueItem(mail, connection, session, consumer); + JMSMailQueueItem jmsMailQueueItem = new JMSMailQueueItem(mail, connection, session, consumer); + return mailQueueItemDecoratorFactory.decorate(jmsMailQueueItem); } protected String getMessageSelector() { http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java index d78c231..897b80a 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java @@ -18,8 +18,10 @@ ****************************************************************/ package org.apache.james.queue.jms; +import javax.inject.Inject; import javax.jms.ConnectionFactory; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; import org.apache.james.queue.api.MailQueue; import org.apache.james.queue.api.MailQueueFactory; import org.apache.james.queue.library.AbstractMailQueueFactory; @@ -30,14 +32,17 @@ import org.apache.james.queue.library.AbstractMailQueueFactory; public class JMSMailQueueFactory extends AbstractMailQueueFactory { protected ConnectionFactory connectionFactory; - - public void setConnectionFactory(ConnectionFactory connectionFactory) { + protected MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory; + + @Inject + public JMSMailQueueFactory(ConnectionFactory connectionFactory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) { this.connectionFactory = connectionFactory; + this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory; } @Override protected MailQueue createMailQueue(String name) { - return new JMSMailQueue(connectionFactory, name, log); + return new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, log); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java index 99825ad..7d15da6 100644 --- a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java +++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java @@ -18,27 +18,11 @@ ****************************************************************/ package org.apache.james.queue.jms; -import org.apache.activemq.ActiveMQConnectionFactory; -import org.apache.james.core.MailImpl; -import org.apache.james.protocols.smtp.MailAddressException; -import org.apache.james.queue.api.MailQueue.MailQueueItem; -import org.apache.james.queue.api.ManageableMailQueue; -import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator; -import org.apache.mailet.Mail; -import org.apache.mailet.MailAddress; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import javax.jms.ConnectionFactory; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.internet.MimeMessage; import java.io.IOException; import java.util.Arrays; import java.util.Date; @@ -48,6 +32,25 @@ import java.util.Properties; import java.util.UUID; import java.util.concurrent.TimeUnit; +import javax.jms.ConnectionFactory; +import javax.mail.MessagingException; +import javax.mail.Session; +import javax.mail.internet.MimeMessage; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.james.core.MailImpl; +import org.apache.james.protocols.smtp.MailAddressException; +import org.apache.james.queue.api.MailQueue.MailQueueItem; +import org.apache.james.queue.api.MailQueueItemDecoratorFactory; +import org.apache.james.queue.api.ManageableMailQueue; +import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Basic JMS test class. Extend this class and start the JMS broker in the super class, * Create a queue and implement the getter and setter for the tests to run. @@ -63,16 +66,16 @@ public abstract class AbstractJMSMailQueueTest { protected ActiveMQConnectionFactory createConnectionFactory() { return new ActiveMQConnectionFactory("vm://localhost?create=false"); } - - protected JMSMailQueue createQueue(ConnectionFactory factory, String queueName) { + + protected JMSMailQueue createQueue(ConnectionFactory factory, MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) { Logger log = LoggerFactory.getLogger(AbstractJMSMailQueueTest.class); - return new JMSMailQueue(factory, queueName, log); + return new JMSMailQueue(factory, mailQueueItemDecoratorFactory, queueName, log); } @Before public void setUp() throws Exception { ConnectionFactory connectionFactory = createConnectionFactory(); - setQueue(createQueue(connectionFactory, QUEUE_NAME)); + setQueue(createQueue(connectionFactory, MailQueueItemDecoratorFactory.RAW_FACTORY, QUEUE_NAME)); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
