package study.ejb3.lifecycle.messagedriven; import javax.annotation.Resource; import javax.jms.JMSException; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicPublisher; import javax.jms.TopicSession; import javax.naming.NamingException; /** * In JEE 5 we can get the Factory and Topic/Queue through injection. * */ public class QueueMessageSender { @Resource(mappedName = "jms/TopicConnectionFactory") private TopicConnectionFactory connectionFactory; @Resource(mappedName = "jms/Topic") private Topic topic; private TopicConnection connection; private TopicSession session; private TopicPublisher publisher; public QueueMessageSender(String jndiFactory, String jndiQueue) throws NamingException, JMSException { connection = connectionFactory.createTopicConnection(); session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); publisher = session.createPublisher(topic); } public void sendText(String text) throws JMSException { TextMessage message = session.createTextMessage(); message.setText(text); publisher.publish(message); } public void close() { try { publisher.close(); } catch (JMSException e) { } try { session.close(); } catch (JMSException e) { } try { connection.close(); } catch (JMSException e) { } } }