A következő MDB megállapítja, hogy újra lett-e küldve az üzenet és ha igen, akkor visszavonja a tranzakciót. A visszavont tranzakció miatt az üzenetsor újra megpróbálja elküldeni az üzenetet, mivel ez már egyszer el lett küldve, ezért fogadjuk. A getJMSRedelivered() true értéket fog adni. Az onMessage() függvényt elég megváltoztatni, és egy új tagváltozót bevezetni:
@Resource MessageDrivenContext ctx; public void onMessage(final Message message) { try { // Step 9. We know the client is sending a text message so we cast TextMessage textMessage = (TextMessage) message; // Step 10. get the text from the message. String text = textMessage.getText(); if (!textMessage.getJMSRedelivered()) { // Step 11. rollback delivery of message if the first time System.out.println("message " + text + " received for the first time"); ctx.setRollbackOnly(); } else { // Step 12. read the message System.out.println("message " + text + " received for the second time"); } } catch (JMSException e) { e.printStackTrace(); } }
A hozzá tartozó kliens kódja ugyanaz is lehet mint az előző példában.