1   /*
2    *
3    * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
4    *
5    * Redistribution and use in source and binary forms, with or
6    * without modification, are permitted provided that the following
7    * conditions are met:
8    *
9    * - Redistributions of source code must retain the above copyright
10   *   notice, this list of conditions and the following disclaimer.
11   *
12   * - Redistribution in binary form must reproduce the above
13   *   copyright notice, this list of conditions and the following
14   *   disclaimer in the documentation and/or other materials
15   *   provided with the distribution.
16   *
17   * Neither the name of Sun Microsystems, Inc. or the names of
18   * contributors may be used to endorse or promote products derived
19   * from this software without specific prior written permission.
20   *
21   * This software is provided "AS IS," without a warranty of any
22   * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
23   * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
24   * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
25   * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
26   * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
27   * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
28   * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
29   * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
30   * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
31   * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
32   * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
33   * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
34   *
35   * You acknowledge that this software is not designed, licensed or
36   * intended for use in the design, construction, operation or
37   * maintenance of any nuclear facility.
38   *
39   */
40  /***
41   * The SimpleQueueReceiver class consists only of a main method,
42   * which fetches one or more messages from a queue using
43   * synchronous message delivery.  Run this program in conjunction
44   * with SimpleQueueSender.  Specify a queue name on the command
45   * line when you run the program.
46   */
47  package org.codehaus.activemq.demo;
48  
49  import javax.jms.JMSException;
50  import javax.jms.Message;
51  import javax.jms.Queue;
52  import javax.jms.QueueConnection;
53  import javax.jms.QueueConnectionFactory;
54  import javax.jms.QueueReceiver;
55  import javax.jms.QueueSession;
56  import javax.jms.Session;
57  import javax.jms.TextMessage;
58  import javax.naming.Context;
59  import javax.naming.InitialContext;
60  import javax.naming.NamingException;
61  
62  public class SimpleQueueReceiver {
63  
64      /***
65       * Main method.
66       *
67       * @param args the queue used by the example
68       */
69      public static void main(String[] args) {
70          String queueName = null;
71          Context jndiContext = null;
72          QueueConnectionFactory queueConnectionFactory = null;
73          QueueConnection queueConnection = null;
74          QueueSession queueSession = null;
75          Queue queue = null;
76          QueueReceiver queueReceiver = null;
77          TextMessage message = null;
78  
79          /*
80           * Read queue name from command line and display it.
81           */
82          if (args.length != 1) {
83              System.out.println("Usage: java " +
84                      "SimpleQueueReceiver <queue-name>");
85              System.exit(1);
86          }
87          queueName = new String(args[0]);
88          System.out.println("Queue name is " + queueName);
89  
90          /*
91           * Create a JNDI API InitialContext object if none exists
92           * yet.
93           */
94          try {
95              jndiContext = new InitialContext();
96          }
97          catch (NamingException e) {
98              System.out.println("Could not create JNDI API " +
99                      "context: " + e.toString());
100             System.exit(1);
101         }
102 
103         /*
104          * Look up connection factory and queue.  If either does
105          * not exist, exit.
106          */
107         try {
108             queueConnectionFactory = (QueueConnectionFactory)
109                     jndiContext.lookup("QueueConnectionFactory");
110             queue = (Queue) jndiContext.lookup(queueName);
111         }
112         catch (NamingException e) {
113             System.out.println("JNDI API lookup failed: " +
114                     e.toString());
115             System.exit(1);
116         }
117 
118         /*
119          * Create connection.
120          * Create session from connection; false means session is
121          * not transacted.
122          * Create receiver, then start message delivery.
123          * Receive all text messages from queue until
124          * a non-text message is received indicating end of
125          * message stream.
126          * Close connection.
127          */
128         try {
129             queueConnection =
130                     queueConnectionFactory.createQueueConnection();
131             queueSession =
132                     queueConnection.createQueueSession(false,
133                             Session.AUTO_ACKNOWLEDGE);
134             queueReceiver = queueSession.createReceiver(queue);
135             queueConnection.start();
136             while (true) {
137                 Message m = queueReceiver.receive(1);
138                 if (m != null) {
139                     if (m instanceof TextMessage) {
140                         message = (TextMessage) m;
141                         System.out.println("Reading message: " +
142                                 message.getText());
143                     }
144                     else {
145                         break;
146                     }
147                 }
148             }
149         }
150         catch (JMSException e) {
151             System.out.println("Exception occurred: " +
152                     e.toString());
153         }
154         finally {
155             if (queueConnection != null) {
156                 try {
157                     queueConnection.close();
158                 }
159                 catch (JMSException e) {
160                 }
161             }
162         }
163     }
164 }