Source code: org/activemq/demo/SimpleProducer.java
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 SimpleQueueSender class consists only of a main method,
42 * which sends several messages to a queue.
43 *
44 * Run this program in conjunction with SimpleQueueReceiver.
45 * Specify a queue name on the command line when you run the
46 * program. By default, the program sends one message. Specify
47 * a number after the queue name to send that number of messages.
48 */
49 package org.activemq.demo;
50
51 // START SNIPPET: demo
52
53 import javax.jms.Connection;
54 import javax.jms.ConnectionFactory;
55 import javax.jms.Destination;
56 import javax.jms.JMSException;
57 import javax.jms.MessageProducer;
58 import javax.jms.Session;
59 import javax.jms.TextMessage;
60 import javax.naming.Context;
61 import javax.naming.InitialContext;
62 import javax.naming.NamingException;
63
64 /**
65 * A simple polymorphic JMS producer which can work with Queues or Topics
66 * which uses JNDI to lookup the JMS connection factory and destination
67 *
68 * @version $Revision: 1.1.1.1 $
69 */
70 public class SimpleProducer {
71
72 /**
73 * @param args the destination name to send to and optionally, the number of messages to send
74 */
75 public static void main(String[] args) {
76 Context jndiContext = null;
77 ConnectionFactory connectionFactory = null;
78 Connection connection = null;
79 Session session = null;
80 Destination destination = null;
81 MessageProducer producer = null;
82 String destinationName = null;
83 final int NUM_MSGS;
84
85 if ((args.length < 1) || (args.length > 2)) {
86 System.out.println("Usage: java SimpleProducer <destination-name> [<number-of-messages>]");
87 System.exit(1);
88 }
89 destinationName = new String(args[0]);
90 System.out.println("Destination name is " + destinationName);
91 if (args.length == 2) {
92 NUM_MSGS = (new Integer(args[1])).intValue();
93 }
94 else {
95 NUM_MSGS = 1;
96 }
97
98 /*
99 * Create a JNDI API InitialContext object
100 */
101 try {
102 jndiContext = new InitialContext();
103 }
104 catch (NamingException e) {
105 System.out.println("Could not create JNDI API context: " + e.toString());
106 System.exit(1);
107 }
108
109 /*
110 * Look up connection factory and destination.
111 */
112 try {
113 connectionFactory = (ConnectionFactory) jndiContext.lookup("ConnectionFactory");
114 destination = (Destination) jndiContext.lookup(destinationName);
115 }
116 catch (NamingException e) {
117 System.out.println("JNDI API lookup failed: " + e);
118 System.exit(1);
119 }
120
121 /*
122 * Create connection.
123 * Create session from connection; false means session is not transacted.
124 * Create sender and text message.
125 * Send messages, varying text slightly.
126 * Send end-of-messages message.
127 * Finally, close connection.
128 */
129 try {
130 connection = connectionFactory.createConnection();
131 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
132 producer = session.createProducer(destination);
133 TextMessage message = session.createTextMessage();
134 for (int i = 0; i < NUM_MSGS; i++) {
135 message.setText("This is message " + (i + 1));
136 System.out.println("Sending message: " + message.getText());
137 producer.send(message);
138 }
139
140 /*
141 * Send a non-text control message indicating end of messages.
142 */
143 producer.send(session.createMessage());
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 }
159
160 // END SNIPPET: demo