package study.ejb3.projectbank.util; import java.io.Serializable; import javax.jms.JMSException; import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.NamingException; /** * A Session provides a transactional context in which a set of messages to be * sent or received is grouped in an atomic unit of work, meaning that if you * send several messages during the same session, JMS will ensure that they * either all arrive in the order they’ve been sent at the destination or none * at all. */ public class QueueMessageSender implements MessageSender { // Connection to JMS private QueueConnection queueConnection; // Session to JMS private QueueSession queueSession; // sender to our JMS linked to MDB private QueueSender queueSender; public QueueMessageSender(QueueConnectionFactory queueFactory, Queue queue) throws NamingException, JMSException { // create a JMS connection from the ConnectionFactory queueConnection = queueFactory.createQueueConnection(); // creates the session with JMS queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); // gets the sender to JMS destination queueSender = queueSession.createSender(queue); } public void sendText(String text) throws JMSException { TextMessage message = queueSession.createTextMessage(); message.setText(text); queueSender.send(message); } public void sendObject(Serializable object) throws JMSException { ObjectMessage message = queueSession.createObjectMessage(); message.setObject(object); queueSender.send(message); } public void close() { try { queueSender.close(); } catch (JMSException e) { } try { queueSession.close(); } catch (JMSException e) { } try { queueConnection.close(); } catch (JMSException e) { } } }