[
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]