You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2021/12/05 21:09:05 UTC

[sling-org-apache-sling-commons-messaging-mail] 01/02: SLING-10966 Use dedicated Properties and Session per SimpleMessageBuilder instance

This is an automated email from the ASF dual-hosted git repository.

olli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-messaging-mail.git

commit 3c83b9a1a11f301c7eb33cb655defbe1789e498b
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Sun Dec 5 22:04:51 2021 +0100

    SLING-10966 Use dedicated Properties and Session per SimpleMessageBuilder instance
---
 .../commons/messaging/mail/internal/SimpleMailService.java   | 12 +++++++-----
 .../messaging/mail/internal/SimpleMailServiceTest.java       |  8 ++++----
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
index c2221f9..6504327 100644
--- a/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
+++ b/src/main/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailService.java
@@ -123,7 +123,7 @@ public final class SimpleMailService implements MailService {
 
     private SimpleMailServiceConfiguration configuration;
 
-    private Session session;
+    private Properties properties;
 
     private final Logger logger = LoggerFactory.getLogger(SimpleMailService.class);
 
@@ -153,7 +153,7 @@ public final class SimpleMailService implements MailService {
         this.configuration = null;
         threadPoolManager.release(threadPool);
         threadPool = null;
-        session = null;
+        properties = null;
     }
 
     private void configure(final SimpleMailServiceConfiguration configuration) {
@@ -166,12 +166,14 @@ public final class SimpleMailService implements MailService {
         if (Objects.nonNull(from) && !from.isBlank()) {
             properties.setProperty(MAIL_SMTPS_FROM, from.trim());
         }
-
-        session = Session.getInstance(properties);
+        this.properties = properties;
     }
 
     @Override
     public @NotNull MessageBuilder getMessageBuilder() {
+        final Properties properties = new Properties();
+        properties.putAll(this.properties);
+        final Session session = Session.getInstance(properties);
         return new SimpleMessageBuilder(session);
     }
 
@@ -191,7 +193,7 @@ public final class SimpleMailService implements MailService {
             final ClassLoader tccl = Thread.currentThread().getContextClassLoader();
             Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
             final String password = cryptoService.decrypt(configuration.password());
-            try (Transport transport = session.getTransport(SMTPS_PROTOCOL)) {
+            try (Transport transport = message.getSession().getTransport(SMTPS_PROTOCOL)) {
                 final List<ConnectionListener> connectionListeners = this.connectionListeners;
                 connectionListeners.forEach(transport::addConnectionListener);
                 final List<TransportListener> transportListeners = this.transportListeners;
diff --git a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceTest.java b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceTest.java
index d11d10e..f4c309e 100644
--- a/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceTest.java
+++ b/src/test/java/org/apache/sling/commons/messaging/mail/internal/SimpleMailServiceTest.java
@@ -46,13 +46,14 @@ public class SimpleMailServiceTest {
 
     @Test
     public void testComponentLifecycle() throws Exception {
+        final Transport transport = mock(Transport.class);
+        final Session session = mock(Session.class);
+        when(session.getTransport("smtps")).thenReturn(transport);
         final MimeMessage message = mock(MimeMessage.class);
+        when(message.getSession()).thenReturn(session);
         final ThreadPoolManager threadPoolManager = mock(ThreadPoolManager.class);
         when(threadPoolManager.get("default")).thenReturn(new DefaultThreadPool());
         final CryptoService cryptoService = mock(CryptoService.class);
-        final Transport transport = mock(Transport.class);
-        final Session session = mock(Session.class);
-        when(session.getTransport("smtps")).thenReturn(transport);
         final SimpleMailService service = new SimpleMailService();
         FieldUtils.writeDeclaredField(service, "threadPoolManager", threadPoolManager, true);
         FieldUtils.writeDeclaredField(service, "cryptoService", cryptoService, true);
@@ -62,7 +63,6 @@ public class SimpleMailServiceTest {
             final SimpleMailServiceConfiguration configuration = mock(SimpleMailServiceConfiguration.class);
             when(configuration.threadpool_name()).thenReturn("default");
             MethodUtils.invokeMethod(service, true, "activate", configuration);
-            FieldUtils.writeDeclaredField(service, "session", session, true);
             service.sendMessage(message);
         }
         { // modified