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.codehaus.activemq.demo;
50  
51  // START SNIPPET: demo
52  
53  
54  import javax.jms.JMSException;
55  import javax.jms.Queue;
56  import javax.jms.QueueConnection;
57  import javax.jms.QueueConnectionFactory;
58  import javax.jms.QueueSender;
59  import javax.jms.QueueSession;
60  import javax.jms.Session;
61  import javax.jms.TextMessage;
62  import javax.naming.Context;
63  import javax.naming.InitialContext;
64  import javax.naming.NamingException;
65  
66  public class SimpleQueueSender {
67  
68      /***
69       * Main method.
70       *
71       * @param args the queue used by the example and,
72       *             optionally, the number of messages to send
73       */
74      public static void main(String[] args) {
75          String queueName = null;
76          Context jndiContext = null;
77          QueueConnectionFactory queueConnectionFactory = null;
78          QueueConnection queueConnection = null;
79          QueueSession queueSession = null;
80          Queue queue = null;
81          QueueSender queueSender = null;
82          TextMessage message = null;
83          final int NUM_MSGS;
84  
85          if ((args.length < 1) || (args.length > 2)) {
86              System.out.println("Usage: java SimpleQueueSender " +
87                      "<queue-name> [<number-of-messages>]");
88              System.exit(1);
89          }
90          queueName = new String(args[0]);
91          System.out.println("Queue name is " + queueName);
92          if (args.length == 2) {
93              NUM_MSGS = (new Integer(args[1])).intValue();
94          }
95          else {
96              NUM_MSGS = 1;
97          }
98  
99          /*
100          * Create a JNDI API InitialContext object if none exists
101          * yet.
102          */
103         try {
104             jndiContext = new InitialContext();
105         }
106         catch (NamingException e) {
107             System.out.println("Could not create JNDI API context: " + e.toString());
108             System.exit(1);
109         }
110 
111         /*
112          * Look up connection factory and queue.  If either does
113          * not exist, exit.
114          */
115         try {
116             queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("QueueConnectionFactory");
117             queue = (Queue) jndiContext.lookup(queueName);
118         }
119         catch (NamingException e) {
120             System.out.println("JNDI API lookup failed: " + e);
121             System.exit(1);
122         }
123 
124         /*
125          * Create connection.
126          * Create session from connection; false means session is
127          * not transacted.
128          * Create sender and text message.
129          * Send messages, varying text slightly.
130          * Send end-of-messages message.
131          * Finally, close connection.
132          */
133         try {
134             queueConnection = queueConnectionFactory.createQueueConnection();
135             queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
136             queueSender = queueSession.createSender(queue);
137             message = queueSession.createTextMessage();
138             for (int i = 0; i < NUM_MSGS; i++) {
139                 message.setText("This is message " + (i + 1));
140                 System.out.println("Sending message: " +
141                         message.getText());
142                 queueSender.send(message);
143             }
144 
145             /*
146              * Send a non-text control message indicating end of
147              * messages.
148              */
149             queueSender.send(queueSession.createMessage());
150         }
151         catch (JMSException e) {
152             System.out.println("Exception occurred: " +
153                     e.toString());
154         }
155         finally {
156             if (queueConnection != null) {
157                 try {
158                     queueConnection.close();
159                 }
160                 catch (JMSException e) {
161                 }
162             }
163         }
164     }
165 }
166 
167 // END SNIPPET: demo