Hi all, I'm trying to use the XA transactions. I produce 1k items into a queue using an auto-ack session. Then I try to consume them in an XA transaction, but only 200 items are received.
The output of the following test is: java.lang.AssertionError: Expected :1000 Actual :200 Why is that? Is that expected? Viliam -- Test code: public class JmsXaTest { @ClassRule public static EmbeddedActiveMQBroker broker = new EmbeddedActiveMQBroker(); private XAConnectionFactory cf = new ActiveMQXAConnectionFactory(broker.getVmURL()); @Test public void test() throws Exception { // produce 1k items to the queue try ( Connection conn = ((ConnectionFactory) cf).createConnection(); Session session = conn.createSession(false, AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(session.createQueue("queue")) ) { for (int i = 0; i < 1_000; i++) { producer.send(session.createTextMessage("msg-" + i)); } } // try to consume all items in an XA transaction XAConnection conn = cf.createXAConnection(); conn.start(); XASession sess = conn.createXASession(); Xid xid1 = new MyXid(1); sess.getXAResource().start(xid1, XAResource.TMNOFLAGS); MessageConsumer cons1 = sess.createConsumer(sess.createQueue("queue")); int count = 0; for (; cons1.receive(3000) != null; count++) { System.out.println(count); } assertEquals(1_000, count); } private static class MyXid implements Xid { private byte[] gtrid; public MyXid(int val) { gtrid = new byte[]{(byte) (val)}; } @Override public int getFormatId() { return 1; } @Override public byte[] getGlobalTransactionId() { return gtrid; } @Override public byte[] getBranchQualifier() { return new byte[1]; } } }