This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch 3.7.x in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 767ff948b1041590bafa34ca3b18698f4de750d0 Author: Benoit Tellier <[email protected]> AuthorDate: Fri Mar 4 17:22:54 2022 +0700 JAMES-3720 Fix temporary file leak when browsing mailqueue (cherry picked from commit e8ae8f7c9bdc6e5f17ab6a8f1de89b31d272e78f) --- .../java/org/apache/james/webadmin/dto/MailQueueItemDTO.java | 7 ++++++- server/queue/queue-api/pom.xml | 4 ++++ .../java/org/apache/james/queue/api/ManageableMailQueue.java | 9 ++++++++- .../java/org/apache/james/queue/library/MailQueueManagement.java | 2 ++ .../queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java | 9 ++++++++- 5 files changed, 28 insertions(+), 3 deletions(-) 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 4ae1fe5..f0b12ec 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 @@ -25,6 +25,7 @@ import java.util.List; import java.util.Optional; import org.apache.james.core.MailAddress; +import org.apache.james.lifecycle.api.LifecycleUtil; import org.apache.james.queue.api.ManageableMailQueue; import com.google.common.base.Preconditions; @@ -38,12 +39,16 @@ public class MailQueueItemDTO { } public static MailQueueItemDTO from(ManageableMailQueue.MailQueueItemView mailQueueItemView) { - return builder() + try { + return builder() .name(mailQueueItemView.getMail().getName()) .sender(mailQueueItemView.getMail().getMaybeSender().asOptional()) .recipients(mailQueueItemView.getMail().getRecipients()) .nextDelivery(mailQueueItemView.getNextDelivery()) .build(); + } finally { + LifecycleUtil.dispose(mailQueueItemView); + } } public static class Builder { diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml index 33b701a..54354c3 100644 --- a/server/queue/queue-api/pom.xml +++ b/server/queue/queue-api/pom.xml @@ -39,6 +39,10 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>james-server-lifecycle-api</artifactId> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>james-server-testing</artifactId> <scope>test</scope> </dependency> 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 a9307f8..d8f2ec0 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 @@ -22,6 +22,8 @@ import java.time.ZonedDateTime; import java.util.Iterator; import java.util.Optional; +import org.apache.james.lifecycle.api.LifecycleUtil; +import org.apache.james.mime4j.dom.Disposable; import org.apache.mailet.Mail; /** @@ -105,7 +107,7 @@ public interface ManageableMailQueue extends MailQueue { /** * Represent a View over a queue {@link MailQueue.MailQueueItem} */ - class DefaultMailQueueItemView implements MailQueueItemView { + class DefaultMailQueueItemView implements MailQueueItemView, Disposable { private final Mail mail; private final Optional<ZonedDateTime> nextDelivery; @@ -130,6 +132,11 @@ public interface ManageableMailQueue extends MailQueue { public Optional<ZonedDateTime> getNextDelivery() { return nextDelivery; } + + @Override + public void dispose() { + LifecycleUtil.dispose(mail); + } } } 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 2dfde3b..54695ad 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 @@ -34,6 +34,7 @@ import javax.management.openmbean.OpenType; import javax.management.openmbean.SimpleType; import org.apache.james.core.MailAddress; +import org.apache.james.lifecycle.api.LifecycleUtil; import org.apache.james.queue.api.MailQueue.MailQueueException; import org.apache.james.queue.api.MailQueueManagementMBean; import org.apache.james.queue.api.ManageableMailQueue; @@ -158,6 +159,7 @@ public class MailQueueManagement extends StandardMBean implements MailQueueManag map.put(names[10], nextDelivery); CompositeDataSupport c = new CompositeDataSupport(new CompositeType(Mail.class.getName(), "Queue Mail", names, descs, types), map); data.add(c); + LifecycleUtil.dispose(mView); } it.close(); return data; diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java index 2b9b812..94314de 100644 --- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java +++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java @@ -38,6 +38,8 @@ import org.apache.commons.lang3.tuple.Pair; import org.apache.james.blob.api.Store; import org.apache.james.blob.mail.MimeMessagePartsId; import org.apache.james.blob.mail.MimeMessageStore; +import org.apache.james.lifecycle.api.LifecycleUtil; +import org.apache.james.mime4j.dom.Disposable; import org.apache.james.queue.api.ManageableMailQueue; import org.apache.james.queue.rabbitmq.EnqueueId; import org.apache.james.queue.rabbitmq.EnqueuedItem; @@ -175,7 +177,7 @@ public class CassandraMailQueueBrowser { .map(BucketId::of); } - public static class CassandraMailQueueItemView implements ManageableMailQueue.MailQueueItemView { + public static class CassandraMailQueueItemView implements ManageableMailQueue.MailQueueItemView, Disposable { private final EnqueuedItem enqueuedItem; private final Mail mail; @@ -205,5 +207,10 @@ public class CassandraMailQueueBrowser { public Optional<ZonedDateTime> getNextDelivery() { return Optional.empty(); } + + @Override + public void dispose() { + LifecycleUtil.dispose(mail); + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
