@Override public void recover() throws JMSException { if (transacted) { throw new IllegalStateException("Cannot recover a transacted session"); } try { session.rollback(true); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } recoverCalled = true; }
@Override public void rollback() throws JMSException { if (!transacted) { throw new IllegalStateException("Cannot rollback a non-transacted session"); } if (xa) { throw new TransactionInProgressException("Cannot call rollback on an XA session"); } try { session.rollback(); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
session.getCoreSession().rollback(true);
@Override public void run() throws ActiveMQException { session.rollback(); } });
@Override public void recover() throws JMSException { if (transacted) { throw new IllegalStateException("Cannot recover a transacted session"); } try { session.rollback(true); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } recoverCalled = true; }
@Override public void recover() throws JMSException { if (transacted) { throw new IllegalStateException("Cannot recover a transacted session"); } try { session.rollback(true); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } recoverCalled = true; }
@Override public void recover() throws JMSException { if (transacted) { throw new IllegalStateException("Cannot recover a transacted session"); } try { session.rollback(true); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } recoverCalled = true; }
@Override public void recover() throws JMSException { if (transacted) { throw new IllegalStateException("Cannot recover a transacted session"); } try { session.rollback(true); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } recoverCalled = true; }
@Override public void run() throws XAException { session.rollback(randomXid()); } });
@Override public void onMessage(ClientMessage message) { count++; latch.countDown(); try { clientSession.rollback(true); } catch (ActiveMQException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } throw new RuntimeException(); } }
@Override public void rollback() throws JMSException { if (!transacted) { throw new IllegalStateException("Cannot rollback a non-transacted session"); } if (xa) { throw new TransactionInProgressException("Cannot call rollback on an XA session"); } try { session.rollback(); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
@Override public void rollback() throws JMSException { if (!transacted) { throw new IllegalStateException("Cannot rollback a non-transacted session"); } if (xa) { throw new TransactionInProgressException("Cannot call rollback on an XA session"); } try { session.rollback(); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
@Override public void rollback() throws JMSException { if (!transacted) { throw new IllegalStateException("Cannot rollback a non-transacted session"); } if (xa) { throw new TransactionInProgressException("Cannot call rollback on an XA session"); } try { session.rollback(); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
@Override public void rollback() throws JMSException { if (!transacted) { throw new IllegalStateException("Cannot rollback a non-transacted session"); } if (xa) { throw new TransactionInProgressException("Cannot call rollback on an XA session"); } try { session.rollback(); } catch (ActiveMQException e) { throw JMSExceptionHelper.convertFromActiveMQException(e); } }
@Override public void onMessage(ClientMessage message) { message.getBodyBuffer().readByte(); // System.out.println("message:" + message); try { if (counter++ < 20) { Thread.sleep(100); // System.out.println("Rollback"); message.acknowledge(); session.rollback(); } else { message.acknowledge(); session.commit(); } if (counter == 40) { latch.countDown(); } } catch (Exception e) { latch.countDown(); e.printStackTrace(); errors.incrementAndGet(); } } });
@Test public void testFailXID() throws Exception { Xid xid = newXID(); ClientSession session = sessionFactory.createSession(true, false, false); session.start(xid, XAResource.TMNOFLAGS); session.end(xid, XAResource.TMFAIL); session.rollback(xid); session.close(); }
@Test public void testRollbackThenSend() throws Exception { ClientSession session = sf.createSession(false, false, false); session.start(); final SimpleString queueName = new SimpleString("DuplicateDetectionTestQueue"); session.createQueue(queueName, queueName, null, false); ClientProducer producer = session.createProducer(queueName); ClientConsumer consumer = session.createConsumer(queueName); ClientMessage message = createMessage(session, 0); SimpleString dupID1 = new SimpleString("abcdefg"); message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID1.getData()); message.putStringProperty("key", dupID1.toString()); producer.send(message); session.rollback(); message = createMessage(session, 0); message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID1.getData()); message.putStringProperty("key", dupID1.toString()); producer.send(message); session.commit(); message = consumer.receive(5000); assertNotNull(message); assertTrue(message.getStringProperty("key").equals(dupID1.toString())); }
@Test public void testSingleTXRollback() throws Exception { ClientProducer producer = clientSessionTxReceives.createProducer(address); ClientConsumer consumer = clientSessionTxReceives.createConsumer(qName1); SimpleString messageId1 = new SimpleString("SMID1"); ClientMessage m1 = createTextMessage(clientSession, "m1"); m1.putStringProperty(Message.HDR_LAST_VALUE_NAME, messageId1); producer.send(m1); clientSessionTxReceives.start(); ClientMessage m = consumer.receive(1000); Assert.assertNotNull(m); m.acknowledge(); clientSessionTxReceives.rollback(); m = consumer.receive(1000); Assert.assertNotNull(m); m.acknowledge(); Assert.assertEquals(m.getBodyBuffer().readString(), "m1"); Assert.assertNull(consumer.receiveImmediate()); }
@Test public void testBasicSendToNoQueue() throws Exception { SimpleString qName = new SimpleString("q1"); AddressSettings addressSettings = new AddressSettings().setMaxDeliveryAttempts(1); server.getAddressSettingsRepository().addMatch(qName.toString(), addressSettings); clientSession.createQueue(qName, qName, null, false); ClientProducer producer = clientSession.createProducer(qName); producer.send(createTextMessage(clientSession, "heyho!")); clientSession.start(); ClientConsumer clientConsumer = clientSession.createConsumer(qName); ClientMessage m = clientConsumer.receive(500); m.acknowledge(); Assert.assertNotNull(m); Assert.assertEquals(m.getBodyBuffer().readString(), "heyho!"); // force a cancel clientSession.rollback(); m = clientConsumer.receiveImmediate(); Assert.assertNull(m); clientConsumer.close(); }
@Test public void testTransactedDuplicateDetection2() throws Exception { ClientSession session = sf.createSession(false, false, false); session.start(); final SimpleString queueName = new SimpleString("DuplicateDetectionTestQueue"); session.createQueue(queueName, queueName, null, false); ClientProducer producer = session.createProducer(queueName); ClientConsumer consumer = session.createConsumer(queueName); ClientMessage message = createMessage(session, 0); SimpleString dupID = new SimpleString("abcdefg"); message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID.getData()); producer.send(message); session.rollback(); // Should be able to resend it and not get rejected since transaction didn't commit message = createMessage(session, 1); message.putBytesProperty(Message.HDR_DUPLICATE_DETECTION_ID, dupID.getData()); producer.send(message); session.commit(); message = consumer.receive(250); Assert.assertEquals(1, message.getObjectProperty(propKey)); message = consumer.receiveImmediate(); Assert.assertNull(message); }