package org.jboss.as.test.integration.management.deploy.runtime.ejb.message;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
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.Session;
import javax.jms.TextMessage;
import javax.naming.NamingException;
import org.jboss.logging.Logger;
@MessageDriven(name="POINT",activationConfig = {@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:jboss/exported/" + Constants.QUEUE_JNDI_NAME)})
public class SimpleMDB implements MessageListener {
private static final Logger log = Logger.getLogger(SimpleMDB.class.getName());
//NOTE: this is local, above - ActivationConfigProperty has exported JNDI, wicked.
@Resource(lookup = "java:/JmsXA")
private ConnectionFactory factory;
private Connection connection;
private Session session;
@Override
public void onMessage(Message message) {
try {
log.trace(this + " received message " + message);
final Destination destination = message.getJMSReplyTo();
// ignore messages that need no reply
if (destination == null) {
log.trace(this + " noticed that no reply-to destination has been set. Just returning");
return;
}
final MessageProducer replyProducer = session.createProducer(destination);
final Message replyMsg = session.createTextMessage(Constants.REPLY_MESSAGE_PREFIX + ((TextMessage) message).getText());
replyMsg.setJMSCorrelationID(message.getJMSMessageID());
replyProducer.send(replyMsg);
replyProducer.close();
} catch (JMSException e) {
throw new RuntimeException(e);
}
}
@PreDestroy
protected void preDestroy() throws JMSException {
log.trace("@PreDestroy on " + this);
safeClose(this.connection);
}
@PostConstruct
protected void postConstruct() throws JMSException, NamingException {
log.trace(this + " MDB @PostConstructed");
this.connection = this.factory.createConnection();
this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
}
static void safeClose(final Connection connection) {
if (connection == null) {
return;
}
try {
connection.close();
} catch (Throwable t) {
// just log
log.trace("Ignoring a problem which occurred while closing: " + connection, t);
}
}
}