You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2013/04/25 16:33:54 UTC

svn commit: r1475798 - in /activemq/trunk/activemq-ra/src: main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java

Author: gtully
Date: Thu Apr 25 14:33:54 2013
New Revision: 1475798

URL: http://svn.apache.org/r1475798
Log:
https://issues.apache.org/jira/browse/AMQ-4486 - fix and test

Modified:
    activemq/trunk/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java
    activemq/trunk/activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java

Modified: activemq/trunk/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java?rev=1475798&r1=1475797&r2=1475798&view=diff
==============================================================================
--- activemq/trunk/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java (original)
+++ activemq/trunk/activemq-ra/src/main/java/org/apache/activemq/ra/ActiveMQResourceAdapter.java Thu Apr 25 14:33:54 2013
@@ -34,6 +34,7 @@ import javax.transaction.xa.XAResource;
 import org.apache.activemq.ActiveMQConnection;
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.RedeliveryPolicy;
+import org.apache.activemq.TransactionContext;
 import org.apache.activemq.broker.BrokerFactory;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.util.ServiceSupport;
@@ -233,25 +234,20 @@ public class ActiveMQResourceAdapter ext
      * @see javax.resource.spi.ResourceAdapter#getXAResources(javax.resource.spi.ActivationSpec[])
      */
     public XAResource[] getXAResources(ActivationSpec[] activationSpecs) throws ResourceException {
-        Connection connection = null;
         try {
-            connection = makeConnection();
-            if (connection instanceof XAConnection) {
-                XASession session = ((XAConnection)connection).createXASession();
-                XAResource xaResource = session.getXAResource();
-                return new XAResource[] {
-                    xaResource
-                };
-            }
-            return new XAResource[] {};
+            final ActiveMQConnection connection = makeConnection();
+            return new XAResource[]{new LocalAndXATransaction(new TransactionContext(connection)) {
+                public void finalize() throws Throwable {
+                    try {
+                        connection.close();
+                    } catch (Throwable ignore) {
+                    } finally {
+                        super.finalize();
+                    }
+                }
+            }};
         } catch (JMSException e) {
             throw new ResourceException(e);
-        } finally {
-            try {
-                connection.close();
-            } catch (Throwable ignore) {
-                //
-            }
         }
     }
 

Modified: activemq/trunk/activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java?rev=1475798&r1=1475797&r2=1475798&view=diff
==============================================================================
--- activemq/trunk/activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java (original)
+++ activemq/trunk/activemq-ra/src/test/java/org/apache/activemq/ra/ActiveMQConnectionFactoryTest.java Thu Apr 25 14:33:54 2013
@@ -30,6 +30,7 @@ import javax.resource.spi.UnavailableExc
 import javax.resource.spi.XATerminator;
 import javax.resource.spi.work.WorkManager;
 
+import javax.transaction.xa.XAResource;
 import junit.framework.TestCase;
 import org.apache.activemq.ActiveMQConnection;
 import org.apache.activemq.ActiveMQTopicSubscriber;
@@ -105,4 +106,16 @@ public class ActiveMQConnectionFactoryTe
         assertEquals(0, ((ActiveMQTopicSubscriber)sub).getPrefetchNumber());
     }
 
+    public void testGetXAResource() throws Exception {
+
+        ActiveMQResourceAdapter ra = new ActiveMQResourceAdapter();
+        ra.setServerUrl(url);
+        ra.setUserName(user);
+        ra.setPassword(pwd);
+
+        XAResource[] resoruces = ra.getXAResources(null);
+        assertEquals("one resource", 1, resoruces.length);
+
+        assertEquals("no pending transactions", 0, resoruces[0].recover(100).length);
+    }
 }