Repository: activemq-6 Updated Branches: refs/heads/master 9e673280b -> 9748340a0
Update JMS and RA Tests to ensure fresh TX usage Some of the OutgoingConnection and RA tests were failing due to a previous transaction being present when using the Arjuna TM. This patch adds methods to allow tests which TM to use and ensures that Dummy TM is cleaned up each after each test. Project: http://git-wip-us.apache.org/repos/asf/activemq-6/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-6/commit/2e9aad9e Tree: http://git-wip-us.apache.org/repos/asf/activemq-6/tree/2e9aad9e Diff: http://git-wip-us.apache.org/repos/asf/activemq-6/diff/2e9aad9e Branch: refs/heads/master Commit: 2e9aad9ef4c08854b7b68804ac3cdcd7637a2ca6 Parents: 475f232 Author: Martyn Taylor <[email protected]> Authored: Thu Jan 15 14:25:33 2015 +0000 Committer: Martyn Taylor <[email protected]> Committed: Fri Jan 16 16:28:27 2015 +0000 ---------------------------------------------------------------------- .../service/extensions/ServiceUtils.java | 6 ++ .../tests/integration/ra/JMSContextTest.java | 6 +- .../integration/ra/OutgoingConnectionTest.java | 70 ----------------- .../ra/OutgoingConnectionTestJTA.java | 83 +++++++++++++++++--- .../apache/activemq/tests/util/JMSTestBase.java | 16 ++++ 5 files changed, 100 insertions(+), 81 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-6/blob/2e9aad9e/activemq-service-extensions/src/main/java/org/apache/activemq/service/extensions/ServiceUtils.java ---------------------------------------------------------------------- diff --git a/activemq-service-extensions/src/main/java/org/apache/activemq/service/extensions/ServiceUtils.java b/activemq-service-extensions/src/main/java/org/apache/activemq/service/extensions/ServiceUtils.java index 635163a..79b7aaa 100644 --- a/activemq-service-extensions/src/main/java/org/apache/activemq/service/extensions/ServiceUtils.java +++ b/activemq-service-extensions/src/main/java/org/apache/activemq/service/extensions/ServiceUtils.java @@ -75,6 +75,12 @@ public class ServiceUtils return transactionManager; } + public static void setTransactionManager(TransactionManager tm) + { + transactionManager = tm; + transactionManagerLoaded = (transactionManager != null); + } + private static void setActiveMQXAResourceWrapperFactory(Iterable<ActiveMQXAResourceWrapperFactory> iterable) { if (iterable.iterator().hasNext()) http://git-wip-us.apache.org/repos/asf/activemq-6/blob/2e9aad9e/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/JMSContextTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/JMSContextTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/JMSContextTest.java index 86d4ed0..e4ef1bd 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/JMSContextTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/JMSContextTest.java @@ -30,6 +30,7 @@ import org.apache.activemq.ra.ActiveMQRAConnectionManager; import org.apache.activemq.ra.ActiveMQRAManagedConnectionFactory; import org.apache.activemq.ra.ActiveMQResourceAdapter; import org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl; +import org.apache.activemq.service.extensions.ServiceUtils; import org.apache.activemq.tests.integration.jms.bridge.TransactionManagerLocatorImpl; import org.junit.After; import org.junit.Before; @@ -51,6 +52,7 @@ public class JMSContextTest extends ActiveMQRATestBase @Before public void setUp() throws Exception { + useDummyTransactionManager(); super.setUp(); ActiveMQSecurityManagerImpl securityManager = (ActiveMQSecurityManagerImpl) server.getSecurityManager(); securityManager.getConfiguration().addUser("testuser", "testpassword"); @@ -142,7 +144,7 @@ public class JMSContextTest extends ActiveMQRATestBase @Test public void sessionTransactedTestNoActiveJTATx() throws Exception { - DummyTransactionManager.tm.tx = new DummyTransaction(); + ((DummyTransactionManager) ServiceUtils.getTransactionManager()).tx = new DummyTransaction(); JMSContext context = qraConnectionFactory.createContext(JMSContext.SESSION_TRANSACTED); assertEquals(context.getSessionMode(), JMSContext.AUTO_ACKNOWLEDGE); } @@ -164,7 +166,7 @@ public class JMSContextTest extends ActiveMQRATestBase @Test public void clientAckTestNoActiveJTATx() throws Exception { - DummyTransactionManager.tm.tx = new DummyTransaction(); + ((DummyTransactionManager) ServiceUtils.getTransactionManager()).tx = new DummyTransaction(); JMSContext context = qraConnectionFactory.createContext(JMSContext.CLIENT_ACKNOWLEDGE); assertEquals(context.getSessionMode(), JMSContext.AUTO_ACKNOWLEDGE); } http://git-wip-us.apache.org/repos/asf/activemq-6/blob/2e9aad9e/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTest.java index 8fb25bd..bd0ec20 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTest.java @@ -19,7 +19,6 @@ package org.apache.activemq.tests.integration.ra; import javax.jms.Connection; import javax.jms.JMSContext; import javax.jms.JMSException; -import javax.jms.JMSProducer; import javax.jms.JMSSecurityException; import javax.jms.Message; import javax.jms.MessageConsumer; @@ -39,10 +38,6 @@ import javax.transaction.xa.Xid; import java.util.HashSet; import java.util.Set; -import org.apache.activemq.api.core.client.ClientConsumer; -import org.apache.activemq.api.core.client.ClientMessage; -import org.apache.activemq.api.core.client.ClientSession; -import org.apache.activemq.api.core.client.ClientSessionFactory; import org.apache.activemq.api.jms.ActiveMQJMSClient; import org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory; import org.apache.activemq.core.security.Role; @@ -112,7 +107,6 @@ public class OutgoingConnectionTest extends ActiveMQRATestBase @After public void tearDown() throws Exception { - DummyTransactionManager.tm.tx = null; if (resourceAdapter != null) { resourceAdapter.stop(); @@ -123,70 +117,6 @@ public class OutgoingConnectionTest extends ActiveMQRATestBase } @Test - public void testSimpleMessageSendAndReceive() throws Exception - { - QueueConnection queueConnection = qraConnectionFactory.createQueueConnection(); - Session s = queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); - Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); - MessageProducer mp = s.createProducer(q); - MessageConsumer consumer = s.createConsumer(q); - Message message = s.createTextMessage("test"); - mp.send(message); - queueConnection.start(); - TextMessage textMessage = (TextMessage) consumer.receive(1000); - assertNotNull(textMessage); - assertEquals(textMessage.getText(), "test"); - } - - @Test - public void testSimpleSendNoXAJMSContext() throws Exception - { - Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); - - try (ClientSessionFactory sf = locator.createSessionFactory(); - ClientSession session = sf.createSession(); - ClientConsumer consVerify = session.createConsumer("jms.queue." + MDBQUEUE); - JMSContext jmsctx = qraConnectionFactory.createContext(); - ) - { - session.start(); - // These next 4 lines could be written in a single line however it makes difficult for debugging - JMSProducer producer = jmsctx.createProducer(); - producer.setProperty("strvalue", "hello"); - TextMessage msgsend = jmsctx.createTextMessage("hello"); - producer.send(q, msgsend); - - ClientMessage msg = consVerify.receive(1000); - assertNotNull(msg); - assertEquals("hello", msg.getStringProperty("strvalue")); - } - } - - @Test - public void testSimpleSendNoXAJMS1() throws Exception - { - Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); - try (ClientSessionFactory sf = locator.createSessionFactory(); - ClientSession session = sf.createSession(); - ClientConsumer consVerify = session.createConsumer("jms.queue." + MDBQUEUE); - Connection conn = qraConnectionFactory.createConnection(); - ) - { - Session jmsSess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); - session.start(); - MessageProducer producer = jmsSess.createProducer(q); - // These next 4 lines could be written in a single line however it makes difficult for debugging - TextMessage msgsend = jmsSess.createTextMessage("hello"); - msgsend.setStringProperty("strvalue", "hello"); - producer.send(msgsend); - - ClientMessage msg = consVerify.receive(1000); - assertNotNull(msg); - assertEquals("hello", msg.getStringProperty("strvalue")); - } - } - - @Test public void testSimpleMessageSendAndReceiveXA() throws Exception { Xid xid = new XidImpl("xa1".getBytes(), 1, UUIDGenerator.getInstance().generateStringUUID().getBytes()); http://git-wip-us.apache.org/repos/asf/activemq-6/blob/2e9aad9e/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTestJTA.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTestJTA.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTestJTA.java index 2d11968..51c911b 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTestJTA.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/integration/ra/OutgoingConnectionTestJTA.java @@ -17,7 +17,10 @@ package org.apache.activemq.tests.integration.ra; +import javax.jms.Connection; +import javax.jms.JMSContext; import javax.jms.JMSException; +import javax.jms.JMSProducer; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; @@ -29,6 +32,10 @@ import javax.jms.TextMessage; import java.util.HashSet; import java.util.Set; +import org.apache.activemq.api.core.client.ClientConsumer; +import org.apache.activemq.api.core.client.ClientMessage; +import org.apache.activemq.api.core.client.ClientSession; +import org.apache.activemq.api.core.client.ClientSessionFactory; import org.apache.activemq.api.jms.ActiveMQJMSClient; import org.apache.activemq.core.remoting.impl.invm.InVMConnectorFactory; import org.apache.activemq.core.security.Role; @@ -38,7 +45,7 @@ import org.apache.activemq.ra.ActiveMQRAConnectionManager; import org.apache.activemq.ra.ActiveMQRAManagedConnectionFactory; import org.apache.activemq.ra.ActiveMQResourceAdapter; import org.apache.activemq.spi.core.security.ActiveMQSecurityManagerImpl; -import org.apache.activemq.tests.integration.jms.bridge.TransactionManagerLocatorImpl; +import org.apache.activemq.service.extensions.ServiceUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -54,12 +61,6 @@ public class OutgoingConnectionTestJTA extends ActiveMQRATestBase protected ActiveMQRAManagedConnectionFactory mcf; ActiveMQRAConnectionManager qraConnectionManager = new ActiveMQRAConnectionManager(); - static - { - DummyTransactionManager dummyTransactionManager = new DummyTransactionManager(); - TransactionManagerLocatorImpl.tm = dummyTransactionManager; - } - @Override public boolean useSecurity() { @@ -70,6 +71,7 @@ public class OutgoingConnectionTestJTA extends ActiveMQRATestBase @Before public void setUp() throws Exception { + useDummyTransactionManager(); super.setUp(); ((ActiveMQSecurityManagerImpl)server.getSecurityManager()).getConfiguration().addUser("testuser", "testpassword"); ((ActiveMQSecurityManagerImpl)server.getSecurityManager()).getConfiguration().addUser("guest", "guest"); @@ -96,7 +98,7 @@ public class OutgoingConnectionTestJTA extends ActiveMQRATestBase @After public void tearDown() throws Exception { - ((DummyTransactionManager) TransactionManagerLocatorImpl.tm).tx = null; + ((DummyTransactionManager) ServiceUtils.getTransactionManager()).tx = null; if (resourceAdapter != null) { resourceAdapter.stop(); @@ -212,6 +214,30 @@ public class OutgoingConnectionTestJTA extends ActiveMQRATestBase } @Test + public void testSimpleSendNoXAJMSContext() throws Exception + { + Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); + + try (ClientSessionFactory sf = locator.createSessionFactory(); + ClientSession session = sf.createSession(); + ClientConsumer consVerify = session.createConsumer("jms.queue." + MDBQUEUE); + JMSContext jmsctx = qraConnectionFactory.createContext(); + ) + { + session.start(); + // These next 4 lines could be written in a single line however it makes difficult for debugging + JMSProducer producer = jmsctx.createProducer(); + producer.setProperty("strvalue", "hello"); + TextMessage msgsend = jmsctx.createTextMessage("hello"); + producer.send(q, msgsend); + + ClientMessage msg = consVerify.receive(1000); + assertNotNull(msg); + assertEquals("hello", msg.getStringProperty("strvalue")); + } + } + + @Test public void testQueueSessionAckModeJTA() throws Exception { testQueuSessionAckMode(true); @@ -223,8 +249,47 @@ public class OutgoingConnectionTestJTA extends ActiveMQRATestBase testQueuSessionAckMode(false); } + @Test + public void testSimpleMessageSendAndReceive() throws Exception + { + QueueConnection queueConnection = qraConnectionFactory.createQueueConnection(); + Session s = queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); + MessageProducer mp = s.createProducer(q); + MessageConsumer consumer = s.createConsumer(q); + Message message = s.createTextMessage("test"); + mp.send(message); + queueConnection.start(); + TextMessage textMessage = (TextMessage) consumer.receive(1000); + assertNotNull(textMessage); + assertEquals(textMessage.getText(), "test"); + } + + @Test + public void testSimpleSendNoXAJMS1() throws Exception + { + Queue q = ActiveMQJMSClient.createQueue(MDBQUEUE); + try (ClientSessionFactory sf = locator.createSessionFactory(); + ClientSession session = sf.createSession(); + ClientConsumer consVerify = session.createConsumer("jms.queue." + MDBQUEUE); + Connection conn = qraConnectionFactory.createConnection(); + ) + { + Session jmsSess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + session.start(); + MessageProducer producer = jmsSess.createProducer(q); + // These next 4 lines could be written in a single line however it makes difficult for debugging + TextMessage msgsend = jmsSess.createTextMessage("hello"); + msgsend.setStringProperty("strvalue", "hello"); + producer.send(msgsend); + + ClientMessage msg = consVerify.receive(1000); + assertNotNull(msg); + assertEquals("hello", msg.getStringProperty("strvalue")); + } + } private void setDummyTX() { - ((DummyTransactionManager) TransactionManagerLocatorImpl.tm).tx = new DummyTransaction(); + ((DummyTransactionManager) ServiceUtils.getTransactionManager()).tx = new DummyTransaction(); } } http://git-wip-us.apache.org/repos/asf/activemq-6/blob/2e9aad9e/tests/integration-tests/src/test/java/org/apache/activemq/tests/util/JMSTestBase.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/tests/util/JMSTestBase.java b/tests/integration-tests/src/test/java/org/apache/activemq/tests/util/JMSTestBase.java index b568b9a..4ad86c4 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/tests/util/JMSTestBase.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/tests/util/JMSTestBase.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Random; import java.util.Set; +import com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple; import org.apache.activemq.api.core.TransportConfiguration; import org.apache.activemq.api.core.management.QueueControl; import org.apache.activemq.api.jms.management.JMSQueueControl; @@ -44,6 +45,8 @@ import org.apache.activemq.core.server.ActiveMQServers; import org.apache.activemq.jms.server.config.ConnectionFactoryConfiguration; import org.apache.activemq.jms.server.config.impl.ConnectionFactoryConfigurationImpl; import org.apache.activemq.jms.server.impl.JMSServerManagerImpl; +import org.apache.activemq.service.extensions.ServiceUtils; +import org.apache.activemq.tests.integration.ra.DummyTransactionManager; import org.apache.activemq.tests.unit.util.InVMNamingContext; import org.junit.After; import org.junit.Assert; @@ -150,6 +153,9 @@ public class JMSTestBase extends ServiceTestBase { super.setUp(); + // Load Arjuna TM if one is not already set. + if (ServiceUtils.getTransactionManager() == null) useRealTransactionManager(); + mbeanServer = MBeanServerFactory.createMBeanServer(); Configuration conf = createDefaultConfig(true) @@ -295,6 +301,16 @@ public class JMSTestBase extends ServiceTestBase } } + protected void useRealTransactionManager() + { + ServiceUtils.setTransactionManager((javax.transaction.TransactionManager) new TransactionManagerImple()); + } + + protected void useDummyTransactionManager() + { + ServiceUtils.setTransactionManager(new DummyTransactionManager()); + } + protected final void receiveMessages(JMSConsumer consumer, final int start, final int msgCount, final boolean ack) {
