package com.tddinaction.ejb3.messagedriven;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/testQueue") })
public class TimerListenerBean implements MessageListener {
@Resource
public MessageDrivenContext ctx;
@EJB(beanInterface = SearchService.class)
public SearchService searchService;
@Resource(mappedName = "QueueConnectionFactory")
public QueueConnectionFactory connectionFactory;
@Resource(mappedName = "queue/testQueue", type = javax.jms.Queue.class)
public Queue resultsQueue;
@PostConstruct
public void ejbCreate() {
System.out.println("MDB " + toString() + " created ("
+ (ctx != null ? "has" : "doesn't have")
+ " reference to MessageDrivenContext)");
}
public void onMessage(Message message) {
try {
String id = message.getJMSMessageID();
System.out.println(toString() + " received JMS message "
+ id + " and started timer");
ctx.getTimerService().createTimer(5000, id);
} catch (Exception e) {
e.printStackTrace();
}
}
@Timeout
public void onTimeout(Timer timer) {
System.out.println(toString()
+ " received timeout callback: " + timer.getInfo());
}
public String toString() {
String id = super.toString();
return id.substring(id.lastIndexOf('@'));
}
}