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}