/* * Copyright 2007 Sun Microsystems, Inc. * All rights reserved. You may not modify, use, * reproduce, or distribute this software except in * compliance with the terms of the License at: * http://developer.sun.com/berkeley_license.html */ import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.Queue; import javax.jms.Topic; import javax.jms.Connection; import javax.jms.Session; import javax.jms.MessageProducer; import javax.jms.TextMessage; import javax.jms.JMSException; import javax.annotation.Resource; /** * The Producer class consists only of a main method, * which sends several messages to a queue or topic. * * Run this program in conjunction with SynchConsumer or * AsynchConsumer. Specify "queue" or "topic" on the * command line when you run the program. By default, the * program sends one message. Specify a number after the * destination name to send that number of messages. */ public class Producer { @Resource(mappedName = "jms/ConnectionFactory") private static ConnectionFactory connectionFactory; @Resource(mappedName = "jms/Queue") private static Queue queue; @Resource(mappedName = "jms/Topic") private static Topic topic; /** * Main method. * * @param args the destination used by the example * and, optionally, the number of * messages to send */ public static void main(String[] args) { final int NUM_MSGS; Connection connection = null; if ((args.length < 1) || (args.length > 2)) { System.err.println( "Program takes one or two arguments: " + " []"); System.exit(1); } String destType = args[0]; System.out.println("Destination type is " + destType); if (!(destType.equals("queue") || destType.equals("topic"))) { System.err.println("Argument must be \"queue\" or " + "\"topic\""); System.exit(1); } if (args.length == 2) { NUM_MSGS = (new Integer(args[1])).intValue(); } else { NUM_MSGS = 1; } Destination dest = null; try { if (destType.equals("queue")) { dest = (Destination) queue; } else { dest = (Destination) topic; } } catch (Exception e) { System.err.println("Error setting destination: " + e.toString()); e.printStackTrace(); System.exit(1); } /* * Create connection. * Create session from connection; false means session is * not transacted. * Create producer and text message. * Send messages, varying text slightly. * Send end-of-messages message. * Finally, close connection. */ try { connection = connectionFactory.createConnection(); Session session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(dest); TextMessage message = session.createTextMessage(); for (int i = 0; i < NUM_MSGS; i++) { message.setText("This is message " + (i + 1)); System.out.println("Sending message: " + message.getText()); producer.send(message); } /* * Send a non-text control message indicating end of * messages. */ producer.send(session.createMessage()); } catch (JMSException e) { System.err.println("Exception occurred: " + e.toString()); } finally { if (connection != null) { try { connection.close(); } catch (JMSException e) { } } } } }