[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