001package var.mom.jms.revers; 002 003import java.io.BufferedReader; 004import java.io.IOException; 005import java.io.InputStreamReader; 006 007import javax.jms.Connection; 008import javax.jms.ConnectionFactory; 009import javax.jms.JMSException; 010import javax.jms.Message; 011import javax.jms.MessageConsumer; 012import javax.jms.MessageListener; 013import javax.jms.MessageProducer; 014import javax.jms.Queue; 015import javax.jms.Session; 016import javax.jms.TextMessage; 017import javax.naming.Context; 018import javax.naming.InitialContext; 019import javax.naming.NamingException; 020 021/** 022 * requester for String reverter service 023 * 024 * @author Sandro Leuchter 025 * 026 */ 027public class Anfrager implements MessageListener { 028 private Connection connection; 029 private Session session; 030 private MessageProducer producer; 031 private MessageConsumer consumer; 032 private Queue replyQueue; 033 034 /** 035 * constructor, establishes and starts connection to JMS provider specified in 036 * JNDI (via jndi.properties), afterwards producer and a consumer to a temporary 037 * replyQueue are ready 038 * 039 * @throws NamingException JNDI exceptions 040 * @throws JMSException JMS exceptions 041 */ 042 public Anfrager() throws NamingException, JMSException { 043 Context ctx = new InitialContext(); 044 ConnectionFactory factory = (ConnectionFactory) ctx.lookup("ConnectionFactory"); 045 this.connection = factory.createConnection(); 046 this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 047 Queue queue = (Queue) ctx.lookup(Conf.QUEUE); 048 this.producer = this.session.createProducer(queue); 049 this.replyQueue = this.session.createTemporaryQueue(); 050 this.consumer = this.session.createConsumer(this.replyQueue); 051 this.consumer.setMessageListener(this); 052 this.connection.start(); 053 } 054 055 /** 056 * asynchronous message consumption 057 * 058 * @see javax.jms.MessageListener 059 */ 060 @Override 061 public void onMessage(Message message) { 062 try { 063 if (message instanceof TextMessage) { 064 TextMessage textMessage = (TextMessage) message; 065 String messageText = textMessage.getText(); 066 System.out.println(messageText); 067 } 068 } catch (JMSException e) { 069 System.err.println(e); 070 } 071 072 } 073 074 /** 075 * creates TextMessage for JMS provider with temporary reply queue set and sends 076 * it to Destination of producer, which is configured in Conf.QUEUE 077 * 078 * @param text text to be sent 079 * @throws JMSException JMS exceptions 080 */ 081 public void sendMessage(String text) throws JMSException { 082 TextMessage message = this.session.createTextMessage(); 083 message.setText(text); 084 message.setJMSReplyTo(this.replyQueue); 085 this.producer.send(message); 086 } 087 088 /** 089 * main routine and starting point of program 090 * 091 * @param args not used 092 */ 093 public static void main(String[] args) { 094 Anfrager node = null; 095 try { 096 node = new Anfrager(); 097 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 098 String line; 099 while (true) { 100 line = input.readLine(); 101 node.sendMessage(line); 102 } 103 } catch (NamingException | JMSException | IOException e) { 104 System.err.println(e); 105 } finally { 106 try { 107 if ((node != null) && (node.producer != null)) { 108 node.producer.close(); 109 } 110 if ((node != null) && (node.consumer != null)) { 111 node.consumer.close(); 112 } 113 if ((node != null) && (node.session != null)) { 114 node.session.close(); 115 } 116 if ((node != null) && (node.connection != null)) { 117 node.connection.close(); 118 } 119 } catch (JMSException e) { 120 System.err.println(e); 121 } 122 } 123 } 124}