package dk.thoerup.messagedriven; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.InitialContext; @MessageDriven(mappedName = "jms/reverse", activationConfig = { @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") }) public class ReverserBean implements MessageListener { @Override public void onMessage(Message message) { try { if (message instanceof TextMessage) { TextMessage txt = (TextMessage) message; String msg = reverse( txt.getText() ); Destination d = txt.getJMSReplyTo(); Queue q = (Queue) d; System.out.println("got Message - sending reply to " + q.getQueueName() ); sendReply(msg,q); } } catch (JMSException e) { System.out.println("Error:" + e.getMessage() ); } } private void sendReply(String msg, Queue dest) { try { InitialContext ic = new InitialContext(); ConnectionFactory cf = (ConnectionFactory)ic.lookup("jms/helloFactory"); Connection con = cf.createConnection(); Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(dest); TextMessage reply = session.createTextMessage(); reply.setStringProperty("name", "reply"); reply.setText(msg); producer.send(reply); System.out.println("reply send messageid=" + reply.getJMSMessageID() ); con.close(); }catch (Exception e) { System.out.println("Error " + e); } } private String reverse(String str) { StringBuilder sb = new StringBuilder(); for (int i=str.length()-1; i>=0; i--) { sb.append( str.charAt(i) ); } return sb.toString(); } }