Senhores,
Estou enviando persistent messages para o meu MDB, no método onMessage eu registo um timer que chama o método callback ejbTimeout em alguns segundos.
A minha dúvida é a seguinte:
Por a mensagem ser persistente eu só tenho garantia de que ela vai ser entregue, ou que o MDB conseguirá chamar o callback, mesmo depois de um restart do servidor ?
Segue o código do mdb para melhor visualização do que estou querendo:
package br.com.teste;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.ejb.TimerService;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class HelloMDB implements MessageDrivenBean, MessageListener, TimedObject {
private static final long serialVersionUID = 1L;
private MessageDrivenContext ctx = null;
public HelloMDB() {}
public void onMessage(Message message) {
System.out.println("INICIANDO O ONMESSAGE");
TimerService timerservice = ctx.getTimerService();
String bookingNr = null;
try {
bookingNr = ((TextMessage)message).getText();
} catch (Exception e) {
throw new RuntimeException(e.getLocalizedMessage(), e);
}
timerservice.createTimer(10000, bookingNr);
System.out.println("TERMINANDO O ONMESSAGE");
return;
}
public void ejbTimeout(Timer timer) {
System.out.println(timer.getInfo());
timer.cancel();
}
public void setMessageDrivenContext(MessageDrivenContext ctx)
throws EJBException {this.ctx = ctx;}
public void ejbCreate() {}
public void ejbRemove() {ctx = null;}
}
É que se eu reiniciar o servidor assim que o método onmessage termina de ser executado, o callback não é chamado quando eu inicio denovo…
Alguém sabe como posso resolver este problema ?
[]'s