@Override public void run() throws XAException { session.prepare(randomXid()); } });
@Test(timeout = 120000) public void testXAMessagesNotSentSoNoRollbackOnCommit() throws Exception { createSessionFactory(); ClientSession session = createSession(sf, true, false, false); Xid xid = new XidImpl("uhuhuhu".getBytes(), 126512, "auhsduashd".getBytes()); session.createQueue(FailoverTestBase.ADDRESS, RoutingType.MULTICAST, FailoverTestBase.ADDRESS, null, true); ClientProducer producer = session.createProducer(FailoverTestBase.ADDRESS); session.start(xid, XAResource.TMNOFLAGS); sendMessagesSomeDurable(session, producer); session.end(xid, XAResource.TMSUCCESS); session.prepare(xid); session.commit(xid, false); crash(session); ClientConsumer consumer = session.createConsumer(FailoverTestBase.ADDRESS); session.start(); Xid xid2 = new XidImpl("tfytftyf".getBytes(), 54654, "iohiuohiuhgiu".getBytes()); session.start(xid2, XAResource.TMNOFLAGS); receiveDurableMessages(consumer); session.end(xid2, XAResource.TMSUCCESS); session.prepare(xid2); session.commit(xid2, false); }
@Test public void testXAInterleaveResourceRollbackAfterPrepare() throws Exception { Xid xid = newXID(); Xid xid2 = newXID(); Xid xid3 = newXID(); ClientProducer clientProducer = clientSession.createProducer(atestq); ClientConsumer clientConsumer = clientSession.createConsumer(atestq); ClientMessage m1 = createTextMessage(clientSession, "m1"); clientSession.start(xid, XAResource.TMNOFLAGS); clientProducer.send(m1); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); clientSession.commit(xid, false); clientSession.start(); clientSession.start(xid2, XAResource.TMNOFLAGS); ClientMessage m2 = clientConsumer.receiveImmediate(); assertNotNull(m2); clientSession.end(xid2, XAResource.TMSUCCESS); clientSession.prepare(xid2); clientSession.rollback(xid2); clientSession.start(xid3, XAResource.TMNOFLAGS); m2 = clientConsumer.receiveImmediate(); assertNotNull(m2); clientSession.end(xid3, XAResource.TMSUCCESS); clientSession.prepare(xid3); clientSession.commit(xid3, false); }
@Test(timeout = 120000) public void testXAMessagesConsumedSoRollbackOnPrepare() throws Exception { createSessionFactory(); ClientSession session1 = createSessionAndQueue(); ClientProducer producer = session1.createProducer(FailoverTestBase.ADDRESS); sendMessagesSomeDurable(session1, producer); session1.commit(); ClientSession session2 = createSession(sf, true, false, false); ClientConsumer consumer = session2.createConsumer(FailoverTestBase.ADDRESS); session2.start(); Xid xid = new XidImpl("uhuhuhu".getBytes(), 126512, "auhsduashd".getBytes()); session2.start(xid, XAResource.TMNOFLAGS); receiveMessages(consumer); session2.end(xid, XAResource.TMSUCCESS); crash(session2); try { session2.prepare(xid); Assert.fail("Should throw exception"); } catch (XAException e) { Assert.assertEquals(XAException.XAER_RMFAIL, e.errorCode); } }
@Test public void testForgetHeuristicallyRolledBackXID() throws Exception { Xid xid = newXID(); clientSession.start(xid, XAResource.TMNOFLAGS); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); String[] preparedTransactions = messagingService.getActiveMQServerControl().listPreparedTransactions(); Assert.assertEquals(1, preparedTransactions.length); System.out.println(preparedTransactions[0]); Assert.assertTrue(messagingService.getActiveMQServerControl().rollbackPreparedTransaction(XidImpl.toBase64String(xid))); Assert.assertEquals(1, messagingService.getActiveMQServerControl().listHeuristicRolledBackTransactions().length); clientSession.forget(xid); Assert.assertEquals(0, messagingService.getActiveMQServerControl().listHeuristicRolledBackTransactions().length); }
@Test(timeout = 120000) public void testXAMessagesSentSoRollbackOnPrepare() throws Exception { createSessionFactory(); final ClientSession session = createSession(sf, true, false, false); Xid xid = new XidImpl("uhuhuhu".getBytes(), 126512, "auhsduashd".getBytes()); session.createQueue(FailoverTestBase.ADDRESS, RoutingType.MULTICAST, FailoverTestBase.ADDRESS, null, true); final ClientProducer producer = session.createProducer(FailoverTestBase.ADDRESS); session.start(xid, XAResource.TMNOFLAGS); sendMessagesSomeDurable(session, producer); session.end(xid, XAResource.TMSUCCESS); crash(session); try { session.prepare(xid); Assert.fail("Should throw exception"); } catch (XAException e) { Assert.assertEquals(XAException.XAER_RMFAIL, e.errorCode); // XXXX session.rollback(); } ClientConsumer consumer = session.createConsumer(FailoverTestBase.ADDRESS); session.start(); ClientMessage message = consumer.receiveImmediate(); Assert.assertNull(message); producer.close(); consumer.close(); }
@Test public void testForgetHeuristicallyCommittedXID() throws Exception { Xid xid = newXID(); clientSession.start(xid, XAResource.TMNOFLAGS); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); String[] preparedTransactions = messagingService.getActiveMQServerControl().listPreparedTransactions(); Assert.assertEquals(1, preparedTransactions.length); System.out.println(preparedTransactions[0]); Assert.assertTrue(messagingService.getActiveMQServerControl().commitPreparedTransaction(XidImpl.toBase64String(xid))); Assert.assertEquals(1, messagingService.getActiveMQServerControl().listHeuristicCommittedTransactions().length); clientSession.forget(xid); Assert.assertEquals(0, messagingService.getActiveMQServerControl().listHeuristicCommittedTransactions().length); }
@Test public void testNonPersistentMultipleIDs() throws Exception { for (int i = 0; i < 10; i++) { Xid xid = new XidImpl("xa1".getBytes(), 1, UUIDGenerator.getInstance().generateStringUUID().getBytes()); ClientMessage m1 = createTextMessage("m1", false); ClientMessage m2 = createTextMessage("m2", false); ClientMessage m3 = createTextMessage("m3", false); ClientMessage m4 = createTextMessage("m4", false); clientSession.start(xid, XAResource.TMNOFLAGS); clientProducer.send(m1); clientProducer.send(m2); clientProducer.send(m3); clientProducer.send(m4); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); if (i == 2) { clientSession.commit(xid, false); } recreateClients(); } stopAndRestartServer(); Xid[] xids = clientSession.recover(XAResource.TMSTARTRSCAN); Assert.assertEquals(9, xids.length); }
clientProducer.send(m4); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid);
session.prepare(xid); crash(true, session);
clientSession.prepare(xid);
public void testNonPersistent(final boolean commit) throws Exception { Xid xid = new XidImpl("xa1".getBytes(), 1, UUIDGenerator.getInstance().generateStringUUID().getBytes()); ClientMessage m1 = createTextMessage("m1", false); ClientMessage m2 = createTextMessage("m2", false); ClientMessage m3 = createTextMessage("m3", false); ClientMessage m4 = createTextMessage("m4", false); clientSession.start(xid, XAResource.TMNOFLAGS); clientProducer.send(m1); clientProducer.send(m2); clientProducer.send(m3); clientProducer.send(m4); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); stopAndRestartServer(); Xid[] xids = clientSession.recover(XAResource.TMSTARTRSCAN); Assert.assertEquals(xids.length, 1); Assert.assertEquals(xids[0].getFormatId(), xid.getFormatId()); ActiveMQTestBase.assertEqualsByteArrays(xids[0].getBranchQualifier(), xid.getBranchQualifier()); ActiveMQTestBase.assertEqualsByteArrays(xids[0].getGlobalTransactionId(), xid.getGlobalTransactionId()); xids = clientSession.recover(XAResource.TMENDRSCAN); Assert.assertEquals(xids.length, 0); if (commit) { clientSession.commit(xid, false); } else { clientSession.rollback(xid); } xids = clientSession.recover(XAResource.TMSTARTRSCAN); Assert.assertEquals(xids.length, 0); }
clientProducer.send(m4); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid);
@Test public void testRestartWithTXPrepareDeletedQueue() throws Exception { ClientSession clientSession2 = sessionFactory.createSession(false, true, true); ClientProducer clientProducer = clientSession2.createProducer(atestq); ClientMessage m1 = createTextMessage(clientSession2, "m1"); clientProducer.send(m1); Xid xid = newXID(); clientSession.start(xid, XAResource.TMNOFLAGS); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(atestq); ClientMessage message = clientConsumer.receive(5000); message.acknowledge(); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid); clientSession.getSessionFactory().getConnection().destroy(); messagingService.destroyQueue(atestq); messagingService.stop(); messagingService.start(); messagingService.waitForActivation(10, TimeUnit.SECONDS); assertTrue(messagingService.isStarted()); }
producer.send(m4); clientSessionXa.end(xid, XAResource.TMSUCCESS); clientSessionXa.prepare(xid);
session.prepare(xid); session.close(); server.stop();
clientProducer.send(m4); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid);
clientSession.start(xid, XAResource.TMNOFLAGS); clientSession.end(xid, XAResource.TMSUCCESS); clientSession.prepare(xid);