[jira] [Commented] (JAMES-4160) Unsatisfied dependency

"Benoit Tellier (Jira)" <[email protected]>
Newsgroups gmane.comp.jakarta.james.devel
Message-ID <[email protected]>
    [ 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 &amp; 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)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.