Repository: james-project Updated Branches: refs/heads/master 866d09e24 -> cae93f359
JAMES-2922 MailQueueItemView should express next delivery as a ZonedDateTime Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cec918fc Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cec918fc Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cec918fc Branch: refs/heads/master Commit: cec918fcddb6d9428ed423a97d7e064102465711 Parents: 866d09e Author: Matthieu Baechler <[email protected]> Authored: Thu Jan 25 15:30:41 2018 +0100 Committer: benwa <[email protected]> Committed: Fri Jan 26 08:22:04 2018 +0700 ---------------------------------------------------------------------- pom.xml | 5 +++ .../james/webadmin/utils/JsonTransformer.java | 1 + .../james/webadmin/dto/MailQueueItemDTO.java | 24 +++-------- .../james/webadmin/routes/MailQueueRoutes.java | 5 ++- .../webadmin/dto/MailQueueItemDTOTest.java | 7 +-- .../webadmin/routes/MailQueueRoutesTest.java | 2 - .../james/queue/api/ManageableMailQueue.java | 27 ++++++------ .../apache/james/queue/file/FileMailQueue.java | 18 +++++--- server/queue/queue-jms/pom.xml | 4 ++ .../apache/james/queue/jms/JMSMailQueue.java | 45 ++++++++++---------- .../queue/library/MailQueueManagement.java | 4 +- server/queue/queue-memory/pom.xml | 1 - .../queue/memory/MemoryMailQueueFactory.java | 9 ++-- 13 files changed, 81 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 3411bd5..2d414a6 100644 --- a/pom.xml +++ b/pom.xml @@ -2370,6 +2370,11 @@ <version>${testcontainers-version}</version> </dependency> <dependency> + <groupId>org.threeten</groupId> + <artifactId>threeten-extra</artifactId> + <version>1.3.2</version> + </dependency> + <dependency> <groupId>pl.pragmatists</groupId> <artifactId>JUnitParams</artifactId> <version>1.0.4</version> http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java index 6fd8f8c..ad7fe30 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java @@ -34,6 +34,7 @@ public class JsonTransformer implements ResponseTransformer { public JsonTransformer() { objectMapper = new ObjectMapper() .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .registerModule(new Jdk8Module()) .registerModule(new JavaTimeModule()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java index d7ec0b8..fb01f71 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java @@ -19,8 +19,8 @@ package org.apache.james.webadmin.dto; +import java.time.ZonedDateTime; import java.util.Collection; -import java.util.Date; import java.util.List; import java.util.Optional; @@ -34,8 +34,6 @@ import com.google.common.base.Strings; public class MailQueueItemDTO { - private static final long NO_NEXT_DELIVERY = -1; - public static Builder builder() { return new Builder(); } @@ -45,24 +43,16 @@ public class MailQueueItemDTO { .name(mailQueueItemView.getMail().getName()) .sender(mailQueueItemView.getMail().getSender()) .recipients(mailQueueItemView.getMail().getRecipients()) - .nextDelivery(nextDelivery(mailQueueItemView)) + .nextDelivery(mailQueueItemView.getNextDelivery()) .build(); } - private static Optional<Date> nextDelivery(ManageableMailQueue.MailQueueItemView mailQueueItemView) { - long nextDelivery = mailQueueItemView.getNextDelivery(); - if (nextDelivery == NO_NEXT_DELIVERY) { - return Optional.empty(); - } - return Optional.of(new Date(nextDelivery)); - } - public static class Builder { private String name; private String sender; private List<String> recipients; - private Optional<Date> nextDelivery; + private Optional<ZonedDateTime> nextDelivery; private Builder() { } @@ -84,7 +74,7 @@ public class MailQueueItemDTO { return this; } - public Builder nextDelivery(Optional<Date> nextDelivery) { + public Builder nextDelivery(Optional<ZonedDateTime> nextDelivery) { this.nextDelivery = nextDelivery; return this; } @@ -98,9 +88,9 @@ public class MailQueueItemDTO { private final String name; private final String sender; private final List<String> recipients; - private final Optional<Date> nextDelivery; + private final Optional<ZonedDateTime> nextDelivery; - public MailQueueItemDTO(String name, String sender, List<String> recipients, Optional<Date> nextDelivery) { + public MailQueueItemDTO(String name, String sender, List<String> recipients, Optional<ZonedDateTime> nextDelivery) { this.name = name; this.sender = sender; this.recipients = recipients; @@ -119,7 +109,7 @@ public class MailQueueItemDTO { return recipients; } - public Optional<Date> getNextDelivery() { + public Optional<ZonedDateTime> getNextDelivery() { return nextDelivery; } } http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java index 933bc38..a20e4c4 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java @@ -21,6 +21,7 @@ package org.apache.james.webadmin.routes; import static org.apache.james.webadmin.Constants.SEPARATOR; +import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; @@ -248,7 +249,9 @@ public class MailQueueRoutes implements Routes { } private boolean filter(MailQueueItemDTO item, Optional<Boolean> isDelayed) { - return isDelayed.map(delayed -> delayed == item.getNextDelivery().isPresent()) + boolean mailIsDelayed = item.getNextDelivery().map(date -> date.isAfter(ZonedDateTime.now())).orElse(false); + return isDelayed + .map(delayed -> delayed == mailIsDelayed) .orElse(true); } http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java index 72d8ef7..bb3c7bc 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java @@ -20,7 +20,7 @@ package org.apache.james.webadmin.dto; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import java.util.Date; +import java.time.ZonedDateTime; import java.util.List; import org.apache.james.core.MailAddress; @@ -53,7 +53,8 @@ public class MailQueueItemDTOTest { @Test public void fromShouldCreateTheRightObject() throws Exception { FakeMail mail = Mails.defaultMail().build(); - MailQueueItemView mailQueueItemView = new MailQueueItemView(mail, 4); + ZonedDateTime date = ZonedDateTime.parse("2018-01-02T11:22:02Z"); + MailQueueItemView mailQueueItemView = new MailQueueItemView(mail, date); MailQueueItemDTO mailQueueItemDTO = MailQueueItemDTO.from(mailQueueItemView); List<String> expectedRecipients = mail.getRecipients().stream() .map(MailAddress::asString) @@ -62,6 +63,6 @@ public class MailQueueItemDTOTest { softly.assertThat(mailQueueItemDTO.getName()).isEqualTo(mail.getName()); softly.assertThat(mailQueueItemDTO.getSender()).isEqualTo(mail.getSender().asString()); softly.assertThat(mailQueueItemDTO.getRecipients()).isEqualTo(expectedRecipients); - softly.assertThat(mailQueueItemDTO.getNextDelivery()).contains(new Date(4)); + softly.assertThat(mailQueueItemDTO.getNextDelivery()).contains(date); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java index f8e69b7..0279bea 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java @@ -47,7 +47,6 @@ import org.apache.mailet.base.test.FakeMail; import org.eclipse.jetty.http.HttpStatus; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import com.github.steveash.guavate.Guavate; @@ -251,7 +250,6 @@ public class MailQueueRoutesTest { .body(".", hasSize(1)); } - @Ignore("MemoryMailQueueFactory doesn't support delay") @Test public void listMailsShouldReturnDelayedMailsWhenAskFor() throws Exception { MemoryMailQueue queue = mailQueueFactory.createQueue(FIRST_QUEUE); http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java index a89154f..20635a6 100644 --- a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java +++ b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java @@ -18,7 +18,9 @@ ****************************************************************/ package org.apache.james.queue.api; +import java.time.ZonedDateTime; import java.util.Iterator; +import java.util.Optional; import org.apache.mailet.Mail; @@ -92,29 +94,26 @@ public interface ManageableMailQueue extends MailQueue { class MailQueueItemView { private final Mail mail; - private final long nextDelivery; + private final Optional<ZonedDateTime> nextDelivery; - public MailQueueItemView(Mail mail, long nextDelivery) { + public MailQueueItemView(Mail mail) { + this(mail, Optional.empty()); + } + + public MailQueueItemView(Mail mail, ZonedDateTime nextDelivery) { + this(mail, Optional.of(nextDelivery)); + } + + public MailQueueItemView(Mail mail, Optional<ZonedDateTime> nextDelivery) { this.mail = mail; this.nextDelivery = nextDelivery; } - /** - * Return the Mail - * - * @return mail - */ public Mail getMail() { return mail; } - /** - * Return the timestamp when the mail will be ready for dequeuing or -1 - * if there is no restriction set.. - * - * @return nextDelivery - */ - public long getNextDelivery() { + public Optional<ZonedDateTime> getNextDelivery() { return nextDelivery; } } http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/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 5801f75..461d450 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 @@ -26,9 +26,14 @@ import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.SecureRandom; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.Iterator; import java.util.Map.Entry; import java.util.NoSuchElementException; +import java.util.Optional; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -112,11 +117,11 @@ public class FileMailQueue implements ManageableMailQueue { oin = new ObjectInputStream(new FileInputStream(item.getObjectFile())); Mail mail = (Mail) oin.readObject(); - Long next = getNextDelivery(mail); + Optional<ZonedDateTime> next = getNextDelivery(mail); final String key = mail.getName(); keyMappings.put(key, item); - if (next <= System.currentTimeMillis()) { + if (!next.isPresent() || next.get().isBefore(ZonedDateTime.now())) { try { inmemoryQueue.put(key); @@ -128,6 +133,7 @@ public class FileMailQueue implements ManageableMailQueue { // Schedule a task which will put the mail in the queue // for processing after a given delay + long nextDeliveryDelay = ZonedDateTime.now().until(next.get(), ChronoUnit.MILLIS); scheduler.schedule(() -> { try { inmemoryQueue.put(key); @@ -135,7 +141,7 @@ public class FileMailQueue implements ManageableMailQueue { Thread.currentThread().interrupt(); throw new RuntimeException("Unable to init", e); } - }, next - System.currentTimeMillis(), TimeUnit.MILLISECONDS); + }, nextDeliveryDelay, TimeUnit.MILLISECONDS); } } catch (ClassNotFoundException | IOException e) { LOGGER.error("Unable to load Mail", e); @@ -153,12 +159,12 @@ public class FileMailQueue implements ManageableMailQueue { } } - private Long getNextDelivery(Mail mail) { + private Optional<ZonedDateTime> getNextDelivery(Mail mail) { Long next = (Long) mail.getAttribute(NEXT_DELIVERY); if (next == null) { - next = 0L; + return Optional.empty(); } - return next; + return Optional.of(Instant.ofEpochMilli(next).atZone(ZoneId.systemDefault())); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/queue/queue-jms/pom.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/pom.xml b/server/queue/queue-jms/pom.xml index 95a05ce..bcc2368 100644 --- a/server/queue/queue-jms/pom.xml +++ b/server/queue/queue-jms/pom.xml @@ -143,6 +143,10 @@ <artifactId>slf4j-simple</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.threeten</groupId> + <artifactId>threeten-extra</artifactId> + </dependency> </dependencies> <build> http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java index bc12765..a0509f3 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java @@ -21,6 +21,9 @@ package org.apache.james.queue.jms; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.Serializable; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Date; import java.util.Enumeration; @@ -61,6 +64,7 @@ import org.apache.james.server.core.MimeMessageCopyOnWriteProxy; import org.apache.mailet.Mail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.threeten.extra.Temporals; import com.google.common.base.Throwables; @@ -209,11 +213,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori TimeMetric timeMetric = metricFactory.timer("enqueueMailTime:" + queueName); Session session = null; - long mydelay = 0; - - if (delay > 0) { - mydelay = TimeUnit.MILLISECONDS.convert(delay, unit); - } + long nextDeliveryTimestamp = computeNextDeliveryTimestamp(delay, unit); try { @@ -225,7 +225,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori msgPrio = (Integer) prio; } - Map<String, Object> props = getJMSProperties(mail, mydelay); + Map<String, Object> props = getJMSProperties(mail, nextDeliveryTimestamp); produceMail(session, props, msgPrio, mail); @@ -240,6 +240,16 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori } } + public long computeNextDeliveryTimestamp(long delay, TimeUnit unit) { + if (delay > 0) { + return ZonedDateTime.now() + .plus(delay, Temporals.chronoUnit(unit)) + .toInstant() + .toEpochMilli(); + } + return NO_DELAY; + } + @Override public void enQueue(Mail mail) throws MailQueueException { enQueue(mail, NO_DELAY, TimeUnit.MILLISECONDS); @@ -282,21 +292,8 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori } } - /** - * Get JMS Message properties with values - * - * @param mail - * @param delayInMillis - * @throws JMSException - * @throws MessagingException - */ - protected Map<String, Object> getJMSProperties(Mail mail, long delayInMillis) throws MessagingException { + protected Map<String, Object> getJMSProperties(Mail mail, long nextDelivery) throws MessagingException { Map<String, Object> props = new HashMap<>(); - long nextDelivery = -1; - if (delayInMillis > 0) { - nextDelivery = System.currentTimeMillis() + delayInMillis; - - } props.put(JAMES_NEXT_DELIVERY, nextDelivery); props.put(JAMES_MAIL_ERROR_MESSAGE, mail.getErrorMessage()); props.put(JAMES_MAIL_LAST_UPDATED, mail.getLastUpdated().getTime()); @@ -678,8 +675,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori while (hasNext()) { try { Message m = messages.nextElement(); - return new MailQueueItemView(createMail(m), - m.getLongProperty(JAMES_NEXT_DELIVERY)); + return new MailQueueItemView(createMail(m), nextDeliveryDate(m)); } catch (MessagingException | JMSException e) { LOGGER.error("Unable to browse queue", e); } @@ -688,6 +684,11 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori throw new NoSuchElementException(); } + private ZonedDateTime nextDeliveryDate(Message m) throws JMSException { + long nextDeliveryTimestamp = m.getLongProperty(JAMES_NEXT_DELIVERY); + return Instant.ofEpochMilli(nextDeliveryTimestamp).atZone(ZoneId.systemDefault()); + } + @Override public boolean hasNext() { return messages.hasMoreElements(); http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java ---------------------------------------------------------------------- diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java index 0b43edf..b846f33 100644 --- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java +++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java @@ -19,12 +19,14 @@ package org.apache.james.queue.library; import java.io.Serializable; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import javax.management.NotCompliantMBeanException; import javax.management.StandardMBean; @@ -122,7 +124,7 @@ public class MailQueueManagement extends StandardMBean implements MailQueueManag MailQueueItemView mView = it.next(); Mail m = mView.getMail(); - long nextDelivery = mView.getNextDelivery(); + Optional<ZonedDateTime> nextDelivery = mView.getNextDelivery(); Map<String, Object> map = new HashMap<>(); map.put(names[0], m.getName()); String sender = null; http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/server/queue/queue-memory/pom.xml ---------------------------------------------------------------------- diff --git a/server/queue/queue-memory/pom.xml b/server/queue/queue-memory/pom.xml index 3c375a3..d4b7cae 100644 --- a/server/queue/queue-memory/pom.xml +++ b/server/queue/queue-memory/pom.xml @@ -68,7 +68,6 @@ <dependency> <groupId>org.threeten</groupId> <artifactId>threeten-extra</artifactId> - <version>1.3.2</version> </dependency> </dependencies> http://git-wip-us.apache.org/repos/asf/james-project/blob/cec918fc/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 4c5da8b..9049735 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 @@ -20,6 +20,7 @@ package org.apache.james.queue.memory; import java.time.LocalDateTime; +import java.time.ZonedDateTime; import java.util.Iterator; import java.util.Optional; import java.util.Set; @@ -98,7 +99,7 @@ public class MemoryMailQueueFactory implements MailQueueFactory<ManageableMailQu @Override public void enQueue(Mail mail, long delay, TimeUnit unit) throws MailQueueException { - LocalDateTime nextDelivery = LocalDateTime.now().plus(delay, Temporals.chronoUnit(unit)); + ZonedDateTime nextDelivery = ZonedDateTime.now().plus(delay, Temporals.chronoUnit(unit)); try { mailItems.put(new MemoryMailQueueItem(cloneMail(mail), this, nextDelivery)); } catch (MessagingException e) { @@ -194,7 +195,7 @@ public class MemoryMailQueueFactory implements MailQueueFactory<ManageableMailQu public MailQueueIterator browse() throws MailQueueException { Iterator<MailQueueItemView> underlying = ImmutableList.copyOf(mailItems) .stream() - .map(item -> new MailQueueItemView(item.getMail(), -1)) + .map(item -> new MailQueueItemView(item.getMail(), item.delivery)) .iterator(); return new MailQueueIterator() { @@ -233,9 +234,9 @@ public class MemoryMailQueueFactory implements MailQueueFactory<ManageableMailQu public static class MemoryMailQueueItem implements MailQueue.MailQueueItem, Delayed { private final Mail mail; private final MemoryMailQueue queue; - private final LocalDateTime delivery; + private final ZonedDateTime delivery; - public MemoryMailQueueItem(Mail mail, MemoryMailQueue queue, LocalDateTime delivery) { + public MemoryMailQueueItem(Mail mail, MemoryMailQueue queue, ZonedDateTime delivery) { this.mail = mail; this.queue = queue; this.delivery = delivery; --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
