Uploaded image for project: 'ActiveMQ'
  1. ActiveMQ
  2. AMQ-5268

PooledConnectionFactory gets in endless loop when storing into JNDI



    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 5.9.0, 5.9.1, 5.10.0
    • Fix Version/s: 5.10.1, 5.11.0
    • Component/s: Pool
    • Labels:
    • Environment:

      JDK-1.6.0_38, tomcat-naming (JNDI)


      We got into troubles when upgrading from 5.7.0 to new version 5.10.0. One of our tests which uses binding of PooledConnectionFactory into JNDI (tomcat-naming) got stuck and computes in endless loop.

      Problem is implementation of interface org.apache.activemq.jndi.JNDIStorableInterface in class org.apache.activemq.pool.PooledConnectionFactory:

      • method populateProperties(Properties props) implementation uses IntrospectionSupport.getProperties(...) in order to set properties for all getters,
      • setting properties works for basic types, but causes stack overflow for getters - getReference() and getProperties() which creates recursion loops
      • loop #1: PooledConnectionFactory.getProperties -> PooledConnectionFactory.populateProperties -> IntrospectionSupport.getProperties -> PooledConnectionFactory.getProperties
      • loop #2: PooledConnectionFactory.getProperties -> PooledConnectionFactory.populateProperties -> IntrospectionSupport.getProperties -> PooledConnectionFactory.getReference -> JNDIReferenceFactory.createReference -> PooledConnectionFactory.getProperties
      • additional info: recursion loop doesn't end with StackOverflowError, but InvocationTargetException is propagated to IntrospectionSupport.getProperties method where it is being ignored and causes "almost endless" computation (exponential complexity)

      Example test without using JNDI, but using key methods showing the problem and its possible solution/workaround for AMQ 5.10.0 is attached.

      We found that error exists for AMQ 5.9.0 and newer after resolving following issue AMQ-4757.


        1. AmqJndiReference.java
          2 kB
          Michal Kubricht



            • Assignee:
              tabish Timothy A. Bish
              mkubricht Michal Kubricht
            • Votes:
              0 Vote for this issue
              2 Start watching this issue


              • Created: