Repository: activemq
Updated Branches:
  refs/heads/trunk f2653e693 -> 9f78f8237


https://issues.apache.org/jira/browse/AMQ-5189

Set all session properties back using a session listener close event so
that the returned session is not modified after it's already been
re-dispatched from the pool.

Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/9f78f823
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/9f78f823
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/9f78f823

Branch: refs/heads/trunk
Commit: 9f78f823784e4bde3bfe45b6aa298d6523319c1d
Parents: f2653e6
Author: Timothy Bish <[email protected]>
Authored: Thu May 29 10:33:09 2014 -0400
Committer: Timothy Bish <[email protected]>
Committed: Thu May 29 10:33:09 2014 -0400

----------------------------------------------------------------------
 .../activemq/jms/pool/XaConnectionPool.java     | 32 +++++++++++++++-----
 1 file changed, 24 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/9f78f823/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/XaConnectionPool.java
----------------------------------------------------------------------
diff --git 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/XaConnectionPool.java
 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/XaConnectionPool.java
index f4205c8..4f87153 100644
--- 
a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/XaConnectionPool.java
+++ 
b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/XaConnectionPool.java
@@ -19,6 +19,8 @@ package org.apache.activemq.jms.pool;
 import javax.jms.Connection;
 import javax.jms.JMSException;
 import javax.jms.Session;
+import javax.jms.TemporaryQueue;
+import javax.jms.TemporaryTopic;
 import javax.jms.XAConnection;
 import javax.transaction.RollbackException;
 import javax.transaction.Status;
@@ -27,10 +29,9 @@ import javax.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
 
 /**
- * An XA-aware connection pool.  When a session is created and an xa 
transaction is active,
- * the session will automatically be enlisted in the current transaction.
- *
- * @author gnodet
+ * An XA-aware connection pool. When a session is created and an xa transaction
+ * is active, the session will automatically be enlisted in the current
+ * transaction.
  */
 public class XaConnectionPool extends ConnectionPool {
 
@@ -43,7 +44,7 @@ public class XaConnectionPool extends ConnectionPool {
 
     @Override
     protected Session makeSession(SessionKey key) throws JMSException {
-        return ((XAConnection)connection).createXASession();
+        return ((XAConnection) connection).createXASession();
     }
 
     @Override
@@ -51,7 +52,8 @@ public class XaConnectionPool extends ConnectionPool {
         try {
             boolean isXa = (transactionManager != null && 
transactionManager.getStatus() != Status.STATUS_NO_TRANSACTION);
             if (isXa) {
-                // if the xa tx aborts inflight we don't want to auto create a 
local transaction or auto ack
+                // if the xa tx aborts inflight we don't want to auto create a
+                // local transaction or auto ack
                 transacted = false;
                 ackMode = Session.CLIENT_ACKNOWLEDGE;
             } else if (transactionManager != null) {
@@ -63,6 +65,22 @@ public class XaConnectionPool extends ConnectionPool {
             }
             PooledSession session = (PooledSession) 
super.createSession(transacted, ackMode);
             if (isXa) {
+                session.addSessionEventListener(new 
PooledSessionEventListener() {
+
+                    @Override
+                    public void onTemporaryQueueCreate(TemporaryQueue 
tempQueue) {
+                    }
+
+                    @Override
+                    public void onTemporaryTopicCreate(TemporaryTopic 
tempTopic) {
+                    }
+
+                    @Override
+                    public void onSessionClosed(PooledSession session) {
+                        session.setIgnoreClose(true);
+                        session.setIsXa(false);
+                    }
+                });
                 session.setIgnoreClose(true);
                 session.setIsXa(true);
                 
transactionManager.getTransaction().registerSynchronization(new 
Synchronization(session));
@@ -104,8 +122,6 @@ public class XaConnectionPool extends ConnectionPool {
                 // This will return session to the pool.
                 session.setIgnoreClose(false);
                 session.close();
-                session.setIgnoreClose(true);
-                session.setIsXa(false);
                 decrementReferenceCount();
             } catch (JMSException e) {
                 throw new RuntimeException(e);

Reply via email to