package ddth.dasp.framework.queue;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
/**
* JMS implementation of {@link ITextMessageQueue}.
*
* @author NBThanh <btnguyen2k@gmail.com>
*/
public class JmsMessageQueue extends AbstractTextMessageQueue {
private ConnectionFactory connectionFactory;
private Connection connection;
public ConnectionFactory getConnectionFactory() {
return connectionFactory;
}
public JmsMessageQueue setConnectionFactory(ConnectionFactory connectionFactory) {
this.connectionFactory = connectionFactory;
return this;
}
public void init() throws Exception {
connection = connectionFactory.createConnection();
connection.start();
}
public void destroy() throws Exception {
if (connection != null) {
connection.close();
connection = null;
}
}
/**
* {@inheritDoc}
*/
@Override
public String consumeMessage(String message) throws Exception {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
try {
Destination destination = session.createQueue(getQueueName());
MessageConsumer consumer = session.createConsumer(destination);
Message jmsMsg = consumer.receiveNoWait();
if (jmsMsg instanceof TextMessage) {
return ((TextMessage) jmsMsg).getText();
}
return null;
} finally {
session.close();
}
}
/**
* {@inheritDoc}
*/
@Override
public String consumeMessage(String message, long timeoutMillisecs) throws Exception {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
try {
Destination destination = session.createQueue(getQueueName());
MessageConsumer consumer = session.createConsumer(destination);
Message jmsMsg = consumer.receive(timeoutMillisecs);
if (jmsMsg instanceof TextMessage) {
return ((TextMessage) jmsMsg).getText();
}
return null;
} finally {
session.close();
}
}
/**
* {@inheritDoc}
*/
@Override
public boolean produceMessage(String message) throws Exception {
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
try {
Destination destination = session.createQueue(getQueueName());
MessageProducer producer = session.createProducer(destination);
producer.setDisableMessageID(true);
producer.setDisableMessageTimestamp(true);
TextMessage jmsMsg = session.createTextMessage(message);
producer.send(jmsMsg);
return true;
} finally {
session.close();
}
}
/**
* {@inheritDoc}
*/
@Override
public boolean produceMessage(String message, long timeoutMillisecs) throws Exception {
return produceMessage(message);
}
}