package com.googlecode.mycontainer.test.ejb;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import com.googlecode.mycontainer.test.SumService;
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/testQueue") })
public class MessageDrivenBean implements MessageListener {
@EJB
private SumService sumService;
@Resource(mappedName = "ConnectionFactory")
private ConnectionFactory connectionFactory;
public void onMessage(Message message) {
ObjectMessage msg = (ObjectMessage) message;
try {
Integer[] values = (Integer[]) msg.getObject();
Integer ret = sumService.divide(values[0], values[1]);
sendReply(ret, msg.getJMSReplyTo());
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
private void sendReply(Integer ret, Destination dest) throws JMSException {
Connection conn = null;
Session session = null;
try {
conn = connectionFactory.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(dest);
producer.send(session.createObjectMessage((ret)));
} finally {
if (conn != null) {
conn.close();
}
if (session != null) {
session.close();
}
}
}
}