package com.tddinaction.ejb3.messagedriven; import javax.annotation.Resource; import javax.ejb.ActivationConfigProperty; import javax.ejb.EJB; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; 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; @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/testQueue") }) public class SearchListenerBean implements MessageListener { @EJB(beanInterface = SearchService.class) public SearchService searchService; @Resource(mappedName = "QueueConnectionFactory") public QueueConnectionFactory connectionFactory; @Resource(mappedName = "queue/testQueue", type = javax.jms.Queue.class) public Queue resultsQueue; public void onMessage(Message message) { try { ObjectMessage searchRequest = (ObjectMessage) message; String[] keywords = (String[]) searchRequest.getObject(); String[] results = searchService.search(keywords); QueueConnection connection = connectionFactory .createQueueConnection(); QueueSession session = connection.createQueueSession( false, Session.AUTO_ACKNOWLEDGE); QueueSender sender = session.createSender(resultsQueue); Message resultsMessage = session .createObjectMessage(results); sender.send(resultsMessage); connection.close(); } catch (Exception e) { throw new RuntimeException(e); } } }