@Stateless
public class QueueConfigBean {
@Resource(lookup = "jms/ConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(lookup = "jms/Queue")
private Queue queue;
@PostConstruct
public void initialize() {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
session.createProducer(queue);
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
@Stateless
public class MessageProducerBean {
@Resource(lookup = "jms/ConnectionFactory")
private ConnectionFactory connectionFactory;
@Resource(lookup = "jms/Queue")
private Queue queue;
public void sendMessage(String message) {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage(message);
producer.send(textMessage);
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
@Component
public class MessageConsumerBean {
@PreDestroy
public void destroy() {
try {
connectionFactory.stop();
} catch (JMSException e) {
e.printStackTrace();
}
}
@JmsListener(destination = "jms/Queue")
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("Received message: " + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
<resource-ref>
<res-ref-name>jms/ConnectionFactory</res-ref-name>
<res-type>javax.jms.ConnectionFactory</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<res-ref-name>jms/Queue</res-ref-name>
<res-type>javax.jms.Queue</res-type>
<res-auth>Container</res-auth>
</resource-ref>