[jboss-cvs] JBoss Messaging SVN: r3578 - in branches/Branch_JBossMessaging_1_4_0_SP3_CP: tests/src/org/jboss/test/messaging/jms and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 16 14:28:41 EST 2008


Author: ataylor
Date: 2008-01-16 14:28:41 -0500 (Wed, 16 Jan 2008)
New Revision: 3578

Modified:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/tx/MessagingXAResource.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/XATest.java
Log:
http://jira.jboss.com/jira/browse/JBMESSAGING-1221 - fixed memory leak that occurs when pooled connections are used via JCA

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/tx/MessagingXAResource.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/tx/MessagingXAResource.java	2008-01-16 19:26:18 UTC (rev 3577)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/tx/MessagingXAResource.java	2008-01-16 19:28:41 UTC (rev 3578)
@@ -21,15 +21,15 @@
   */
 package org.jboss.jms.tx;
 
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
 import org.jboss.jms.client.state.SessionState;
 import org.jboss.jms.delegate.ConnectionDelegate;
 import org.jboss.jms.exception.MessagingXAException;
 import org.jboss.logging.Logger;
 
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
 /**
  * An XAResource implementation.
  * 
@@ -166,9 +166,17 @@
                }
                break;
             case TMJOIN :
+               if(!xid.equals(currentXid))
+               {
+                  rm.removeTx(currentXid);
+               }
                setCurrentTransactionId(rm.joinTx(xid));
                break;
             case TMRESUME :
+               if(!xid.equals(currentXid))
+               {
+                  rm.removeTx(currentXid);
+               }
                setCurrentTransactionId(rm.resumeTx(xid));
                break;
             default:

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/XATest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/XATest.java	2008-01-16 19:26:18 UTC (rev 3577)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/XATest.java	2008-01-16 19:28:41 UTC (rev 3578)
@@ -21,41 +21,14 @@
   */
 package org.jboss.test.messaging.jms;
 
-import java.util.ArrayList;
-
-import javax.jms.Connection;
-import javax.jms.DeliveryMode;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageListener;
-import javax.jms.MessageProducer;
-import javax.jms.ServerSession;
-import javax.jms.ServerSessionPool;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-import javax.jms.XAConnection;
-import javax.jms.XAConnectionFactory;
-import javax.jms.XASession;
-import javax.management.ObjectName;
-import javax.naming.InitialContext;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAException;
-import javax.transaction.xa.XAResource;
-import javax.transaction.xa.Xid;
-
+import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple;
 import org.jboss.jms.client.JBossConnection;
 import org.jboss.jms.client.JBossSession;
 import org.jboss.jms.client.delegate.ClientConnectionDelegate;
 import org.jboss.jms.client.delegate.DelegateSupport;
 import org.jboss.jms.client.state.ConnectionState;
 import org.jboss.jms.client.state.SessionState;
-import org.jboss.jms.tx.LocalTx;
-import org.jboss.jms.tx.MessagingXAResource;
-import org.jboss.jms.tx.MessagingXid;
-import org.jboss.jms.tx.ResourceManager;
-import org.jboss.jms.tx.ResourceManagerFactory;
+import org.jboss.jms.tx.*;
 import org.jboss.logging.Logger;
 import org.jboss.test.messaging.tools.ServerManagement;
 import org.jboss.test.messaging.tools.container.InVMInitialContextFactory;
@@ -63,7 +36,15 @@
 import org.jboss.tm.TransactionManagerLocator;
 import org.jboss.tm.TxUtils;
 
-import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple;
+import javax.jms.*;
+import javax.management.ObjectName;
+import javax.naming.InitialContext;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+import java.util.ArrayList;
 
 /**
  *
@@ -163,6 +144,57 @@
 
    // Public --------------------------------------------------------
 
+   public void testMemoryLeakForLocalTXs() throws Exception
+   {
+      XAConnection conn = null;
+
+      Transaction tx1 = null;
+      try
+      {
+
+         conn = cf.createXAConnection();
+
+         JBossConnection jbConn = (JBossConnection)conn;
+
+         ClientConnectionDelegate del = (ClientConnectionDelegate)jbConn.getDelegate();
+
+         ConnectionState state = (ConnectionState)del.getState();
+
+         ResourceManager rm = state.getResourceManager();
+
+         XASession xaSession = conn.createXASession();
+
+         //Create a session
+         XASession sess1 = conn.createXASession();
+         XAResource res1 = sess1.getXAResource();
+
+
+         tm.begin();
+
+         tx1 = tm.getTransaction();
+
+         tx1.enlistResource(res1);
+         int sizeBefore = rm.size();
+         tx1.delistResource(res1, XAResource.TMSUCCESS);
+
+         tx1.enlistResource(res1);
+         int sizeAfter = rm.size();
+         assertTrue(sizeBefore == sizeAfter);
+         tx1.commit();
+
+      }
+      finally
+      {
+         if (conn != null)
+         {
+            conn.close();
+         }
+
+      }
+
+   }
+
+   
    /* If there is no global tx present the send must behave as non transacted.
     * See http://www.jboss.com/index.html?module=bb&op=viewtopic&t=98577&postdays=0&postorder=asc&start=0
     * http://jira.jboss.com/jira/browse/JBMESSAGING-410




More information about the jboss-cvs-commits mailing list