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.