I'm doing these steps: Xid xid1, xid2; XASession session = ...; MessageConsumer consumer = ...; XAResource xaRes = session.getXAResource();
xaRes.start(xid1, TMNOFLAGS); consumer.receive(); xaRes.end(xid1, TMSUCCESS); // prepare the xid1, continue with xid2 xaRes.prepare(xid1); xaRes.start(xid2); // receive one more item consumer.receive(); // commit the first transaction xaRes.commit(xid1, false); The issue is that the last `commit` should commit only the first received message. But it commits also the message received using the xid2 transaction. As far as I can tell the above behavior is legal. That's why the `commit` method has the `Xid` argument: to tell which transaction are we committing. The `receive` method uses the transaction associated currently with the session. It also works with ActiveMQ Artemis. Viliam