import java.util.Date;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class SProducer {
	public static void main(String[] args) {
		final int NUM_MSGS;
		if ((args.length < 2) || (args.length > 3)) {
			System.out.println("Program takes two or three arguments: "+ "<dest_name> <queue|topic> " + "[<number-of-messages>");
			System.exit(1);
		}
		String destName = new String(args[0]);
		String destType = new String(args[1]);
		System.out.println("Destination name is " + destName + ", type is " + destType);
		if (args.length == 3) {
			NUM_MSGS = (new Integer(args[2])).intValue();
		} else {
			NUM_MSGS = 1;
		}
		Context jndiContext = null;
		try {
			jndiContext = new InitialContext();
		} catch (NamingException e) {
			System.out.println("Could not create JNDI " + "context: "
					+ e.toString());
			System.exit(1);
		}
		ConnectionFactory connectionFactory = null;
		Destination dest = null;
		try {
			connectionFactory = (ConnectionFactory) jndiContext.lookup("jms/QueueConnectionFactory");
			if (destType.equals("queue")) {
				dest = (Queue) jndiContext.lookup(destName);
			} else if (destType.equals("topic")) {
				dest = (Topic) jndiContext.lookup(destName);
			} else {
				throw new Exception("Invalid destination type" + "; must be queue or topic");
			}
		} catch (Exception e) {
			System.out.println("JNDI lookup failed: " + e.toString());
			e.printStackTrace();
			System.exit(1);
		}
		Connection connection = null;
		MessageProducer producer = null;
		try {
			connection = connectionFactory.createConnection();
			Session session = connection.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			producer = session.createProducer(dest);
			TextMessage message = session.createTextMessage();
			for (int i = 0; i < NUM_MSGS; i++) {
				message.setText("This is message " + (i + 1) + " sent at "
						+ new Date());
				System.out.println("Sending message: " + message.getText());
				producer.send(message);
			}
			producer.send(session.createMessage());
		} catch (JMSException e) {
			System.out.println("Exception occurred: " + e.toString());
		} finally {
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					System.err.println("JMSException occured while closing connection");
				}
			}
		}
	}
}