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.Connection;
50 import javax.jms.ConnectionFactory;
51 import javax.jms.Destination;
52 import javax.jms.JMSException;
53 import javax.jms.Message;
54 import javax.jms.MessageConsumer;
55 import javax.jms.Session;
56 import javax.jms.TextMessage;
57 import javax.naming.Context;
58 import javax.naming.InitialContext;
59 import javax.naming.NamingException;
60
61 /***
62 * A simple polymorphic JMS consumer which can work with Queues or Topics
63 * which uses JNDI to lookup the JMS connection factory and destination
64 *
65 * @version $Revision: 1.1 $
66 */
67 public class SimpleConsumer {
68
69 /***
70 * @param args the queue used by the example
71 */
72 public static void main(String[] args) {
73 String destinationName = null;
74 Context jndiContext = null;
75 ConnectionFactory connectionFactory = null;
76 Connection connection = null;
77 Session session = null;
78 Destination destination = null;
79 MessageConsumer consumer = null;
80
81 /*
82 * Read destination name from command line and display it.
83 */
84 if (args.length != 1) {
85 System.out.println("Usage: java SimpleConsumer <destination-name>");
86 System.exit(1);
87 }
88 destinationName = new String(args[0]);
89 System.out.println("Destination name is " + destinationName);
90
91 /*
92 * Create a JNDI API InitialContext object
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 destination.
105 */
106 try {
107 connectionFactory = (ConnectionFactory)
108 jndiContext.lookup("ConnectionFactory");
109 destination = (Destination) jndiContext.lookup(destinationName);
110 }
111 catch (NamingException e) {
112 System.out.println("JNDI API lookup failed: " +
113 e.toString());
114 System.exit(1);
115 }
116
117 /*
118 * Create connection.
119 * Create session from connection; false means session is
120 * not transacted.
121 * Create receiver, then start message delivery.
122 * Receive all text messages from destination until
123 * a non-text message is received indicating end of
124 * message stream.
125 * Close connection.
126 */
127 try {
128 connection = connectionFactory.createConnection();
129 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
130 consumer = session.createConsumer(destination);
131 connection.start();
132 while (true) {
133 Message m = consumer.receive(1);
134 if (m != null) {
135 if (m instanceof TextMessage) {
136 TextMessage message = (TextMessage) m;
137 System.out.println("Reading message: " + message.getText());
138 }
139 else {
140 break;
141 }
142 }
143 }
144 }
145 catch (JMSException e) {
146 System.out.println("Exception occurred: " + e);
147 }
148 finally {
149 if (connection != null) {
150 try {
151 connection.close();
152 }
153 catch (JMSException e) {
154 }
155 }
156 }
157 }
158 }