Michal Kubricht created AMQ-5268:
------------------------------------
Summary: PooledConnectionFactory gets in endless loop when storing
into JNDI
Key: AMQ-5268
URL: https://issues.apache.org/jira/browse/AMQ-5268
Project: ActiveMQ
Issue Type: Bug
Components: activemq-pool
Affects Versions: 5.10.0, 5.9.1, 5.9.0
Environment: JDK-1.6.0_38, tomcat-naming (JNDI)
Reporter: Michal Kubricht
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.
--
This message was sent by Atlassian JIRA
(v6.2#6252)