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 2018/01/23 16:54:31 UTC
[07/10] james-project git commit: JAMES-2292 add a proper createQueue
method to MailQueueFactory
JAMES-2292 add a proper createQueue method to MailQueueFactory
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7574fdf8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7574fdf8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7574fdf8
Branch: refs/heads/master
Commit: 7574fdf83e6bb432668b2b4d715084e845bdc2d0
Parents: e144652
Author: Antoine Duprat <ad...@linagora.com>
Authored: Tue Jan 23 13:51:21 2018 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Jan 23 14:03:20 2018 +0100
----------------------------------------------------------------------
.../mailetcontainer/impl/JamesMailSpooler.java | 2 +-
.../impl/JamesMailetContext.java | 2 +-
.../impl/JamesMailetContextTest.java | 2 +-
.../james/transport/mailets/RemoteDelivery.java | 2 +-
.../delivery/RemoteDeliveryRunningTest.java | 2 +-
.../remote/delivery/RemoteDeliveryTest.java | 2 +-
.../apache/james/fetchmail/FetchScheduler.java | 2 +-
.../org/apache/james/jmap/send/MailSpool.java | 2 +-
.../apache/james/jmap/send/MailSpoolTest.java | 2 +-
.../james/smtpserver/SendMailHandler.java | 2 +-
.../apache/james/smtpserver/SMTPServerTest.java | 2 +-
.../activemq/ActiveMQMailQueueFactory.java | 2 +-
.../activemq/ActiveMQMailQueueFactoryTest.java | 3 +-
.../james/queue/api/MailQueueFactory.java | 5 +-
.../queue/api/MailQueueFactoryContract.java | 48 +++++++++++++++++---
.../api/ManageableMailQueueFactoryContract.java | 45 ++++++++++++++++++
.../james/queue/file/FileMailQueueFactory.java | 29 +++++++-----
.../queue/file/FileMailQueueFactoryTest.java | 4 +-
.../james/queue/jms/JMSMailQueueFactory.java | 2 +-
.../queue/library/AbstractMailQueueFactory.java | 25 +++++-----
.../queue/jms/JMSMailQueueFactoryTest.java | 3 +-
.../library/AbstractMailQueueFactoryTest.java | 16 +++----
.../queue/memory/MemoryMailQueueFactory.java | 10 ++--
.../memory/MemoryMailQueueFactoryTest.java | 33 +++-----------
24 files changed, 163 insertions(+), 84 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
index 6f8cb6f..26bf267 100644
--- a/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
+++ b/server/mailet/mailetcontainer-camel/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
@@ -122,7 +122,7 @@ public class JamesMailSpooler implements Runnable, Disposable, Configurable, Mai
public void init() {
LOGGER.info("{} init...", getClass().getName());
- queue = queueFactory.getQueue(MailQueueFactory.SPOOL);
+ queue = queueFactory.createQueue(MailQueueFactory.SPOOL);
LOGGER.info("{} uses {} Thread(s)", getClass().getName(), numThreads);
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/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 80d9172..8081cac 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
@@ -83,7 +83,7 @@ public class JamesMailetContext implements MailetContext, Configurable {
@Inject
public void retrieveRootMailQueue(MailQueueFactory mailQueueFactory) {
- this.rootMailQueue = mailQueueFactory.getQueue(MailQueueFactory.SPOOL);
+ this.rootMailQueue = mailQueueFactory.createQueue(MailQueueFactory.SPOOL);
}
@Inject
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
----------------------------------------------------------------------
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 a8c4391..56b3ef6 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
@@ -80,7 +80,7 @@ public class JamesMailetContextTest {
testee = new JamesMailetContext();
MailQueueFactory mailQueueFactory = mock(MailQueueFactory.class);
spoolMailQueue = mock(MailQueue.class);
- when(mailQueueFactory.getQueue(MailQueueFactory.SPOOL)).thenReturn(spoolMailQueue);
+ when(mailQueueFactory.createQueue(MailQueueFactory.SPOOL)).thenReturn(spoolMailQueue);
testee.retrieveRootMailQueue(mailQueueFactory);
testee.setDomainList(domainList);
testee.setUsersRepository(usersRepository);
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/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 e75b510..602f749 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
@@ -156,7 +156,7 @@ public class RemoteDelivery extends GenericMailet {
public void init() throws MessagingException {
configuration = new RemoteDeliveryConfiguration(getMailetConfig(), domainList);
- queue = queueFactory.getQueue(configuration.getOutGoingQueueName());
+ queue = queueFactory.createQueue(configuration.getOutGoingQueueName());
try {
if (configuration.isBindUsed()) {
RemoteDeliverySocketFactory.setBindAdress(configuration.getBindAddress());
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
index 11d5f79..fa04dc2 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
@@ -52,7 +52,7 @@ public class RemoteDeliveryRunningTest {
mock(MetricFactory.class), RemoteDelivery.ThreadState.START_THREADS);
mailQueue = mock(MailQueue.class);
- when(mailQueueFactory.getQueue(QUEUE_NAME)).thenReturn(mailQueue);
+ when(mailQueueFactory.createQueue(QUEUE_NAME)).thenReturn(mailQueue);
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
index 4fad57d..fd68601 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
@@ -96,7 +96,7 @@ public class RemoteDeliveryTest {
public void setUp() {
MailQueueFactory queueFactory = mock(MailQueueFactory.class);
mailQueue = new FakeMailQueue("any");
- when(queueFactory.getQueue(RemoteDeliveryConfiguration.OUTGOING)).thenReturn(mailQueue);
+ when(queueFactory.createQueue(RemoteDeliveryConfiguration.OUTGOING)).thenReturn(mailQueue);
remoteDelivery = new RemoteDelivery(mock(DNSService.class), mock(DomainList.class), queueFactory, mock(MetricFactory.class), RemoteDelivery.ThreadState.DO_NOT_START_THREADS);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
----------------------------------------------------------------------
diff --git a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
index be69206..44f579e 100644
--- a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
+++ b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
@@ -107,7 +107,7 @@ public class FetchScheduler implements FetchSchedulerMBean, Configurable {
The scheduler service that is used to trigger fetch tasks.
*/
ScheduledExecutorService scheduler = new JMXEnabledScheduledThreadPoolExecutor(numThreads, jmxPath, "scheduler");
- MailQueue queue = queueFactory.getQueue(MailQueueFactory.SPOOL);
+ MailQueue queue = queueFactory.createQueue(MailQueueFactory.SPOOL);
List<HierarchicalConfiguration> fetchConfs = conf.configurationsAt("fetch");
for (HierarchicalConfiguration fetchConf : fetchConfs) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/MailSpool.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/MailSpool.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/MailSpool.java
index a5b686d..312abab 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/MailSpool.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/MailSpool.java
@@ -34,7 +34,7 @@ public class MailSpool {
@Inject
@VisibleForTesting MailSpool(MailQueueFactory queueFactory) {
- queue = queueFactory.getQueue(MailQueueFactory.SPOOL);
+ queue = queueFactory.createQueue(MailQueueFactory.SPOOL);
}
public void send(Mail mail, MailMetadata metadata) throws MailQueueException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailSpoolTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailSpoolTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailSpoolTest.java
index 5912196..abc6291 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailSpoolTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/MailSpoolTest.java
@@ -42,7 +42,7 @@ public class MailSpoolTest {
@Before
public void setup() {
MemoryMailQueueFactory mailQueueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
- myQueue = mailQueueFactory.getQueue(MailQueueFactory.SPOOL);
+ myQueue = mailQueueFactory.createQueue(MailQueueFactory.SPOOL);
mailSpool = new MailSpool(mailQueueFactory);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
index 5ef55a6..a637fd7 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
@@ -50,7 +50,7 @@ public class SendMailHandler implements JamesMessageHook {
@Override
public void init(Configuration config) throws ConfigurationException {
- queue = queueFactory.getQueue(MailQueueFactory.SPOOL);
+ queue = queueFactory.createQueue(MailQueueFactory.SPOOL);
}
@Override
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
index 3453882..1f2382c 100644
--- a/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
+++ b/server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
@@ -308,7 +308,7 @@ public class SMTPServerTest {
});
queueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
- queue = (MemoryMailQueueFactory.MemoryMailQueue) queueFactory.getQueue(MailQueueFactory.SPOOL);
+ queue = queueFactory.createQueue(MailQueueFactory.SPOOL);
chain.put("mailqueuefactory", MailQueueFactory.class, queueFactory);
chain.put("domainlist", DomainList.class, new SimpleDomainList() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/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 8512d49..011143f 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
@@ -49,7 +49,7 @@ public class ActiveMQMailQueueFactory extends JMSMailQueueFactory {
}
@Override
- protected MailQueue createMailQueue(String name) {
+ protected ManageableMailQueue createMailQueue(String name) {
return new ActiveMQMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, useBlob, metricFactory);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
index 37c9c85..7ac74a0 100644
--- a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
+++ b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
@@ -27,6 +27,7 @@ import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.MailQueueFactoryContract;
import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueueFactoryContract;
import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.apache.james.queue.jms.BrokerExtension;
import org.junit.jupiter.api.AfterEach;
@@ -34,7 +35,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(BrokerExtension.class)
-public class ActiveMQMailQueueFactoryTest implements MailQueueFactoryContract<ManageableMailQueue> {
+public class ActiveMQMailQueueFactoryTest implements MailQueueFactoryContract<ManageableMailQueue>, ManageableMailQueueFactoryContract {
private ActiveMQMailQueueFactory mailQueueFactory;
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
index c39d28a..125dd5b 100644
--- a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
+++ b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
@@ -19,6 +19,7 @@
package org.apache.james.queue.api;
+import java.util.Optional;
import java.util.Set;
/**
@@ -37,7 +38,9 @@ public interface MailQueueFactory<T extends MailQueue> {
* @param name
* @return queue
*/
- T getQueue(String name);
+ Optional<T> getQueue(String name);
+
+ T createQueue(String name);
Set<T> listCreatedMailQueues();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
index 93c2e18..dd3bd0d 100644
--- a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
+++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
@@ -38,10 +38,10 @@ public interface MailQueueFactoryContract<T extends MailQueue> {
@Test
default void getUsedMailQueuesShouldReturnPreviouslyCreatedMailQueues() {
- MailQueueFactory mailQueueFactory = getMailQueueFactory();
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
- mailQueueFactory.getQueue(NAME_1);
- mailQueueFactory.getQueue(NAME_2);
+ mailQueueFactory.createQueue(NAME_1);
+ mailQueueFactory.createQueue(NAME_2);
assertThat(mailQueueFactory.listCreatedMailQueues())
.extracting(MailQueue::getName)
@@ -50,14 +50,50 @@ public interface MailQueueFactoryContract<T extends MailQueue> {
@Test
default void getUsedMailQueuesShouldNotReturnDuplicate() {
- MailQueueFactory mailQueueFactory = getMailQueueFactory();
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
- mailQueueFactory.getQueue(NAME_1);
- mailQueueFactory.getQueue(NAME_1);
+ mailQueueFactory.createQueue(NAME_1);
+ mailQueueFactory.createQueue(NAME_1);
assertThat(mailQueueFactory.listCreatedMailQueues())
.extracting(MailQueue::getName)
.containsOnly(NAME_1);
}
+ @Test
+ default void getMailQueueShouldReturnEmptyIfNotCreated() {
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
+
+ assertThat(mailQueueFactory.getQueue(NAME_1)).isEmpty();
+ }
+
+ @Test
+ default void getMailQueueShouldReturnMailQueueIfCreated() {
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
+
+ mailQueueFactory.createQueue(NAME_1);
+
+ assertThat(mailQueueFactory.getQueue(NAME_1).map(MailQueue::getName)).contains(NAME_1);
+ }
+
+ @Test
+ default void getMailQueueShouldReturnEmptyIfQueueDoesNotExist() {
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
+
+ mailQueueFactory.createQueue(NAME_1);
+
+ assertThat(mailQueueFactory.getQueue(NAME_2)).isEmpty();
+ }
+
+ @Test
+ default void getMailQueueShouldNotReturnTheSameQueueForTwoDifferentNames() {
+ MailQueueFactory<T> mailQueueFactory = getMailQueueFactory();
+
+ mailQueueFactory.createQueue(NAME_1);
+ mailQueueFactory.createQueue(NAME_2);
+
+ assertThat(mailQueueFactory.getQueue(NAME_1)).isNotEqualTo(mailQueueFactory.getQueue(NAME_2));
+ }
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java
new file mode 100644
index 0000000..aa61299
--- /dev/null
+++ b/server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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 static org.assertj.core.api.Assertions.assertThat;
+
+import javax.mail.MessagingException;
+
+import org.junit.jupiter.api.Test;
+
+public interface ManageableMailQueueFactoryContract {
+
+ String NAME_1 = "name1";
+
+ MailQueueFactory<ManageableMailQueue> getMailQueueFactory();
+
+ @Test
+ default void createMailQueueShouldNotConflictIfAlreadyExists() throws MessagingException {
+ MailQueueFactory<ManageableMailQueue> mailQueueFactory = getMailQueueFactory();
+ MailQueue firstCreation = mailQueueFactory.createQueue(NAME_1);
+
+ firstCreation.enQueue(Mails.defaultMail().build());
+
+ ManageableMailQueue secondCreation = mailQueueFactory.createQueue(NAME_1);
+ assertThat(secondCreation.getSize()).isEqualTo(1);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/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 8c18e30..16e0bc8 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
@@ -21,6 +21,7 @@ package org.apache.james.queue.file;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import javax.inject.Inject;
@@ -66,19 +67,25 @@ public class FileMailQueueFactory implements MailQueueFactory<ManageableMailQueu
}
@Override
- public ManageableMailQueue getQueue(String name) {
- ManageableMailQueue queue = queues.get(name);
- if (queue == null) {
- synchronized (queues) {
- try {
- queue = new FileMailQueue(mailQueueActionItemDecoratorFactory, fs.getFile("file://var/store/queue"), name, sync);
- queues.put(name, queue);
- } catch (IOException e) {
- throw new RuntimeException("Unable to access queue " + name, e);
- }
+ public Optional<ManageableMailQueue> getQueue(String name) {
+ return Optional.ofNullable(queues.get(name));
+ }
+
+ @Override
+ public ManageableMailQueue createQueue(String name) {
+ return getQueue(name).orElseGet(() -> createAndRegisterQueue(name));
+ }
+
+ private ManageableMailQueue createAndRegisterQueue(String name) {
+ synchronized (queues) {
+ try {
+ FileMailQueue queue = new FileMailQueue(mailQueueActionItemDecoratorFactory, fs.getFile("file://var/store/queue"), name, sync);
+ queues.put(name, queue);
+ return queue;
+ } catch (IOException e) {
+ throw new RuntimeException("Unable to access queue " + name, e);
}
}
- return queue;
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueFactoryTest.java b/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueFactoryTest.java
index e953d32..bd09fd4 100644
--- a/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueFactoryTest.java
+++ b/server/queue/queue-file/src/test/java/org/apache/james/queue/file/FileMailQueueFactoryTest.java
@@ -22,11 +22,13 @@ package org.apache.james.queue.file;
import org.apache.james.filesystem.api.mock.MockFileSystem;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.MailQueueFactoryContract;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueueFactoryContract;
import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
-public class FileMailQueueFactoryTest implements MailQueueFactoryContract {
+public class FileMailQueueFactoryTest implements MailQueueFactoryContract, ManageableMailQueueFactoryContract {
private FileMailQueueFactory mailQueueFactory;
private MockFileSystem fileSystem;
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/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 6329ffc..dbc47dd 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
@@ -45,7 +45,7 @@ public class JMSMailQueueFactory extends AbstractMailQueueFactory<ManageableMail
}
@Override
- protected MailQueue createMailQueue(String name) {
+ protected ManageableMailQueue createMailQueue(String name) {
return new JMSMailQueue(connectionFactory, mailQueueItemDecoratorFactory, name, metricFactory);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
index ec3537f..e1a29dd 100644
--- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
+++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import javax.annotation.PostConstruct;
@@ -91,19 +92,21 @@ public abstract class AbstractMailQueueFactory<T extends MailQueue> implements M
}
@Override
- public final synchronized T getQueue(String name) {
-
- T queue = queues.get(name);
+ public final synchronized Optional<T> getQueue(String name) {
+ return Optional.ofNullable(queues.get(name));
+ }
- if (queue == null) {
- queue = createMailQueue(name);
- if (useJMX) {
- registerMBean(name, queue);
+ @Override
+ public synchronized T createQueue(String name) {
+ return getQueue(name).orElseGet(() -> createAndRegisterQueue(name));
+ }
- }
- queues.put(name, queue);
+ private T createAndRegisterQueue(String name) {
+ T queue = createMailQueue(name);
+ if (useJMX) {
+ registerMBean(name, queue);
}
-
+ queues.put(name, queue);
return queue;
}
@@ -113,7 +116,7 @@ public abstract class AbstractMailQueueFactory<T extends MailQueue> implements M
* @param name
* @return queue
*/
- protected abstract MailQueue createMailQueue(String name);
+ protected abstract T createMailQueue(String name);
protected synchronized void registerMBean(String queuename, MailQueue queue) {
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueFactoryTest.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueFactoryTest.java
index 5e064c9..5211ce6 100644
--- a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueFactoryTest.java
+++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSMailQueueFactoryTest.java
@@ -27,6 +27,7 @@ import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.MailQueueFactoryContract;
import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueueFactoryContract;
import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -34,7 +35,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(BrokerExtension.class)
-public class JMSMailQueueFactoryTest implements MailQueueFactoryContract<ManageableMailQueue> {
+public class JMSMailQueueFactoryTest implements MailQueueFactoryContract<ManageableMailQueue>, ManageableMailQueueFactoryContract {
private JMSMailQueueFactory mailQueueFactory;
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java b/server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
index 500a0cd..b439bad 100644
--- a/server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
+++ b/server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
@@ -105,15 +105,15 @@ public class AbstractMailQueueFactoryTest {
@Test
public void destroyShouldRegisterManageableQueues() throws Exception {
- abstractMailQueueFactory.getQueue(QUEUE_1);
+ abstractMailQueueFactory.createQueue(QUEUE_1);
verify(mBeanServer).registerMBean(any(MailQueue.class), eq(new ObjectName(AbstractMailQueueFactory.MBEAN_NAME_QUEUE_PREFIX + QUEUE_1)));
}
@Test
public void destroyShouldUnregisterAllRegisterQueue() throws Exception {
- abstractMailQueueFactory.getQueue(QUEUE_1);
- abstractMailQueueFactory.getQueue(QUEUE_2);
- abstractMailQueueFactory.getQueue(QUEUE_3);
+ abstractMailQueueFactory.createQueue(QUEUE_1);
+ abstractMailQueueFactory.createQueue(QUEUE_2);
+ abstractMailQueueFactory.createQueue(QUEUE_3);
abstractMailQueueFactory.destroy();
verify(mBeanServer).unregisterMBean(eq(new ObjectName(AbstractMailQueueFactory.MBEAN_NAME_QUEUE_PREFIX + QUEUE_1)));
verify(mBeanServer).unregisterMBean(eq(new ObjectName(AbstractMailQueueFactory.MBEAN_NAME_QUEUE_PREFIX + QUEUE_2)));
@@ -122,16 +122,16 @@ public class AbstractMailQueueFactoryTest {
@Test
public void unregisterMBeanShouldWork() throws Exception {
- abstractMailQueueFactory.getQueue(QUEUE_1);
+ abstractMailQueueFactory.createQueue(QUEUE_1);
abstractMailQueueFactory.unregisterMBean(AbstractMailQueueFactory.MBEAN_NAME_QUEUE_PREFIX + QUEUE_1);
verify(mBeanServer).unregisterMBean(eq(new ObjectName(AbstractMailQueueFactory.MBEAN_NAME_QUEUE_PREFIX + QUEUE_1)));
}
@Test
public void destroyShouldNotBeStoppedByExceptions() throws Exception {
- abstractMailQueueFactory.getQueue(QUEUE_1);
- abstractMailQueueFactory.getQueue(QUEUE_2);
- abstractMailQueueFactory.getQueue(QUEUE_3);
+ abstractMailQueueFactory.createQueue(QUEUE_1);
+ abstractMailQueueFactory.createQueue(QUEUE_2);
+ abstractMailQueueFactory.createQueue(QUEUE_3);
doThrow(InstanceNotFoundException.class)
.doNothing()
.when(mBeanServer)
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
index b4322e4..48bb10d 100644
--- a/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
+++ b/server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
@@ -63,13 +63,13 @@ public class MemoryMailQueueFactory implements MailQueueFactory<ManageableMailQu
}
@Override
- public MailQueue getQueue(String name) {
- return Optional.ofNullable(mailQueues.get(name))
- .orElseGet(() -> tryInsertNewMailQueue(name));
+ public Optional<ManageableMailQueue> getQueue(String name) {
+ return Optional.ofNullable(mailQueues.get(name));
}
- private MailQueue tryInsertNewMailQueue(String name) {
- MailQueue newMailQueue = new MemoryMailQueue(name, mailQueueItemDecoratorFactory);
+ @Override
+ public MemoryMailQueueFactory.MemoryMailQueue createQueue(String name) {
+ MemoryMailQueueFactory.MemoryMailQueue newMailQueue = new MemoryMailQueue(name, mailQueueItemDecoratorFactory);
return Optional.ofNullable(mailQueues.putIfAbsent(name, newMailQueue))
.orElse(newMailQueue);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/7574fdf8/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueFactoryTest.java b/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueFactoryTest.java
index f9a3ca3..28002ca 100644
--- a/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueFactoryTest.java
+++ b/server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryMailQueueFactoryTest.java
@@ -19,43 +19,24 @@
package org.apache.james.queue.memory;
-import static org.assertj.core.api.Assertions.assertThat;
-
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.queue.api.MailQueueFactoryContract;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueueFactoryContract;
import org.apache.james.queue.api.RawMailQueueItemDecoratorFactory;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-public class MemoryMailQueueFactoryTest implements MailQueueFactoryContract {
- private static final String KEY = "key";
- private static final String BIS = "keyBis";
+class MemoryMailQueueFactoryTest implements MailQueueFactoryContract<ManageableMailQueue>, ManageableMailQueueFactoryContract {
- private MemoryMailQueueFactory memoryMailQueueFactory;
+ MemoryMailQueueFactory memoryMailQueueFactory;
@BeforeEach
- public void setUp() {
+ void setup() {
memoryMailQueueFactory = new MemoryMailQueueFactory(new RawMailQueueItemDecoratorFactory());
}
- @Test
- public void getQueueShouldNotReturnNull() {
- assertThat(memoryMailQueueFactory.getQueue(KEY)).isNotNull();
- }
-
- @Test
- public void getQueueShouldReturnTwoTimeTheSameResultWhenUsedWithTheSameKey() {
- assertThat(memoryMailQueueFactory.getQueue(KEY)).isEqualTo(memoryMailQueueFactory.getQueue(KEY));
- }
-
- @Test
- public void getQueueShouldNotReturnTheSameQueueForTwoDifferentNames() {
- assertThat(memoryMailQueueFactory.getQueue(KEY)).isNotEqualTo(memoryMailQueueFactory.getQueue(BIS));
- }
-
@Override
- public MailQueueFactory getMailQueueFactory() {
+ public MailQueueFactory<ManageableMailQueue> getMailQueueFactory() {
return memoryMailQueueFactory;
}
-}
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org