[ 
https://issues.apache.org/jira/browse/JAMES-4160?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18051570#comment-18051570
 ] 

Benoit Tellier commented on JAMES-4160:
---------------------------------------

Hello

This is due to a breaking change to use a single LDAP connection pool between 
ldap mailets and the users repository but it was sadly not adapted for Spring 
users.

If doable I would encourage you to use a guice based version of James

I did put together a fix: https://github.com/apache/james-project/pull/2909

It will be backported in upcoming 3.9.1.

Could you please triage this fix and ensures it fixes your issue?

Thanks by advance,

Cheers,

Benoit

> Unsatisfied dependency
> ----------------------
>
>                 Key: JAMES-4160
>                 URL: https://issues.apache.org/jira/browse/JAMES-4160
>             Project: James Server
>          Issue Type: Bug
>          Components: UsersStore & UsersRepository
>    Affects Versions: 3.9.0
>         Environment: OpenJDK Runtime Environment (build 
> 21.0.7+6-Ubuntu-0ubuntu124.04)
> Linux mail.konturai.ru 6.8.0-55-generic #57-Ubuntu SMP PREEMPT_DYNAMIC Wed 
> Feb 12 23:42:21 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
>            Reporter: Oleg Kurchenko
>            Priority: Blocker
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> after migrate to 3.9.0 from 3.8.0 James can't create usersrepository for LDAP
>  
>  
> {code:java}
> // code placeholder
> ./james console
> Running Apache James :: Server :: Spring :: App...
> wrapper  | --> Wrapper Started as Console
> wrapper  | Launching a JVM...
> jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
> jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
> jvm 1    | 
> jvm 1    | 2026-01-08T10:34:00.919509774Z main INFO Starting configuration 
> XmlConfiguration[location=/opt/james-server-spring-app-3.9.0/conf/log4j2.xml, 
> lastModified=2025-04-14T12:59:44Z]...
> jvm 1    | 2026-01-08T10:34:00.920546353Z main INFO Start watching for 
> changes to /opt/james-server-spring-app-3.9.0/conf/log4j2.xml every 30 seconds
> jvm 1    | 2026-01-08T10:34:00.922089006Z main INFO Configuration 
> XmlConfiguration[location=/opt/james-server-spring-app-3.9.0/conf/log4j2.xml, 
> lastModified=2025-04-14T12:59:44Z] started.
> jvm 1    | 2026-01-08T10:34:00.923683227Z main INFO Stopping configuration 
> org.apache.logging.log4j.core.config.DefaultConfiguration@2eae8e6e...
> jvm 1    | 2026-01-08T10:34:00.923965801Z main INFO Configuration 
> org.apache.logging.log4j.core.config.DefaultConfiguration@2eae8e6e stopped.
> jvm 1    | 08-янв.-2026 13:34:01.081 WARN [WrapperSimpleAppMain] 
> org.apache.james.app.spring.JamesAppSpringMain.main:50 - No authentication 
> setted up for the JMX component. This expose you to local privilege 
> escalation attacks risk. This can be done via the 
> 'com.sun.management.jmxremote.password.file' system property.
> jvm 1    | 08-янв.-2026 13:34:02.447 INFO [WrapperSimpleAppMain] 
> org.apache.commons.beanutils.FluentPropertyBeanIntrospector.introspect:167 - 
> Error when creating PropertyDescriptor for public final void 
> org.apache.commons.configuration2.AbstractConfiguration.setProperty(java.lang.String,java.lang.Object)!
>  Ignoring this property.
> jvm 1    | 08-янв.-2026 13:34:02.711 INFO [WrapperSimpleAppMain] 
> org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer:87
>  - No LoadTimeWeaver setup: ignoring JPA class transformer
> jvm 1    | 08-янв.-2026 13:34:02.762 INFO [WrapperSimpleAppMain] 
> org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory:447
>  - Initialized JPA EntityManagerFactory for persistence unit 'James'
> jvm 1    | 08-янв.-2026 13:34:02.775 INFO [WrapperSimpleAppMain] 
> org.apache.james.container.spring.bean.factory.mailrepositorystore.MailRepositoryStoreBeanFactory.init:87
>  - JamesMailStore init...
> jvm 1    | 08-янв.-2026 13:34:02.785 INFO [WrapperSimpleAppMain] 
> org.apache.james.container.spring.bean.factory.mailrepositorystore.MailRepositoryStoreBeanFactory.registerRepository:141
>  - Registering Repository instance of class 
> org.apache.james.mailrepository.file.FileMailRepository to handle file 
> protocol requests
> jvm 1    | 08-янв.-2026 13:34:02.786 INFO [WrapperSimpleAppMain] 
> org.apache.james.container.spring.bean.factory.mailrepositorystore.MailRepositoryStoreBeanFactory.registerRepository:141
>  - Registering Repository instance of class 
> org.apache.james.mailrepository.jdbc.JDBCMailRepository to handle db protocol 
> requests
> jvm 1    | 08-янв.-2026 13:34:02.787 INFO [WrapperSimpleAppMain] 
> org.apache.james.container.spring.bean.factory.mailrepositorystore.MailRepositoryStoreBeanFactory.registerRepository:141
>  - Registering Repository instance of class 
> org.apache.james.mailrepository.jdbc.JDBCMailRepository to handle dbfile 
> protocol requests
> jvm 1    | 08-янв.-2026 13:34:02.849 INFO [WrapperSimpleAppMain] 
> org.apache.james.dnsservice.dnsjava.DNSJavaService.init:213 - DNS Server is: 
> 8.8.8.8
> jvm 1    | 08-янв.-2026 13:34:02.850 INFO [WrapperSimpleAppMain] 
> org.apache.james.dnsservice.dnsjava.DNSJavaService.init:213 - DNS Server is: 
> 8.8.4.4
> jvm 1    | 08-янв.-2026 13:34:02.896 INFO [WrapperSimpleAppMain] 
> org.apache.james.dnsservice.dnsjava.DNSJavaService.init:227 - Registered 
> cache, resolver and search paths as DNSJava defaults
> jvm 1    | 311  James  INFO   [blocking-call-wrapper-1] openjpa.Runtime - 
> Starting OpenJPA 4.1.1
> jvm 1    | 836  James  INFO   [blocking-call-wrapper-1] openjpa.jdbc.JDBC - 
> Using dictionary class "org.apache.openjpa.jdbc.sql.PostgresDictionary" 
> (PostgreSQL 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1) ,PostgreSQL JDBC Driver 
> 42.7.7).
> jvm 1    | 844  James  INFO   [blocking-call-wrapper-1] openjpa.jdbc.JDBC - 
> Connected to PostgreSQL version 16.9 using JDBC driver PostgreSQL JDBC Driver 
> version 42.7.7.
> jvm 1    | 08-янв.-2026 13:34:05.847 WARN [WrapperSimpleAppMain] 
> org.springframework.context.support.AbstractApplicationContext.refresh:635 - 
> Exception encountered during context initialization - cancelling refresh 
> attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: 
> Error creating bean with name 'authenticator' defined in class path resource 
> [META-INF/org/apache/james/spring-mailbox-authenticator.xml]: Unsatisfied 
> dependency expressed through constructor parameter 0: Error creating bean 
> with name 'usersrepository': Unsatisfied dependency expressed through 
> constructor parameter 2: No qualifying bean of type 
> 'com.unboundid.ldap.sdk.LDAPConnectionPool' available: expected at least 1 
> bean which qualifies as autowire candidate. Dependency annotations: {}
> jvm 1    | 08-янв.-2026 13:34:05.849 INFO [WrapperSimpleAppMain] 
> org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.destroy:660 - 
> Closing JPA EntityManagerFactory for persistence unit 'James'
> jvm 1    | 
> jvm 1    | WrapperSimpleApp: Encountered an error running main: 
> org.springframework.beans.factory.UnsatisfiedDependencyException: Error 
> creating bean with name 'authenticator' defined in class path resource 
> [META-INF/org/apache/james/spring-mailbox-authenticator.xml]: Unsatisfied 
> dependency expressed through constructor parameter 0: Error creating bean 
> with name 'usersrepository': Unsatisfied dependency expressed through 
> constructor parameter 2: No qualifying bean of type 
> 'com.unboundid.ldap.sdk.LDAPConnectionPool' available: expected at least 1 
> bean which qualifies as autowire candidate. Dependency annotations: {}
> jvm 1    | org.springframework.beans.factory.UnsatisfiedDependencyException: 
> Error creating bean with name 'authenticator' defined in class path resource 
> [META-INF/org/apache/james/spring-mailbox-authenticator.xml]: Unsatisfied 
> dependency expressed through constructor parameter 0: Error creating bean 
> with name 'usersrepository': Unsatisfied dependency expressed through 
> constructor parameter 2: No qualifying bean of type 
> 'com.unboundid.ldap.sdk.LDAPConnectionPool' available: expected at least 1 
> bean which qualifies as autowire candidate. Dependency annotations: {}
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1222)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1188)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1123)
> jvm 1    |     at 
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:987)
> jvm 1    |     at 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:627)
> jvm 1    |     at 
> org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
> jvm 1    |     at 
> org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:95)
> jvm 1    |     at 
> org.apache.james.container.spring.context.JamesServerApplicationContext.<init>(JamesServerApplicationContext.java:43)
> jvm 1    |     at 
> org.apache.james.app.spring.JamesAppSpringMain.init(JamesAppSpringMain.java:81)
> jvm 1    |     at 
> org.apache.james.app.spring.JamesAppSpringMain.main(JamesAppSpringMain.java:57)
> jvm 1    |     at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> jvm 1    |     at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> jvm 1    |     at 
> org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
> jvm 1    |     at java.base/java.lang.Thread.run(Thread.java:1583)
> jvm 1    | Caused by: 
> org.springframework.beans.factory.UnsatisfiedDependencyException: Error 
> creating bean with name 'usersrepository': Unsatisfied dependency expressed 
> through constructor parameter 2: No qualifying bean of type 
> 'com.unboundid.ldap.sdk.LDAPConnectionPool' available: expected at least 1 
> bean which qualifies as autowire candidate. Dependency annotations: {}
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:240)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1395)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:569)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:529)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:339)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:373)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:337)
> jvm 1    |     at 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
> jvm 1    |     at 
> org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1745)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1628)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
> jvm 1    |     ... 23 more
> jvm 1    | Caused by: 
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No 
> qualifying bean of type 'com.unboundid.ldap.sdk.LDAPConnectionPool' 
> available: expected at least 1 bean which qualifies as autowire candidate. 
> Dependency annotations: {}
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:2284)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1708)
> jvm 1    |     at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1628)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:913)
> jvm 1    |     at 
> org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
> jvm 1    |     ... 37 more
> jvm 1    | 2026-01-08T10:34:07.617624857Z pool-1-thread-1 INFO Stopping 
> configuration 
> XmlConfiguration[location=/opt/james-server-spring-app-3.9.0/conf/log4j2.xml, 
> lastModified=2025-04-14T12:59:44Z]...
> jvm 1    | 2026-01-08T10:34:07.619955371Z pool-1-thread-1 INFO Configuration 
> XmlConfiguration[location=/opt/james-server-spring-app-3.9.0/conf/log4j2.xml, 
> lastModified=2025-04-14T12:59:44Z] stopped.
> wrapper  | <-- Wrapper Stopped
>  {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to