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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new ed16de1e87 [IMPROVEMENT] Use a single LDAP pool accross James
ed16de1e87 is described below

commit ed16de1e87a0e0fd13d05592bea53ceeb39df0c5
Author: Benoit TELLIER <[email protected]>
AuthorDate: Mon Jul 22 22:34:10 2024 +0200

    [IMPROVEMENT] Use a single LDAP pool accross James
---
 .../james/data/LdapUsersRepositoryModule.java      | 13 ++++-
 .../james/user/ldap/ReadOnlyLDAPUsersDAO.java      | 23 +++-----
 .../user/ldap/ReadOnlyUsersLDAPRepository.java     | 26 ++++++---
 .../james/user/ldap/LdapHealthCheckTest.java       |  4 +-
 .../ReadOnlyUsersLDAPRepositoryEmptyListTest.java  |  7 ++-
 .../ReadOnlyUsersLDAPRepositoryInvalidDnTest.java  |  7 ++-
 .../user/ldap/ReadOnlyUsersLDAPRepositoryTest.java | 67 ++++++++++++----------
 ...nlyUsersLDAPRepositoryWithLDAPFailoverTest.java | 21 ++++---
 ...LDAPRepositoryWithLocalPartAsLoginNameTest.java |  7 ++-
 .../transport/matchers/SenderHasLDAPAttribute.java | 13 +++--
 .../transport/matchers/SenderIsInLDAPGroup.java    |  8 ++-
 11 files changed, 113 insertions(+), 83 deletions(-)

diff --git 
a/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
 
b/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
index 815a525f2e..a00114a336 100644
--- 
a/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
+++ 
b/server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
@@ -22,6 +22,7 @@ import 
org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.core.healthcheck.HealthCheck;
 import org.apache.james.server.core.configuration.ConfigurationProvider;
 import org.apache.james.user.api.UsersRepository;
+import org.apache.james.user.ldap.LDAPConnectionFactory;
 import org.apache.james.user.ldap.LdapHealthCheck;
 import org.apache.james.user.ldap.LdapRepositoryConfiguration;
 import org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository;
@@ -34,6 +35,8 @@ import com.google.inject.Scopes;
 import com.google.inject.Singleton;
 import com.google.inject.multibindings.Multibinder;
 import com.google.inject.multibindings.ProvidesIntoSet;
+import com.unboundid.ldap.sdk.LDAPConnectionPool;
+import com.unboundid.ldap.sdk.LDAPException;
 
 public class LdapUsersRepositoryModule extends AbstractModule {
     @Override
@@ -50,12 +53,18 @@ public class LdapUsersRepositoryModule extends 
AbstractModule {
             configurationProvider.getConfiguration("usersrepository"));
     }
 
+    @Provides
+    @Singleton
+    public LDAPConnectionPool provideConfiguration(LdapRepositoryConfiguration 
configuration) throws LDAPException {
+        return new 
LDAPConnectionFactory(configuration).getLdapConnectionPool();
+    }
+
     @ProvidesIntoSet
-    InitializationOperation configureLdap(LdapRepositoryConfiguration 
configuration, ReadOnlyUsersLDAPRepository usersRepository) {
+    InitializationOperation configureLdap(ConfigurationProvider 
configurationProvider, ReadOnlyUsersLDAPRepository usersRepository) {
         return InitilizationOperationBuilder
             .forClass(ReadOnlyUsersLDAPRepository.class)
             .init(() -> {
-                usersRepository.configure(configuration);
+                
usersRepository.configure(configurationProvider.getConfiguration("usersrepository"));
                 usersRepository.init();
             });
     }
diff --git 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
index 263fdef354..39b1409ec6 100644
--- 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
+++ 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
@@ -64,31 +64,24 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, 
Configurable {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ReadOnlyLDAPUsersDAO.class);
 
     private final GaugeRegistry gaugeRegistry;
-    private LdapRepositoryConfiguration ldapConfiguration;
+    private final LdapRepositoryConfiguration ldapConfiguration;
     private LDAPConnectionPool ldapConnectionPool;
     private Optional<Filter> userExtraFilter;
     private Filter objectClassFilter;
     private Filter listingFilter;
 
     @Inject
-    public ReadOnlyLDAPUsersDAO(GaugeRegistry gaugeRegistry) {
+    public ReadOnlyLDAPUsersDAO(GaugeRegistry gaugeRegistry,
+                                LDAPConnectionPool ldapConnectionPool,
+                                LdapRepositoryConfiguration configuration) {
         this.gaugeRegistry = gaugeRegistry;
+        this.ldapConnectionPool = ldapConnectionPool;
+        this.ldapConfiguration = configuration;
     }
 
-    /**
-     * Extracts the parameters required by the repository instance from the
-     * James server configuration data. The fields extracted include
-     *
-     * @param configuration
-     *            An encapsulation of the James server configuration data.
-     */
     @Override
-    public void configure(HierarchicalConfiguration<ImmutableNode> 
configuration) throws ConfigurationException {
-        configure(LdapRepositoryConfiguration.from(configuration));
-    }
+    public void configure(HierarchicalConfiguration<ImmutableNode> config) 
throws ConfigurationException {
 
-    public void configure(LdapRepositoryConfiguration configuration) {
-        ldapConfiguration = configuration;
     }
 
     /**
@@ -108,8 +101,6 @@ public class ReadOnlyLDAPUsersDAO implements UsersDAO, 
Configurable {
                 + ldapConfiguration.getConnectionTimeout() + '\n' + 
"readTimeout: " + ldapConfiguration.getReadTimeout());
         }
 
-        ldapConnectionPool = new 
LDAPConnectionFactory(ldapConfiguration).getLdapConnectionPool();
-
         userExtraFilter = Optional.ofNullable(ldapConfiguration.getFilter())
             .map(Throwing.function(Filter::create).sneakyThrow());
         objectClassFilter = Filter.createEqualityFilter("objectClass", 
ldapConfiguration.getUserObjectClass());
diff --git 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index 2d0d6121fd..bffa18e32a 100644
--- 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -33,6 +33,9 @@ import org.apache.james.user.api.InvalidUsernameException;
 import org.apache.james.user.api.UsersRepositoryException;
 import org.apache.james.user.lib.UsersRepositoryImpl;
 
+import com.unboundid.ldap.sdk.LDAPConnectionPool;
+import com.unboundid.ldap.sdk.LDAPException;
+
 import reactor.core.publisher.Mono;
 
 /**
@@ -158,11 +161,22 @@ import reactor.core.publisher.Mono;
  *
  */
 public class ReadOnlyUsersLDAPRepository extends 
UsersRepositoryImpl<ReadOnlyLDAPUsersDAO> implements Configurable {
-    private LdapRepositoryConfiguration ldapConfiguration;
+    private final LdapRepositoryConfiguration ldapConfiguration;
 
     @Inject
-    public ReadOnlyUsersLDAPRepository(DomainList domainList, GaugeRegistry 
gaugeRegistry) {
-        super(domainList, new ReadOnlyLDAPUsersDAO(gaugeRegistry));
+    public ReadOnlyUsersLDAPRepository(DomainList domainList,
+                                       GaugeRegistry gaugeRegistry,
+                                       LDAPConnectionPool ldapConnectionPool,
+                                       LdapRepositoryConfiguration 
configuration) {
+        super(domainList, new ReadOnlyLDAPUsersDAO(gaugeRegistry, 
ldapConnectionPool, configuration));
+        this.ldapConfiguration = configuration;
+    }
+
+    public ReadOnlyUsersLDAPRepository(DomainList domainList,
+                                       GaugeRegistry gaugeRegistry,
+                                       LdapRepositoryConfiguration 
configuration) throws LDAPException {
+        super(domainList, new ReadOnlyLDAPUsersDAO(gaugeRegistry, new 
LDAPConnectionFactory(configuration).getLdapConnectionPool(), configuration));
+        this.ldapConfiguration = configuration;
     }
 
     /**
@@ -176,15 +190,9 @@ public class ReadOnlyUsersLDAPRepository extends 
UsersRepositoryImpl<ReadOnlyLDA
      */
     @Override
     public void configure(HierarchicalConfiguration<ImmutableNode> 
configuration) throws ConfigurationException {
-        configure(LdapRepositoryConfiguration.from(configuration));
         super.configure(configuration);
     }
 
-    public void configure(LdapRepositoryConfiguration configuration) {
-        usersDAO.configure(configuration);
-        this.ldapConfiguration = configuration;
-    }
-
     /**
      * Initialises the user-repository instance. It will create a connection to
      * the LDAP host using the supplied configuration.
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
index 535a144516..107dc6c4ee 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
@@ -45,8 +45,8 @@ class LdapHealthCheckTest {
 
     @BeforeEach
     public void setUp() throws Exception {
-        ReadOnlyUsersLDAPRepository ldapUserRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
-        
ldapUserRepository.configure(ReadOnlyUsersLDAPRepositoryTest.ldapRepositoryConfigurationWithVirtualHosting(ldapContainer));
+        ReadOnlyUsersLDAPRepository ldapUserRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+            
LdapRepositoryConfiguration.from(ReadOnlyUsersLDAPRepositoryTest.ldapRepositoryConfigurationWithVirtualHosting(ldapContainer)));
         ldapUserRepository.init();
         ldapHealthCheck = new LdapHealthCheck(ldapUserRepository);
     }
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
index cac4c6d7a8..8a02234178 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
@@ -108,9 +108,10 @@ class ReadOnlyUsersLDAPRepositoryEmptyListTest {
         }
     }
 
-    private ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> 
ldapRepositoryConfiguration) throws Exception {
-        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry());
-        ldapRepository.configure(ldapRepositoryConfiguration);
+    private ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> configuration) 
throws Exception {
+        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
+        ldapRepository.configure(configuration);
         ldapRepository.init();
         return ldapRepository;
     }
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
index 0f53e94c66..7358389097 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
@@ -84,9 +84,10 @@ class ReadOnlyUsersLDAPRepositoryInvalidDnTest {
         assertThat(ldapRepository.countUsers()).isEqualTo(0);
     }
 
-    private ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> 
ldapRepositoryConfiguration) throws Exception {
-        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry());
-        ldapRepository.configure(ldapRepositoryConfiguration);
+    private ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> configuration) 
throws Exception {
+        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
+        ldapRepository.configure(configuration);
         ldapRepository.init();
         return ldapRepository;
     }
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
index 23059246eb..bbad94794f 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
@@ -80,7 +80,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
         configuration.addProperty("[@filter]", "INVALID!!!");
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(),  new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
 
         assertThatThrownBy(usersLDAPRepository::init)
@@ -96,7 +97,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(ldapContainer);
             configuration.addProperty("domains.extra.org", 
"ou=whatever,dc=james,dc=org");
 
-            usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+            usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
         }
@@ -139,8 +141,10 @@ class ReadOnlyUsersLDAPRepositoryTest {
 
         @BeforeEach
         void setUp() throws Exception {
-            usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
-            usersLDAPRepository.configure(configuration(ldapContainer));
+            PropertyListConfiguration configuration = 
configuration(ldapContainer);
+            usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
+            usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
         }
 
@@ -183,7 +187,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty("[@filter]", "(sn=james-user)");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
 
@@ -195,7 +200,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty("[@filter]", "(sn=nomatch)");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
 
@@ -207,7 +213,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty("[@filter]", "(sn=nomatch)");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
 
@@ -219,7 +226,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty("[@filter]", "(sn=nomatch)");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
             usersLDAPRepository.init();
 
@@ -427,8 +435,10 @@ class ReadOnlyUsersLDAPRepositoryTest {
 
         @Test
         void supportVirtualHostingShouldReturnFalseByDefault() throws 
Exception {
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
-            
usersLDAPRepository.configure(ldapRepositoryConfiguration(ldapContainer));
+            HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
+            usersLDAPRepository.configure(configuration);
 
             assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
         }
@@ -438,7 +448,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty(SUPPORTS_VIRTUAL_HOSTING, "true");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
 
             assertThat(usersLDAPRepository.supportVirtualHosting()).isTrue();
@@ -449,21 +460,23 @@ class ReadOnlyUsersLDAPRepositoryTest {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty(SUPPORTS_VIRTUAL_HOSTING, "false");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
+            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration));
             usersLDAPRepository.configure(configuration);
 
             assertThat(usersLDAPRepository.supportVirtualHosting()).isFalse();
         }
 
         @Test
-        void configureShouldThrowOnNonBooleanValueForSupportsVirtualHosting() {
+        void configureShouldThrowOnNonBooleanValueForSupportsVirtualHosting() 
throws Exception {
             HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
             configuration.addProperty(SUPPORTS_VIRTUAL_HOSTING, "bad");
 
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
-
-            assertThatThrownBy(() -> 
usersLDAPRepository.configure(configuration))
-                .isInstanceOf(ConversionException.class);
+            assertThatThrownBy(() -> {
+                ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+                    LdapRepositoryConfiguration.from(configuration));
+                usersLDAPRepository.configure(configuration);
+            }).isInstanceOf(ConversionException.class);
         }
     }
 
@@ -472,10 +485,8 @@ class ReadOnlyUsersLDAPRepositoryTest {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfiguration(ldapContainer);
         configuration.addProperty("[@ldapHost]", 
ldapContainer.getLdapsBadHost());
 
-        ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
-        usersLDAPRepository.configure(configuration);
-
-        assertThatThrownBy(usersLDAPRepository::init)
+        assertThatThrownBy(() -> new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration)))
             .isInstanceOf(LDAPException.class)
             .hasMessageContaining("SSLHandshakeException");
     }
@@ -487,19 +498,17 @@ class ReadOnlyUsersLDAPRepositoryTest {
         configuration.addProperty("[@trustAllCerts]", "true");
 
         Awaitility.await().untilAsserted(() -> {
-            ReadOnlyUsersLDAPRepository usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry());
-            usersLDAPRepository.configure(configuration);
-
-            assertThatThrownBy(usersLDAPRepository::init)
+            assertThatThrownBy(() -> new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+                LdapRepositoryConfiguration.from(configuration)))
                 .isInstanceOf(LDAPException.class)
                 .hasMessageContaining("SSLHandshakeException");
         });
     }
 
-    private static ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> 
ldapRepositoryConfiguration,
-                                                             DomainList 
domainList) throws Exception {
-        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry());
-        ldapRepository.configure(ldapRepositoryConfiguration);
+    private static ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> configuration, 
DomainList domainList) throws Exception {
+        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
+        ldapRepository.configure(configuration);
         ldapRepository.init();
         return ldapRepository;
     }
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
index f1718a2b29..92f0a6b319 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
@@ -67,7 +67,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
 
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap));
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
         usersLDAPRepository.init();
     }
@@ -139,10 +140,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
         masterLdap.pause();
         slaveLdap.pause();
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
-        usersLDAPRepository.configure(configuration);
-
-        assertThatThrownBy(() -> usersLDAPRepository.init())
+        assertThatThrownBy(() -> usersLDAPRepository = new 
ReadOnlyUsersLDAPRepository(new SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration)))
             .isInstanceOf(LDAPException.class)
             .hasMessageContaining("A client-side timeout was encountered");
     }
@@ -152,7 +151,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap));
         masterLdap.pause();
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
 
         assertThatCode(() -> usersLDAPRepository.init())
@@ -165,7 +165,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap));
         slaveLdap.pause();
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
 
         assertThatCode(() -> usersLDAPRepository.init())
@@ -177,7 +178,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
     void shouldSupportBackwardCompatibilityForTheLegacyLdapHostProperty() 
throws Exception {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(List.of(masterLdap, slaveLdap), 
"ldapHost");
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
 
         assertThatCode(() -> usersLDAPRepository.init())
@@ -190,7 +192,8 @@ class ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest {
         HierarchicalConfiguration<ImmutableNode> configuration = 
ldapRepositoryConfigurationWithVirtualHosting(
             Set.of(masterLdap.getLdapHost(), slaveLdap.getLdapsHost()));
 
-        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry());
+        usersLDAPRepository = new ReadOnlyUsersLDAPRepository(new 
SimpleDomainList(), new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
         usersLDAPRepository.configure(configuration);
         usersLDAPRepository.init();
 
diff --git 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
index 42975d7d7a..a41a9a009e 100644
--- 
a/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
+++ 
b/server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
@@ -290,10 +290,11 @@ public class 
ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest {
 
     }
 
-    private static ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> 
ldapRepositoryConfiguration,
+    private static ReadOnlyUsersLDAPRepository 
startUsersRepository(HierarchicalConfiguration<ImmutableNode> configuration,
                                                                     DomainList 
domainList) throws Exception {
-        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry());
-        ldapRepository.configure(ldapRepositoryConfiguration);
+        ReadOnlyUsersLDAPRepository ldapRepository = new 
ReadOnlyUsersLDAPRepository(domainList, new NoopGaugeRegistry(),
+            LdapRepositoryConfiguration.from(configuration));
+        ldapRepository.configure(configuration);
         ldapRepository.init();
         return ldapRepository;
     }
diff --git 
a/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderHasLDAPAttribute.java
 
b/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderHasLDAPAttribute.java
index fb1acfd76f..943dc65d0b 100644
--- 
a/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderHasLDAPAttribute.java
+++ 
b/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderHasLDAPAttribute.java
@@ -78,13 +78,16 @@ public class SenderHasLDAPAttribute extends GenericMatcher {
     private String[] attributes;
 
     @Inject
-    public SenderHasLDAPAttribute(LdapRepositoryConfiguration configuration) 
throws LDAPException {
+    public SenderHasLDAPAttribute(LDAPConnectionPool ldapConnectionPool, 
LdapRepositoryConfiguration configuration) {
         this.configuration = configuration;
-        ldapConnectionPool = new 
LDAPConnectionFactory(this.configuration).getLdapConnectionPool();
-
-        userExtraFilter = Optional.ofNullable(configuration.getFilter())
+        this.ldapConnectionPool = ldapConnectionPool;
+        this.userExtraFilter = Optional.ofNullable(configuration.getFilter())
             .map(Throwing.function(Filter::create).sneakyThrow());
-        objectClassFilter = Filter.createEqualityFilter("objectClass", 
configuration.getUserObjectClass());
+        this.objectClassFilter = Filter.createEqualityFilter("objectClass", 
configuration.getUserObjectClass());
+    }
+
+    public SenderHasLDAPAttribute(LdapRepositoryConfiguration configuration) 
throws LDAPException {
+        this(new LDAPConnectionFactory(configuration).getLdapConnectionPool(), 
configuration);
     }
 
     @Override
diff --git 
a/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderIsInLDAPGroup.java
 
b/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderIsInLDAPGroup.java
index 8ca5cc4cf8..5a8928fbb9 100644
--- 
a/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderIsInLDAPGroup.java
+++ 
b/server/mailet/ldap/src/main/java/org/apache/james/transport/matchers/SenderIsInLDAPGroup.java
@@ -59,9 +59,13 @@ public class SenderIsInLDAPGroup extends GenericMatcher {
     private String groupDN;
 
     @Inject
-    public SenderIsInLDAPGroup(LdapRepositoryConfiguration configuration) 
throws LDAPException {
+    public SenderIsInLDAPGroup(LDAPConnectionPool ldapConnectionPool, 
LdapRepositoryConfiguration configuration) {
         this.configuration = configuration;
-        ldapConnectionPool = new 
LDAPConnectionFactory(this.configuration).getLdapConnectionPool();
+        this.ldapConnectionPool = ldapConnectionPool;
+    }
+
+    public SenderIsInLDAPGroup(LdapRepositoryConfiguration configuration) 
throws LDAPException {
+        this(new LDAPConnectionFactory(configuration).getLdapConnectionPool(), 
configuration);
     }
 
     @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to