Repository: james-project
Updated Branches:
  refs/heads/master 16e4d9f93 -> f121dd8d4


JAMES-2619 Make sure to name all Executors and Threads


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

Branch: refs/heads/master
Commit: e96b5cbb38ebdbe03b1733c8cb835609591cca1e
Parents: b0ebfb6
Author: Matthieu Baechler <matth...@apache.org>
Authored: Tue Dec 4 18:21:36 2018 +0100
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Thu Dec 6 15:03:57 2018 +0700

----------------------------------------------------------------------
 .../cassandra/migration/CassandraMigrationServiceTest.java   | 4 +++-
 .../apache/james/backends/es/ElasticSearchIndexerTest.java   | 6 +++++-
 .../backend/rabbitmq/RabbitMQConnectionFactoryTest.java      | 4 +++-
 .../org/apache/james/backend/rabbitmq/RabbitMQExtension.java | 5 ++++-
 .../org/apache/james/mailbox/MailboxManagerStressTest.java   | 5 ++++-
 .../james/mailbox/cassandra/mail/CassandraACLMapperTest.java | 5 ++++-
 .../mailbox/elasticsearch/ElasticSearchIntegrationTest.java  | 6 ++++--
 .../ElasticSearchQuotaSearchTestSystemExtension.java         | 5 ++++-
 .../events/ElasticSearchQuotaMailboxListenerTest.java        | 5 ++++-
 .../james/mailbox/store/event/AsynchronousEventDelivery.java | 5 ++++-
 .../elasticsearch/host/ElasticSearchHostSystem.java          | 5 ++++-
 .../java/org/apache/james/imap/processor/IdleProcessor.java  | 5 ++++-
 .../james/imap/processor/base/SelectedMailboxImplTest.java   | 5 ++++-
 .../apache/james/protocols/netty/AbstractAsyncServer.java    | 8 ++++++--
 .../modules/mailbox/ScheduledExecutorServiceProvider.java    | 6 +++++-
 .../org/apache/james/JamesServerWithRetryConnectionTest.java | 5 ++++-
 .../james/modules/server/AsyncTasksExecutorModule.java       | 6 +++++-
 .../apache/james/util/concurrency/ConcurrentTestRunner.java  | 5 ++++-
 .../org/apache/james/util/CompletableFutureUtilTest.java     | 5 ++++-
 .../org/apache/james/util/retry/RetryExecutorUtilTest.java   | 5 ++++-
 .../org/apache/james/transport/mailets/RemoteDelivery.java   | 5 ++++-
 .../webadmin/routes/ElasticSearchQuotaSearchExtension.java   | 5 ++++-
 .../main/java/org/apache/james/queue/file/FileMailQueue.java | 3 ++-
 .../main/java/org/apache/james/queue/rabbitmq/Dequeuer.java  | 5 ++++-
 .../main/java/org/apache/james/task/MemoryTaskManager.java   | 5 ++++-
 .../main/java/org/apache/james/junit/ExecutorExtension.java  | 5 ++++-
 .../apache/james/spamassassin/mock/MockSpamdTestRule.java    | 3 ++-
 27 files changed, 107 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
index 7730e80..7631f4b 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
@@ -39,6 +39,7 @@ import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionDAO;
 import org.apache.james.backends.cassandra.versions.SchemaVersion;
 import org.apache.james.task.Task;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
@@ -74,7 +75,8 @@ public class CassandraMigrationServiceTest {
             .put(LATEST_VERSION, successfulMigration)
             .build();
         testee = new CassandraMigrationService(schemaVersionDAO, 
allMigrationClazz, LATEST_VERSION);
-        executorService = Executors.newFixedThreadPool(2);
+        executorService = Executors.newFixedThreadPool(2,
+            NamedThreadFactory.withClassName(getClass()));
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
----------------------------------------------------------------------
diff --git 
a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
 
b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
index fa51c8f..0654a78 100644
--- 
a/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
+++ 
b/backends-common/elasticsearch/src/test/java/org/apache/james/backends/es/ElasticSearchIndexerTest.java
@@ -24,8 +24,10 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.elasticsearch.index.query.QueryBuilders.termQuery;
 
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.backends.es.utils.TestingClientProvider;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.Client;
 import org.elasticsearch.index.query.QueryBuilders;
@@ -61,7 +63,9 @@ public class ElasticSearchIndexerTest {
             .useIndex(INDEX_NAME)
             .addAlias(ALIAS_NAME)
             .createIndexAndAliases(clientProvider.get());
-        testee = new ElasticSearchIndexer(clientProvider.get(), 
Executors.newSingleThreadExecutor(), ALIAS_NAME, TYPE_NAME, MINIMUM_BATCH_SIZE);
+        testee = new ElasticSearchIndexer(clientProvider.get(),
+            
Executors.newSingleThreadExecutor(NamedThreadFactory.withClassName(getClass())),
+            ALIAS_NAME, TYPE_NAME, MINIMUM_BATCH_SIZE);
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactoryTest.java
 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactoryTest.java
index 489f557f..87d9904 100644
--- 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactoryTest.java
+++ 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQConnectionFactoryTest.java
@@ -24,7 +24,9 @@ import static 
org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.net.URI;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -36,7 +38,7 @@ class RabbitMQConnectionFactoryTest {
 
     @BeforeEach
     void setUp() throws Exception {
-        scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
+        scheduledExecutor = 
Executors.newSingleThreadScheduledExecutor(NamedThreadFactory.withClassName(getClass()));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
----------------------------------------------------------------------
diff --git 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
index acf1a2c..d6d2ead 100644
--- 
a/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
+++ 
b/backends-common/rabbitmq/src/test/java/org/apache/james/backend/rabbitmq/RabbitMQExtension.java
@@ -22,7 +22,9 @@ import static 
org.apache.james.backend.rabbitmq.RabbitMQFixture.DEFAULT_MANAGEME
 
 import java.net.URISyntaxException;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
@@ -91,8 +93,9 @@ public class RabbitMQExtension implements BeforeAllCallback, 
BeforeEachCallback,
             .minDelay(ONE_HUNDRED_MILLISECONDS)
             .build();
 
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
         return new RabbitMQConnectionFactory(
             rabbitMQConfiguration,
-            new 
AsyncRetryExecutor(Executors.newSingleThreadScheduledExecutor()));
+            new 
AsyncRetryExecutor(Executors.newSingleThreadScheduledExecutor(threadFactory)));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
index 9f13dec..21dbb71 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -36,6 +37,7 @@ import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mime4j.dom.Message;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -55,9 +57,10 @@ public abstract class MailboxManagerStressTest {
 
     @Test
     public void testStressTest() throws InterruptedException, MailboxException 
{
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
 
         final CountDownLatch latch = new CountDownLatch(APPEND_OPERATIONS);
-        final ExecutorService pool = 
Executors.newFixedThreadPool(APPEND_OPERATIONS / 20);
+        final ExecutorService pool = 
Executors.newFixedThreadPool(APPEND_OPERATIONS / 20, threadFactory);
         final Collection<MessageUid> uList = new ConcurrentLinkedDeque<>();
         final String username = "username";
         MailboxSession session = mailboxManager.createSystemSession(username);

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
index cdea6fa..d9f7c89 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
@@ -27,6 +27,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
@@ -40,6 +41,7 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -59,7 +61,8 @@ class CassandraACLMapperTest {
     void setUp(CassandraCluster cassandra) {
         cassandraACLMapper = GuiceUtils.testInjector(cassandra)
             .getInstance(CassandraACLMapper.class);
-        executor = Executors.newFixedThreadPool(2);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executor = Executors.newFixedThreadPool(2, threadFactory);
     }
 
     @AfterEach

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 666177d..4dc236e 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -24,6 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.nio.charset.StandardCharsets;
 import java.time.ZoneId;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
@@ -50,6 +51,7 @@ import org.apache.james.mailbox.tika.TikaHttpClientImpl;
 import org.apache.james.mailbox.tika.TikaTextExtractor;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.mime4j.dom.Message;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.client.Client;
 import org.junit.ClassRule;
 import org.junit.Rule;
@@ -99,11 +101,11 @@ public class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest
         storeMailboxManager = new InMemoryIntegrationResources()
             .createMailboxManager(new SimpleGroupMembershipResolver());
 
-
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
         ElasticSearchListeningMessageSearchIndex 
elasticSearchListeningMessageSearchIndex = new 
ElasticSearchListeningMessageSearchIndex(
             storeMailboxManager.getMapperFactory(),
             new ElasticSearchIndexer(client,
-                Executors.newSingleThreadExecutor(),
+                Executors.newSingleThreadExecutor(threadFactory),
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
                 MailboxElasticSearchConstants.MESSAGE_TYPE,
                 BATCH_SIZE),

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
----------------------------------------------------------------------
diff --git 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
index 2d511cf..872cf33 100644
--- 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/ElasticSearchQuotaSearchTestSystemExtension.java
@@ -22,6 +22,7 @@ package org.apache.james.quota.search.elasticsearch;
 import static org.mockito.Mockito.mock;
 
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
@@ -36,6 +37,7 @@ import org.apache.james.quota.search.QuotaSearchTestSystem;
 import 
org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.user.memory.MemoryUsersRepository;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.client.Client;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
@@ -69,8 +71,9 @@ public class ElasticSearchQuotaSearchTestSystemExtension 
implements ParameterRes
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
             usersRepository.setDomainList(domainList);
 
+            ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
             ElasticSearchQuotaMailboxListener listener = new 
ElasticSearchQuotaMailboxListener(
-                new ElasticSearchIndexer(client, 
Executors.newSingleThreadExecutor(),
+                new ElasticSearchIndexer(client, 
Executors.newSingleThreadExecutor(threadFactory),
                     
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index 4ea8e30..dabec13 100644
--- 
a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ 
b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
 
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
@@ -39,6 +40,7 @@ import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
 import 
org.apache.james.quota.search.elasticsearch.QuotaRatioElasticSearchConstants;
 import 
org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.client.Client;
 import org.junit.Before;
@@ -66,9 +68,10 @@ public class ElasticSearchQuotaMailboxListenerTest {
         client = QuotaSearchIndexCreationUtil.prepareDefaultClient(
             new TestingClientProvider(embeddedElasticSearch.getNode()).get(), 
ElasticSearchConfiguration.DEFAULT_CONFIGURATION);
 
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
         quotaMailboxListener = new ElasticSearchQuotaMailboxListener(
             new ElasticSearchIndexer(client,
-                Executors.newSingleThreadExecutor(),
+                Executors.newSingleThreadExecutor(threadFactory),
                 
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
                 QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE,
                 BATCH_SIZE),

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java
index 9ca9824..593de54 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java
@@ -21,11 +21,13 @@ package org.apache.james.mailbox.store.event;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import javax.annotation.PreDestroy;
 
 import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 
 public class AsynchronousEventDelivery implements EventDelivery {
 
@@ -33,7 +35,8 @@ public class AsynchronousEventDelivery implements 
EventDelivery {
     private final SynchronousEventDelivery synchronousEventDelivery;
 
     public AsynchronousEventDelivery(int threadPoolSize, 
SynchronousEventDelivery synchronousEventDelivery) {
-        this.threadPoolExecutor = Executors.newFixedThreadPool(threadPoolSize);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        this.threadPoolExecutor = Executors.newFixedThreadPool(threadPoolSize, 
threadFactory);
         this.synchronousEventDelivery = synchronousEventDelivery;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index 2404f25..4186ee9 100644
--- 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -23,6 +23,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.time.ZoneId;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.NotImplementedException;
@@ -61,6 +62,7 @@ import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
 import org.apache.james.mpt.host.JamesImapHostSystem;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.client.Client;
 
 public class ElasticSearchHostSystem extends JamesImapHostSystem {
@@ -96,10 +98,11 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
         InMemoryMailboxSessionMapperFactory factory = new 
InMemoryMailboxSessionMapperFactory();
         InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
 
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
         ElasticSearchListeningMessageSearchIndex searchIndex = new 
ElasticSearchListeningMessageSearchIndex(
             factory,
             new ElasticSearchIndexer(client,
-                Executors.newSingleThreadExecutor(),
+                Executors.newSingleThreadExecutor(threadFactory),
                 MailboxElasticSearchConstants.DEFAULT_MAILBOX_WRITE_ALIAS,
                 MailboxElasticSearchConstants.MESSAGE_TYPE),
             new ElasticSearchSearcher(client,

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
----------------------------------------------------------------------
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 0018458..7700d28 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -49,6 +50,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -78,7 +80,8 @@ public class IdleProcessor extends 
AbstractMailboxProcessor<IdleRequest> impleme
         this.heartbeatIntervalUnit = 
imapConfiguration.getIdleTimeIntervalUnit();
         this.enableIdle = imapConfiguration.isEnableIdle();
         if (enableIdle) {
-            this.heartbeatExecutor = 
Executors.newScheduledThreadPool(DEFAULT_SCHEDULED_POOL_CORE_SIZE);
+            ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+            this.heartbeatExecutor = 
Executors.newScheduledThreadPool(DEFAULT_SCHEDULED_POOL_CORE_SIZE, 
threadFactory);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
----------------------------------------------------------------------
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index e923b2a..ef8d5b9 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -31,6 +31,7 @@ import java.util.Iterator;
 import java.util.TreeMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.mail.Flags;
@@ -51,6 +52,7 @@ import org.apache.james.mailbox.store.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -79,7 +81,8 @@ public class SelectedMailboxImplTest {
 
     @Before
     public void setUp() throws Exception {
-        executorService = Executors.newFixedThreadPool(1);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executorService = Executors.newFixedThreadPool(1, threadFactory);
         mailboxPath = MailboxPath.forUser("tell...@linagora.com", 
MailboxConstants.INBOX);
         mailboxManager = mock(MailboxManager.class);
         messageManager = mock(MessageManager.class);

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
----------------------------------------------------------------------
diff --git 
a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
 
b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
index faddde6..ef8554d 100644
--- 
a/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
+++ 
b/protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
@@ -23,8 +23,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.protocols.api.ProtocolServer;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.jboss.netty.bootstrap.ServerBootstrap;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelPipelineFactory;
@@ -203,7 +205,8 @@ public abstract class AbstractAsyncServer implements 
ProtocolServer {
      * @return bossExecutor
      */
     protected Executor createBossExecutor() {
-        return Executors.newCachedThreadPool();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        return Executors.newCachedThreadPool(threadFactory);
     }
 
     /**
@@ -212,7 +215,8 @@ public abstract class AbstractAsyncServer implements 
ProtocolServer {
      * @return workerExecutor
      */
     protected Executor createWorkerExecutor() {
-        return Executors.newCachedThreadPool();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        return Executors.newCachedThreadPool(threadFactory);
     }
     
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ScheduledExecutorServiceProvider.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ScheduledExecutorServiceProvider.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ScheduledExecutorServiceProvider.java
index 48fe3f1..56ec923 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ScheduledExecutorServiceProvider.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ScheduledExecutorServiceProvider.java
@@ -21,9 +21,12 @@ package org.apache.james.modules.mailbox;
 
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 
 import javax.annotation.PreDestroy;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.inject.Provider;
 
@@ -34,7 +37,8 @@ class ScheduledExecutorServiceProvider implements 
Provider<ScheduledExecutorServ
 
     @VisibleForTesting
     ScheduledExecutorServiceProvider() {
-        scheduler = Executors.newSingleThreadScheduledExecutor();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        scheduler = Executors.newSingleThreadScheduledExecutor(threadFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
index 5b5b33f..69954af 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
@@ -29,6 +29,7 @@ import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.james.backends.es.ElasticSearchConfiguration;
@@ -37,6 +38,7 @@ import org.apache.james.mailbox.store.search.PDFTextExtractor;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
 import org.apache.james.util.Host;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.apache.james.util.docker.Images;
 import org.apache.james.util.docker.SwarmGenericContainer;
 import org.junit.jupiter.api.AfterEach;
@@ -104,7 +106,8 @@ class JamesServerWithRetryConnectionTest {
 
     @BeforeEach
     void setUp() throws IOException {
-        executorService = Executors.newFixedThreadPool(1);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executorService = Executors.newFixedThreadPool(1, threadFactory);
         socketChannel = SocketChannel.open();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
index b8e42fe..fc30b12 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/AsyncTasksExecutorModule.java
@@ -20,9 +20,12 @@ package org.apache.james.modules.server;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import javax.annotation.PreDestroy;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
+
 import com.google.inject.AbstractModule;
 import com.google.inject.Provider;
 import com.google.inject.name.Names;
@@ -33,9 +36,10 @@ public class AsyncTasksExecutorModule extends AbstractModule 
{
 
     @Override
     protected void configure() {
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
         bind(ExecutorService.class).annotatedWith(Names.named("AsyncExecutor"))
             .toProvider(new LifecycleAwareExecutorServiceProvider(
-                Executors.newFixedThreadPool(THREAD_POOL_SIZE)));
+                Executors.newFixedThreadPool(THREAD_POOL_SIZE, 
threadFactory)));
     }
 
     public static class LifecycleAwareExecutorServiceProvider implements 
Provider<ExecutorService> {

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
----------------------------------------------------------------------
diff --git 
a/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
 
b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
index 8411d40..eec20c0 100644
--- 
a/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
+++ 
b/server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
@@ -28,8 +28,10 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -141,7 +143,8 @@ public class ConcurrentTestRunner {
         this.operationCount = operationCount;
         this.countDownLatch = new CountDownLatch(threadCount);
         this.biConsumer = biConsumer;
-        this.executorService = Executors.newFixedThreadPool(threadCount);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        this.executorService = Executors.newFixedThreadPool(threadCount, 
threadFactory);
         this.futures = new ArrayList<>();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
 
b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
index bf136ca..cdfce5e 100644
--- 
a/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
+++ 
b/server/container/util/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java
@@ -27,11 +27,13 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentLinkedDeque;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -44,7 +46,8 @@ public class CompletableFutureUtilTest {
 
     @Before
     public void setUp() {
-        executorService = Executors.newFixedThreadPool(4);
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executorService = Executors.newFixedThreadPool(4, threadFactory);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/container/util/src/test/java/org/apache/james/util/retry/RetryExecutorUtilTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/util/src/test/java/org/apache/james/util/retry/RetryExecutorUtilTest.java
 
b/server/container/util/src/test/java/org/apache/james/util/retry/RetryExecutorUtilTest.java
index 81c2f11..28307fb 100644
--- 
a/server/container/util/src/test/java/org/apache/james/util/retry/RetryExecutorUtilTest.java
+++ 
b/server/container/util/src/test/java/org/apache/james/util/retry/RetryExecutorUtilTest.java
@@ -27,7 +27,9 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ThreadFactory;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -49,7 +51,8 @@ public class RetryExecutorUtilTest {
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
-        scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        scheduledExecutor = 
Executors.newSingleThreadScheduledExecutor(threadFactory);
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
index 48bcf65..4e5d68f 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.inject.Inject;
@@ -42,6 +43,7 @@ import 
org.apache.james.transport.mailets.remote.delivery.Bouncer;
 import org.apache.james.transport.mailets.remote.delivery.DeliveryRunnable;
 import 
org.apache.james.transport.mailets.remote.delivery.RemoteDeliveryConfiguration;
 import 
org.apache.james.transport.mailets.remote.delivery.RemoteDeliverySocketFactory;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
 import org.slf4j.Logger;
@@ -171,7 +173,8 @@ public class RemoteDelivery extends GenericMailet {
     }
 
     private void initDeliveryThreads() {
-        executor = 
Executors.newFixedThreadPool(configuration.getWorkersThreadCount());
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executor = 
Executors.newFixedThreadPool(configuration.getWorkersThreadCount(), 
threadFactory);
         for (int a = 0; a < configuration.getWorkersThreadCount(); a++) {
             executor.execute(
                 new DeliveryRunnable(queue,

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
index 2eddc4c..2e9c409 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ElasticSearchQuotaSearchExtension.java
@@ -22,6 +22,7 @@ package org.apache.james.webadmin.routes;
 import static org.mockito.Mockito.mock;
 
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
 import org.apache.james.backends.es.ElasticSearchConfiguration;
 import org.apache.james.backends.es.ElasticSearchIndexer;
@@ -39,6 +40,7 @@ import 
org.apache.james.quota.search.elasticsearch.QuotaSearchIndexCreationUtil;
 import 
org.apache.james.quota.search.elasticsearch.events.ElasticSearchQuotaMailboxListener;
 import 
org.apache.james.quota.search.elasticsearch.json.QuotaRatioToElasticSearchJson;
 import org.apache.james.user.memory.MemoryUsersRepository;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.elasticsearch.client.Client;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
@@ -72,8 +74,9 @@ public class ElasticSearchQuotaSearchExtension implements 
ParameterResolver, Bef
             MemoryDomainList domainList = new MemoryDomainList(dnsService);
             usersRepository.setDomainList(domainList);
 
+            ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
             ElasticSearchQuotaMailboxListener listener = new 
ElasticSearchQuotaMailboxListener(
-                new ElasticSearchIndexer(client, 
Executors.newSingleThreadExecutor(),
+                new ElasticSearchIndexer(client, 
Executors.newSingleThreadExecutor(threadFactory),
                     
QuotaRatioElasticSearchConstants.DEFAULT_QUOTA_RATIO_WRITE_ALIAS,
                     QuotaRatioElasticSearchConstants.QUOTA_RATIO_TYPE),
                 new QuotaRatioToElasticSearchJson());

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/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 cc82148..a4d851a 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
@@ -53,6 +53,7 @@ import 
org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.james.server.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.server.core.MimeMessageSource;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -70,7 +71,7 @@ public class FileMailQueue implements ManageableMailQueue {
 
     private final Map<String, FileItem> keyMappings = 
Collections.synchronizedMap(new LinkedHashMap<>());
     private final BlockingQueue<String> inmemoryQueue = new 
LinkedBlockingQueue<>();
-    private final ScheduledExecutorService scheduler = 
Executors.newSingleThreadScheduledExecutor();
+    private final ScheduledExecutorService scheduler = 
Executors.newSingleThreadScheduledExecutor(NamedThreadFactory.withClassName(getClass()));
     private static final AtomicLong COUNTER = new AtomicLong();
     private final String queueDirName;
     private final File queueDir;

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
index 4354a50..6caef63 100644
--- 
a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
+++ 
b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
@@ -24,6 +24,7 @@ import static 
org.apache.james.queue.api.MailQueue.DEQUEUED_METRIC_NAME_PREFIX;
 import java.io.IOException;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.function.Consumer;
 import java.util.function.Function;
 
@@ -32,6 +33,7 @@ import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.rabbitmq.view.api.DeleteCondition;
 import org.apache.james.queue.rabbitmq.view.api.MailQueueView;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.apache.mailet.Mail;
 
 import com.github.fge.lambdas.Throwing;
@@ -125,7 +127,8 @@ class Dequeuer {
     }
 
     private CompletableFuture<GetResponse> pollChannel() {
-        return new 
AsyncRetryExecutor(Executors.newSingleThreadScheduledExecutor())
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        return new 
AsyncRetryExecutor(Executors.newSingleThreadScheduledExecutor(threadFactory))
             .withFixedRate()
             .withMinDelay(TEN_MS)
             .retryOn(NoMailYetException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/task/src/main/java/org/apache/james/task/MemoryTaskManager.java
----------------------------------------------------------------------
diff --git 
a/server/task/src/main/java/org/apache/james/task/MemoryTaskManager.java 
b/server/task/src/main/java/org/apache/james/task/MemoryTaskManager.java
index e0cbcc2..e26e173 100644
--- a/server/task/src/main/java/org/apache/james/task/MemoryTaskManager.java
+++ b/server/task/src/main/java/org/apache/james/task/MemoryTaskManager.java
@@ -25,11 +25,13 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.ThreadFactory;
 import java.util.function.Consumer;
 
 import javax.annotation.PreDestroy;
 
 import org.apache.james.util.MDCBuilder;
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -49,7 +51,8 @@ public class MemoryTaskManager implements TaskManager {
     public MemoryTaskManager() {
         idToExecutionDetails = new ConcurrentHashMap<>();
         idToFuture = new ConcurrentHashMap<>();
-        executor = Executors.newSingleThreadExecutor();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executor = Executors.newSingleThreadExecutor(threadFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
----------------------------------------------------------------------
diff --git 
a/server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java 
b/server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
index c9b9545..53b87f3 100644
--- a/server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
+++ b/server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
@@ -21,7 +21,9 @@ package org.apache.james.junit;
 
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
@@ -35,7 +37,8 @@ public class ExecutorExtension implements ParameterResolver, 
BeforeEachCallback,
 
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
-        executorService = Executors.newWorkStealingPool();
+        ThreadFactory threadFactory = 
NamedThreadFactory.withClassName(getClass());
+        executorService = Executors.newCachedThreadPool(threadFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/e96b5cbb/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdTestRule.java
----------------------------------------------------------------------
diff --git 
a/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdTestRule.java
 
b/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdTestRule.java
index 9712a42..7364d86 100644
--- 
a/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdTestRule.java
+++ 
b/third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdTestRule.java
@@ -22,11 +22,12 @@ package org.apache.james.spamassassin.mock;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import org.apache.james.util.concurrent.NamedThreadFactory;
 import org.junit.rules.ExternalResource;
 
 public class MockSpamdTestRule extends ExternalResource {
 
-    private ExecutorService executor = Executors.newSingleThreadExecutor();
+    private ExecutorService executor = 
Executors.newSingleThreadExecutor(NamedThreadFactory.withClassName(getClass()));
     private MockSpamd spamd = new MockSpamd();
 
     @Override


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

Reply via email to