[
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.