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 ro...@apache.org on 2019/06/14 14:30:10 UTC

[james-project] branch master updated: JAMES-1902 Avoid creating the SPOOL MailQueue upon injection

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b9198c  JAMES-1902 Avoid creating the SPOOL MailQueue upon injection
     new db793aa  Merge remote-tracking branch 'benoit/mailetContext'
8b9198c is described below

commit 8b9198c3fa0624df61a24416ada24b5584496159
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jun 13 13:46:25 2019 +0700

    JAMES-1902 Avoid creating the SPOOL MailQueue upon injection
    
    Reusing a maybe not yet initialized component is dangerous. We should
    rather do this as a startable to ensure initialization is well performed
    
    Additionally, JamesMailetContext should rely of constructor based injected
    final fields where possible.
---
 .../modules/server/CamelMailetContainerModule.java | 20 +---------------
 .../mailetcontainer/impl/JamesMailetContext.java   | 27 ++++++----------------
 .../impl/JamesMailetContextTest.java               |  8 +++----
 3 files changed, 12 insertions(+), 43 deletions(-)

diff --git a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
index 8071593..3d0aa24 100644
--- a/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
+++ b/server/container/guice/mailet/src/main/java/org/apache/james/modules/server/CamelMailetContainerModule.java
@@ -28,8 +28,6 @@ import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.impl.SimpleRegistry;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
-import org.apache.james.dnsservice.api.DNSService;
-import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.lifecycle.api.Startable;
 import org.apache.james.mailetcontainer.api.MailProcessor;
 import org.apache.james.mailetcontainer.api.MailetLoader;
@@ -44,7 +42,6 @@ import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.transport.mailets.RemoveMimeHeader;
 import org.apache.james.transport.matchers.All;
-import org.apache.james.user.api.UsersRepository;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.apache.james.utils.GuiceMailetLoader;
 import org.apache.james.utils.GuiceMatcherLoader;
@@ -61,7 +58,6 @@ import com.google.common.base.Preconditions;
 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;
@@ -84,6 +80,7 @@ public class CamelMailetContainerModule extends AbstractModule {
         bind(JamesMailSpooler.class).in(Scopes.SINGLETON);
         bind(MailSpoolerMBean.class).to(JamesMailSpooler.class);
 
+        bind(JamesMailetContext.class).in(Scopes.SINGLETON);
         bind(MailetContext.class).to(JamesMailetContext.class);
 
         bind(MailetLoader.class).to(GuiceMailetLoader.class);
@@ -97,20 +94,6 @@ public class CamelMailetContainerModule extends AbstractModule {
         transportProcessorChecks.addBinding().toInstance(BCC_Check);
     }
 
-    @Provides
-    @Singleton
-    private JamesMailetContext provideMailetContext(MailQueueFactory<?> mailQueueFactory,
-                                                    DNSService dns,
-                                                    UsersRepository localusers,
-                                                    DomainList domains) {
-        JamesMailetContext jamesMailetContext = new JamesMailetContext();
-        jamesMailetContext.setDNSService(dns);
-        jamesMailetContext.retrieveRootMailQueue(mailQueueFactory);
-        jamesMailetContext.setUsersRepository(localusers);
-        jamesMailetContext.setDomainList(domains);
-        return jamesMailetContext;
-    }
-
     @Singleton
     public static class MailetModuleConfigurationPerformer implements ConfigurationPerformer {
 
@@ -189,7 +172,6 @@ public class CamelMailetContainerModule extends AbstractModule {
 
         private void configureMailetContext() throws ConfigurationException {
             mailetContext.configure(getMailetContextConfiguration());
-            mailetContext.retrieveRootMailQueue(mailQueueFactory);
         }
 
         private HierarchicalConfiguration getMailetContextConfiguration() {
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 de97f11..ea8a0bf 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
@@ -72,34 +72,20 @@ public class JamesMailetContext implements MailetContext, Configurable {
      * A hash table of server attributes These are the MailetContext attributes
      */
     private final Map<String, Object> attributes = new ConcurrentHashMap<>();
-    protected DNSService dns;
-
-    private UsersRepository localusers;
 
+    protected final DNSService dns;
+    private final UsersRepository localusers;
+    private final DomainList domains;
+    private final MailQueueFactory<?> mailQueueFactory;
     private MailQueue rootMailQueue;
-
-    private DomainList domains;
-
     private MailAddress postmaster;
 
     @Inject
-    public void retrieveRootMailQueue(MailQueueFactory<?> mailQueueFactory) {
-        this.rootMailQueue = mailQueueFactory.createQueue(MailQueueFactory.SPOOL);
-    }
-
-    @Inject
-    public void setDNSService(DNSService dns) {
+    public JamesMailetContext(DNSService dns, UsersRepository localusers, DomainList domains, MailQueueFactory<?> mailQueueFactory) {
         this.dns = dns;
-    }
-
-    @Inject
-    public void setUsersRepository(UsersRepository localusers) {
         this.localusers = localusers;
-    }
-
-    @Inject
-    public void setDomainList(DomainList domains) {
         this.domains = domains;
+        this.mailQueueFactory = mailQueueFactory;
     }
 
     @Override
@@ -460,6 +446,7 @@ public class JamesMailetContext implements MailetContext, Configurable {
 
     @Override
     public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        this.rootMailQueue = mailQueueFactory.createQueue(MailQueueFactory.SPOOL);
         try {
 
             // Get postmaster
diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
index 09c85c5..c08ee1f 100644
--- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
+++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
@@ -30,6 +30,7 @@ import java.util.concurrent.TimeUnit;
 
 import javax.mail.internet.MimeMessage;
 
+import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
@@ -79,13 +80,12 @@ public class JamesMailetContextTest {
 
         usersRepository = MemoryUsersRepository.withVirtualHosting();
         usersRepository.setDomainList(domainList);
-        testee = new JamesMailetContext();
         MailQueueFactory<MailQueue> mailQueueFactory = mock(MailQueueFactory.class);
         spoolMailQueue = mock(MailQueue.class);
         when(mailQueueFactory.createQueue(MailQueueFactory.SPOOL)).thenReturn(spoolMailQueue);
-        testee.retrieveRootMailQueue(mailQueueFactory);
-        testee.setDomainList(domainList);
-        testee.setUsersRepository(usersRepository);
+        DNSService dnsService = null;
+        testee = new JamesMailetContext(dnsService, usersRepository, domainList, mailQueueFactory);
+        testee.configure(new HierarchicalConfiguration());
         mailAddress = new MailAddress(USERMAIL);
     }
 


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