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 bt...@apache.org on 2016/05/19 10:06:08 UTC

[1/4] james-project git commit: JAMES-1727 Memory mail queue should copy mails instead of just wrapping them

Repository: james-project
Updated Branches:
  refs/heads/master fef500291 -> f6ba5d502


JAMES-1727 Memory mail queue should copy mails instead of just wrapping them


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6090fa49
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6090fa49
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6090fa49

Branch: refs/heads/master
Commit: 6090fa4995b0d24079b1bbcca70c21720d574662
Parents: fef5002
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Apr 27 17:18:20 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu May 19 10:15:57 2016 +0700

----------------------------------------------------------------------
 .../james/modules/server/MemoryMailQueueFactory.java  |  9 ++++++++-
 .../james/server/MemoryMailQueueFactoryTest.java      | 14 ++++++++++----
 2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/6090fa49/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java
index 39846ed..df24931 100644
--- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java
+++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/server/MemoryMailQueueFactory.java
@@ -24,6 +24,9 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingDeque;
 import java.util.concurrent.TimeUnit;
 
+import javax.mail.MessagingException;
+
+import org.apache.james.core.MailImpl;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
@@ -77,7 +80,11 @@ public class MemoryMailQueueFactory implements MailQueueFactory {
 
         @Override
         public void enQueue(Mail mail) throws MailQueueException {
-            mailItems.addFirst(new MemoryMailQueueItem(mail));
+            try {
+                mailItems.addFirst(new MemoryMailQueueItem(new MailImpl(mail)));
+            } catch (MessagingException e) {
+                throw new MailQueueException("Error while copying mail " + mail.getName(), e);
+            }
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/6090fa49/server/container/guice/memory-guice/src/test/java/org/apache/james/server/MemoryMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/memory-guice/src/test/java/org/apache/james/server/MemoryMailQueueFactoryTest.java b/server/container/guice/memory-guice/src/test/java/org/apache/james/server/MemoryMailQueueFactoryTest.java
index 560378f..34133e6 100644
--- a/server/container/guice/memory-guice/src/test/java/org/apache/james/server/MemoryMailQueueFactoryTest.java
+++ b/server/container/guice/memory-guice/src/test/java/org/apache/james/server/MemoryMailQueueFactoryTest.java
@@ -45,6 +45,8 @@ public class MemoryMailQueueFactoryTest {
 
     public static final String KEY = "key";
     public static final String BIS = "bis";
+    public static final String NAME_1 = "Name1";
+    public static final String NAME_2 = "Name2";
 
     private MemoryMailQueueFactory memoryMailQueueFactory;
     private ExecutorService executorService;
@@ -88,24 +90,28 @@ public class MemoryMailQueueFactoryTest {
     @Test
     public void dequeueShouldWork() throws Exception{
         Mail mail = new FakeMail();
+        mail.setName(NAME_1);
         memoryMailQueueFactory.getQueue(KEY).enQueue(mail);
-        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail()).isEqualTo(mail);
+        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail().getName()).startsWith(NAME_1);
     }
 
     @Test
     public void dequeueShouldWorkWithMultipleMessages() throws Exception{
         Mail mail1 = new FakeMail();
         Mail mail2 = new FakeMail();
+        mail1.setName(NAME_1);
+        mail2.setName(NAME_2);
         memoryMailQueueFactory.getQueue(KEY).enQueue(mail1);
         memoryMailQueueFactory.getQueue(KEY).enQueue(mail2);
-        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail()).isEqualTo(mail2);
-        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail()).isEqualTo(mail1);
+        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail().getName()).startsWith(NAME_2);
+        assertThat(memoryMailQueueFactory.getQueue(KEY).deQueue().getMail().getName()).startsWith(NAME_1);
     }
 
     @Test(timeout = 20000)
     public void deQueueShouldWaitForAMailToBeEnqueued() throws Exception {
         CountDownLatch latch = new CountDownLatch(1);
         Mail mail = new FakeMail();
+        mail.setName(NAME_1);
         executorService.submit(() -> {
             try {
                 latch.await();
@@ -117,6 +123,6 @@ public class MemoryMailQueueFactoryTest {
         Future<MailQueueItem> tryDequeue = executorService.submit(() -> memoryMailQueueFactory.getQueue(KEY).deQueue());
         assertThatThrownBy(() -> tryDequeue.get(100, TimeUnit.MILLISECONDS)).isInstanceOf(TimeoutException.class);
         latch.countDown();
-        assertThat(tryDequeue.get().getMail()).isEqualTo(mail);
+        assertThat(tryDequeue.get().getMail().getName()).startsWith(NAME_1);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[4/4] james-project git commit: JAMES-1727 Camel processors should be bound in scope singleton

Posted by bt...@apache.org.
JAMES-1727 Camel processors should be bound in scope singleton


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f6ba5d50
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f6ba5d50
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f6ba5d50

Branch: refs/heads/master
Commit: f6ba5d502abcb5ff632ca2ec04736cc36e81657a
Parents: eb3bfd0
Author: Benoit Tellier <bt...@linagora.com>
Authored: Thu May 19 15:17:30 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu May 19 15:22:33 2016 +0700

----------------------------------------------------------------------
 .../james/modules/server/CamelMailetContainerModule.java     | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f6ba5d50/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
index b3aede8..de270d4 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
@@ -47,6 +47,7 @@ import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.google.inject.Provides;
+import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
@@ -58,10 +59,15 @@ public class CamelMailetContainerModule extends AbstractModule {
 
     @Override
     protected void configure() {
-        bind(MailProcessor.class).to(CamelCompositeProcessor.class).in(Singleton.class);
+        bind(CamelCompositeProcessor.class).in(Scopes.SINGLETON);
+        bind(MailProcessor.class).to(CamelCompositeProcessor.class);
+
+        bind(JamesMailSpooler.class).in(Scopes.SINGLETON);
         bind(MailSpoolerMBean.class).to(JamesMailSpooler.class);
+
         bind(MailetLoader.class).to(GuiceMailetLoader.class);
         bind(MatcherLoader.class).to(GuiceMatcherLoader.class);
+
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(MailetModuleConfigurationPerformer.class);
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[2/4] james-project git commit: JAMES-1727 Sending mail from a mailetContext should append to the mailQueue

Posted by bt...@apache.org.
JAMES-1727 Sending mail from a mailetContext should append to the mailQueue


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7d2ef261
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7d2ef261
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7d2ef261

Branch: refs/heads/master
Commit: 7d2ef26134a960ebf2cbca0734661029ffaa300d
Parents: 6090fa4
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Apr 26 15:05:29 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu May 19 10:18:18 2016 +0700

----------------------------------------------------------------------
 .../modules/server/CamelMailetContainerModule.java    |  6 +++---
 .../mailetcontainer/impl/JamesMailetContext.java      | 14 ++++++--------
 2 files changed, 9 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7d2ef261/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
index 3974f8f..b3aede8 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
@@ -32,6 +32,7 @@ import org.apache.james.mailetcontainer.api.jmx.MailSpoolerMBean;
 import org.apache.james.mailetcontainer.impl.JamesMailSpooler;
 import org.apache.james.mailetcontainer.impl.JamesMailetContext;
 import org.apache.james.mailetcontainer.impl.camel.CamelCompositeProcessor;
+import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.ConfigurationProvider;
@@ -66,14 +67,14 @@ public class CamelMailetContainerModule extends AbstractModule {
 
     @Provides
     @Singleton
-    private MailetContext provideMailetContext(MailProcessor processorList,
+    private MailetContext provideMailetContext(MailQueueFactory mailQueueFactory,
                                                     DNSService dns,
                                                     UsersRepository localusers,
                                                     DomainList domains) {
         JamesMailetContext jamesMailetContext = new JamesMailetContext();
         jamesMailetContext.setLog(MAILET_LOGGER);
         jamesMailetContext.setDNSService(dns);
-        jamesMailetContext.setMailProcessor(processorList);
+        jamesMailetContext.retrieveRootMailQueue(mailQueueFactory);
         jamesMailetContext.setUsersRepository(localusers);
         jamesMailetContext.setDomainList(domains);
         return jamesMailetContext;
@@ -110,7 +111,6 @@ public class CamelMailetContainerModule extends AbstractModule {
                 jamesMailSpooler.init();
                 mailetContext.setLog(MAILET_LOGGER);
                 mailetContext.configure(configurationProvider.getConfiguration("mailetcontainer").configurationAt("context"));
-                mailetContext.setMailProcessor(camelCompositeProcessor);
             } catch (Exception e) {
                 Throwables.propagate(e);
             }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7d2ef261/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
index 732a303..7afe0b5 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
@@ -51,7 +51,8 @@ import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.lifecycle.api.LifecycleUtil;
 import org.apache.james.lifecycle.api.LogEnabled;
-import org.apache.james.mailetcontainer.api.MailProcessor;
+import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.mailet.HostAddress;
@@ -75,15 +76,15 @@ public class JamesMailetContext implements MailetContext, LogEnabled, Configurab
 
     private UsersRepository localusers;
 
-    private MailProcessor processorList;
+    private MailQueue rootMailQueue;
 
     private DomainList domains;
 
     private MailAddress postmaster;
 
     @Inject
-    public void setMailProcessor(MailProcessor processorList) {
-        this.processorList = processorList;
+    public void retrieveRootMailQueue(MailQueueFactory mailQueueFactory) {
+        this.rootMailQueue = mailQueueFactory.getQueue(MailQueueFactory.SPOOL);
     }
 
     @Inject
@@ -402,12 +403,9 @@ public class JamesMailetContext implements MailetContext, LogEnabled, Configurab
         sendMail(sender, recipients, message, Mail.DEFAULT);
     }
 
-    /**
-     * TODO: Should we use the MailProcessorList or the MailQueue here ?
-     */
     @Override
     public void sendMail(Mail mail) throws MessagingException {
-        processorList.service(mail);
+        rootMailQueue.enQueue(mail);
     }
 
     public void sendMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage message, String state) throws MessagingException {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org


[3/4] james-project git commit: JAMES-1727 Changing of processor should not imply using the mail queue

Posted by bt...@apache.org.
JAMES-1727 Changing of processor should not imply using the mail queue


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/eb3bfd07
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/eb3bfd07
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/eb3bfd07

Branch: refs/heads/master
Commit: eb3bfd0727478c54ce1c2d9dc6572f81e1ad7680
Parents: 7d2ef26
Author: Benoit Tellier <bt...@linagora.com>
Authored: Wed Apr 27 14:14:57 2016 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu May 19 10:18:21 2016 +0700

----------------------------------------------------------------------
 server/mailet/mailetcontainer-camel/pom.xml                   | 5 +++++
 .../mailetcontainer/impl/camel/CamelCompositeProcessor.java   | 1 +
 .../mailetcontainer/lib/AbstractStateMailetProcessor.java     | 7 ++++++-
 .../mailetcontainer/impl/camel/CamelMailetProcessorTest.java  | 4 ++++
 4 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/eb3bfd07/server/mailet/mailetcontainer-camel/pom.xml
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/pom.xml b/server/mailet/mailetcontainer-camel/pom.xml
index 9c3c9c4..6de3849 100644
--- a/server/mailet/mailetcontainer-camel/pom.xml
+++ b/server/mailet/mailetcontainer-camel/pom.xml
@@ -128,6 +128,11 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb3bfd07/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelCompositeProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelCompositeProcessor.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelCompositeProcessor.java
index 6844cb4..80c5877 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelCompositeProcessor.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/camel/CamelCompositeProcessor.java
@@ -108,6 +108,7 @@ public class CamelCompositeProcessor extends AbstractStateCompositeProcessor imp
             processor.setMailetLoader(mailetLoader);
             processor.setMatcherLoader(matcherLoader);
             processor.configure(config);
+            processor.setRootMailProcessor(this);
             processor.init();
             return processor;
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb3bfd07/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
index 9e93b16..ab84ba1 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
@@ -62,6 +62,7 @@ public abstract class AbstractStateMailetProcessor implements MailProcessor, Con
 
     private MailetContext mailetContext;
     private MatcherLoader matcherLoader;
+    private MailProcessor rootMailProcessor;
     private final List<MailetProcessorListener> listeners = Collections.synchronizedList(new ArrayList<MailetProcessorListener>());
     private JMXStateMailetProcessorListener jmxListener;
     private boolean enableJmx = true;
@@ -75,6 +76,10 @@ public abstract class AbstractStateMailetProcessor implements MailProcessor, Con
         this.matcherLoader = matcherLoader;
     }
 
+    public void setRootMailProcessor(MailProcessor rootMailProcessor) {
+        this.rootMailProcessor = rootMailProcessor;
+    }
+
     @Inject
     public void setMailetContext(MailetContext mailetContext) {
         this.mailetContext = mailetContext;
@@ -157,7 +162,7 @@ public abstract class AbstractStateMailetProcessor implements MailProcessor, Con
      * @throws MessagingException
      */
     protected void toProcessor(Mail mail) throws MessagingException {
-        mailetContext.sendMail(mail);
+        rootMailProcessor.service(mail);
     }
 
     protected Logger getLogger() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/eb3bfd07/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessorTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessorTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessorTest.java
index 261980b..8afae28 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessorTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/camel/CamelMailetProcessorTest.java
@@ -19,8 +19,11 @@
 
 package org.apache.james.mailetcontainer.impl.camel;
 
+import static org.mockito.Mockito.mock;
+
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.mailetcontainer.api.MailProcessor;
 import org.apache.james.mailetcontainer.api.mock.MockMailetContext;
 import org.apache.james.mailetcontainer.api.mock.MockMailetLoader;
 import org.apache.james.mailetcontainer.api.mock.MockMatcherLoader;
@@ -45,6 +48,7 @@ public class CamelMailetProcessorTest extends AbstractStateMailetProcessorTest {
             processor.setMailetContext(new MockMailetContext());
             processor.setMailetLoader(new MockMailetLoader());
             processor.setMatcherLoader(new MockMatcherLoader());
+            processor.setRootMailProcessor(mock(MailProcessor.class));
             processor.configure(configuration);
             processor.init();
             return processor;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org