[ 
https://issues.apache.org/activemq/browse/AMQ-2249?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Rob Davies resolved AMQ-2249.
-----------------------------

       Resolution: Fixed
    Fix Version/s: 5.3.0

patch applied in revision 813053

> The pool is not being informed that invalid PooledSessions are being thrown 
> away
> --------------------------------------------------------------------------------
>
>                 Key: AMQ-2249
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2249
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.2.0
>         Environment: Windows XP using ActiveMQ in conjunction with Jencks, 
> Spring and JOTM.
>            Reporter: Phillip Henry
>            Assignee: Rob Davies
>             Fix For: 5.3.0
>
>
> PooledConnection.close() calls rollback() on the internal session. However, 
> when the internal session is an instance of  ActiveMQXASession, this always 
> results in a TransactionInProgressException being thrown (and subsequently 
> caught). Unfortunately, in this path of execution, the session pool is not 
> informed.
> The sessionPool knows nothing about the session being discarded and 
> ultimately, GenericObjectPool.borrowObject() blocks forever since _numActive 
> is never decremented.
> I think the pool should at least be told that the session has been 
> invalidated (this is not a full fix but should at least stop any hanging 
> threads). Below is a partial patch (I'll work on a full solution when I have 
> time):
> {code} 
> Index: activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java
> ===================================================================
> --- activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java   
>   (revision 768326)
> +++ activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java   
>   (working copy)
> @@ -120,6 +120,7 @@
>                          LOG.trace("Ignoring exception as discarding session: 
> " + e1, e1);
>                      }
>                      session = null;
> +                    sessionPool.invalidateSession(this);
>                      return;
>                  }
>              }
> Index: activemq-pool/src/main/java/org/apache/activemq/pool/SessionPool.java
> ===================================================================
> --- activemq-pool/src/main/java/org/apache/activemq/pool/SessionPool.java     
>   (revision 768326)
> +++ activemq-pool/src/main/java/org/apache/activemq/pool/SessionPool.java     
>   (working copy)
> @@ -59,6 +59,14 @@
>              throw JMSExceptionSupport.create(e);
>          }
>      }
> +    
> +    public void invalidateSession(PooledSession session) throws JMSException 
> {
> +       try {
> +            getSessionPool().invalidateObject(session);
> +        } catch (Exception e) {
> +            throw JMSExceptionSupport.create("Failed to invalidate session: 
> " + e, e);
> +        }
> +    }
>  
>      public void returnSession(PooledSession session) throws JMSException {
>          // lets check if we are already closed
> {code} 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to