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 2018/06/12 00:03:34 UTC

[15/17] james-project git commit: JAMES-2414 Guice should used the MixedEventDelivery

JAMES-2414 Guice should used the MixedEventDelivery

Allows per listener async/sync executions


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

Branch: refs/heads/master
Commit: 4fae4fdcb05796a2949bc86f9345dc73d5f6d46e
Parents: 150e529
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 7 16:31:41 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 12 07:01:45 2018 +0700

----------------------------------------------------------------------
 .../modules/mailbox/DefaultEventModule.java     | 29 ++++++++++++++++++--
 1 file changed, 26 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4fae4fdc/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 9cf2f97..b788ed9 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -20,17 +20,20 @@
 package org.apache.james.modules.mailbox;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.store.event.AsynchronousEventDelivery;
 import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.EventDelivery;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
+import org.apache.james.mailbox.store.event.MixedEventDelivery;
 import org.apache.james.mailbox.store.event.SynchronousEventDelivery;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
@@ -38,20 +41,20 @@ import org.apache.james.utils.ConfigurationPerformer;
 
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
 import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 
 public class DefaultEventModule extends AbstractModule {
 
+    private static final int DEFAULT_POOL_SIZE = 8;
+
     @Override
     protected void configure() {
         bind(DefaultDelegatingMailboxListener.class).in(Scopes.SINGLETON);
         bind(DelegatingMailboxListener.class).to(DefaultDelegatingMailboxListener.class);
 
-        bind(SynchronousEventDelivery.class).in(Scopes.SINGLETON);
-        bind(EventDelivery.class).to(SynchronousEventDelivery.class);
-
         Multibinder.newSetBinder(binder(), ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
@@ -64,6 +67,26 @@ public class DefaultEventModule extends AbstractModule {
         Multibinder.newSetBinder(binder(), MailboxListener.class);
     }
 
+    @Provides
+    @Singleton
+    EventDelivery provideEventDelivery(ConfigurationProvider configurationProvider) {
+        int poolSize = retrievePoolSize(configurationProvider);
+
+        return new MixedEventDelivery(
+            new AsynchronousEventDelivery(poolSize),
+            new SynchronousEventDelivery());
+    }
+
+    private int retrievePoolSize(ConfigurationProvider configurationProvider) {
+        try {
+            return Optional.ofNullable(configurationProvider.getConfiguration("listeners")
+                .getInteger("poolSize", null))
+                .orElse(DEFAULT_POOL_SIZE);
+        } catch (ConfigurationException e) {
+            return DEFAULT_POOL_SIZE;
+        }
+    }
+
     @Singleton
     public static class ListenerRegistrationPerformer implements ConfigurationPerformer {
         private final ConfigurationProvider configurationProvider;


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