[ 
https://issues.apache.org/jira/browse/AMQ-9627?focusedWorklogId=948344&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-948344
 ]

ASF GitHub Bot logged work on AMQ-9627:
---------------------------------------

                Author: ASF GitHub Bot
            Created on: 13/Dec/24 19:27
            Start Date: 13/Dec/24 19:27
    Worklog Time Spent: 10m 
      Work Description: Nikita-Shupletsov commented on code in PR #1358:
URL: https://github.com/apache/activemq/pull/1358#discussion_r1884389604


##########
activemq-broker/src/main/java/org/apache/activemq/security/SimpleCachedLDAPAuthorizationMap.java:
##########
@@ -936,7 +936,11 @@ public void namingExceptionThrown(NamingExceptionEvent 
namingExceptionEvent) {
 
     // Init / Destroy
     public void afterPropertiesSet() throws Exception {
-        query();
+        try {
+            query();
+        } catch (Exception e) {
+            LOG.error("Error updating authorization map.  Partial policy may 
be applied until the next successful update.", e);

Review Comment:
   the error message will look something like:
   ```
   ERROR | Error updating authorization map.  Partial policy may be applied 
until the next successful update.
   javax.naming.CommunicationException: localhost:1024
   ```
   
   which is exactly the same as the error users will see when the map is trying 
to update the cached values, but the ldap server is unreachable. in my opinion 
it has enough details about what went wrong(the communication exception).
   my concern is more about `Partial policy may be applied until the next 
successful update`, because technically, there is no data, so nothing will be 
applied until the next successful update





Issue Time Tracking
-------------------

    Worklog Id:     (was: 948344)
    Time Spent: 1h  (was: 50m)

> Broker will not start if cachedLDAPAuthorizationMap is used and LDAP server 
> is unavailable 
> -------------------------------------------------------------------------------------------
>
>                 Key: AMQ-9627
>                 URL: https://issues.apache.org/jira/browse/AMQ-9627
>             Project: ActiveMQ Classic
>          Issue Type: Bug
>            Reporter: Nikita Shupletsov
>            Assignee: Jean-Baptiste Onofré
>            Priority: Minor
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> When cachedLDAPAuthorizationMap is used and LDAP is down, the broker will not 
> start and fail with the following exception:
>  
> {{org.springframework.beans.factory.BeanCreationException: Error creating 
> bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in 
> class path resource 
> [org/apache/activemq/security/activemq-ldap-cached-map.xml]: Cannot create 
> inner bean 'authorizationPlugin#674658f7' of type 
> [org.apache.activemq.security.AuthorizationPlugin] while setting bean 
> property 'plugins' with key [1]}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:421)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveValueIfNecessary$0(BeanDefinitionValueResolver.java:149)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:262)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:148)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:460)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:191)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1705)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1454)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)}}
> {{    at 
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)}}
> {{    at 
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)}}
> {{    at 
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971)}}
> {{    at 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625)}}
> {{    at 
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)}}
> {{    at 
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)}}
> {{    at 
> org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:104)}}
> {{    at 
> org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:104)}}
> {{    at 
> org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:67)}}
> {{    at 
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)}}
> {{    at 
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)}}
> {{    at 
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:85)}}
> {{    at 
> org.apache.activemq.security.LdapCachedLDAPAuthorizationMapTest.testStartBrokerWhenLdapServerIsUnreachable(LdapCachedLDAPAuthorizationMapTest.java:21)}}
> {{    at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)}}
> {{    at java.base/java.lang.reflect.Method.invoke(Method.java:580)}}
> {{    at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)}}
> {{    at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)}}
> {{    at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)}}
> {{    at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)}}
> {{    at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)}}
> {{    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)}}
> {{    at 
> org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)}}
> {{    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)}}
> {{    at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)}}
> {{    at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)}}
> {{    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)}}
> {{    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)}}
> {{    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)}}
> {{    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)}}
> {{    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)}}
> {{    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)}}
> {{    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)}}
> {{    at 
> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)}}
> {{    at 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)}}
> {{    at 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)}}
> {{    at 
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)}}
> {{    at 
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)}}
> {{    at 
> org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)}}
> {{    at 
> org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)}}
> {{    at 
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)}}
> {{Caused by: org.springframework.beans.factory.BeanCreationException: Error 
> creating bean with name 'authorizationPlugin#674658f7' defined in class path 
> resource [org/apache/activemq/security/activemq-ldap-cached-map.xml]: Cannot 
> create inner bean '(inner bean)#68ace111' of type 
> [org.apache.activemq.security.CachedLDAPAuthorizationMap] while setting 
> constructor argument}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:421)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.lambda$resolveValueIfNecessary$1(BeanDefinitionValueResolver.java:153)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:262)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:152)}}
> {{    at 
> org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:682)}}
> {{    at 
> org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:203)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:407)}}
> {{    ... 52 more}}
> {{Caused by: org.springframework.beans.factory.BeanCreationException: Error 
> creating bean with name '(inner bean)#68ace111' defined in class path 
> resource [org/apache/activemq/security/activemq-ldap-cached-map.xml]: 
> localhost:1024}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1806)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)}}
> {{    at 
> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBeanValue(BeanDefinitionValueResolver.java:407)}}
> {{    ... 62 more}}
> {{Caused by: javax.naming.CommunicationException: localhost:1024 [Root 
> exception is java.net.ConnectException: Connection refused]}}
> {{    at 
> java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:253)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:141)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1620)}}
> {{    at java.naming/com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2848)}}
> {{    at java.naming/com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:349)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxFromUrl(LdapCtxFactory.java:229)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:189)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(LdapCtxFactory.java:247)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(LdapCtxFactory.java:154)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.java:84)}}
> {{    at 
> java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:520)}}
> {{    at 
> java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)}}
> {{    at 
> java.naming/javax.naming.InitialContext.init(InitialContext.java:236)}}
> {{    at 
> java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208)}}
> {{    at 
> java.naming/javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:130)}}
> {{    at 
> org.apache.activemq.security.SimpleCachedLDAPAuthorizationMap.createContext(SimpleCachedLDAPAuthorizationMap.java:142)}}
> {{    at 
> org.apache.activemq.security.SimpleCachedLDAPAuthorizationMap.open(SimpleCachedLDAPAuthorizationMap.java:172)}}
> {{    at 
> org.apache.activemq.security.SimpleCachedLDAPAuthorizationMap.query(SimpleCachedLDAPAuthorizationMap.java:227)}}
> {{    at 
> org.apache.activemq.security.SimpleCachedLDAPAuthorizationMap.afterPropertiesSet(SimpleCachedLDAPAuthorizationMap.java:939)}}
> {{    at 
> org.apache.activemq.security.CachedLDAPAuthorizationMap.afterPropertiesSet(CachedLDAPAuthorizationMap.java:34)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853)}}
> {{    at 
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802)}}
> {{    ... 65 more}}
> {{Caused by: java.net.ConnectException: Connection refused}}
> {{    at java.base/sun.nio.ch.Net.connect0(Native Method)}}
> {{    at java.base/sun.nio.ch.Net.connect(Net.java:589)}}
> {{    at java.base/sun.nio.ch.Net.connect(Net.java:578)}}
> {{    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:583)}}
> {{    at 
> java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)}}
> {{    at java.base/java.net.Socket.connect(Socket.java:751)}}
> {{    at java.base/java.net.Socket.connect(Socket.java:686)}}
> {{    at java.base/java.net.Socket.<init>(Socket.java:555)}}
> {{    at java.base/java.net.Socket.<init>(Socket.java:324)}}
> {{    at 
> java.base/javax.net.DefaultSocketFactory.createSocket(SocketFactory.java:267)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.Connection.createConnectionSocket(Connection.java:341)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.Connection.createSocket(Connection.java:285)}}
> {{    at 
> java.naming/com.sun.jndi.ldap.Connection.<init>(Connection.java:232)}}
> {{    ... 86 more}}
>  
> it's rather inconvenient, as cachedLDAPAuthorizationMap is usually used to 
> avoid issues with the LDAP server being not always available
>  



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to