1   /***
2    * 
3    * Copyright 2004 Protique Ltd
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activemq.tool;
19  
20  import java.util.Date;
21  
22  import javax.jms.Connection;
23  import javax.jms.DeliveryMode;
24  import javax.jms.JMSException;
25  import javax.jms.MessageProducer;
26  import javax.jms.Session;
27  import javax.jms.TextMessage;
28  
29  /***
30   * A simple tool for publishing messages
31   *
32   * @version $Revision: 1.8 $
33   */
34  public class ProducerTool extends ToolSupport {
35  
36      protected int messageCount = 10;
37      protected long sleepTime = 0L;
38      protected boolean verbose = true;
39      protected int messageSize = 255;
40  
41      public static void main(String[] args) {
42          runTool(args, new ProducerTool());
43      }
44  
45      protected static void runTool(String[] args, ProducerTool tool) {
46          if (args.length > 0) {
47              tool.url = args[0];
48          }
49          if (args.length > 1) {
50              tool.topic = args[1].equalsIgnoreCase("true");
51          }
52          if (args.length > 2) {
53              tool.subject = args[2];
54          }
55          if (args.length > 3) {
56              tool.durable = args[3].equalsIgnoreCase("true");
57          }
58          if (args.length > 4) {
59              tool.messageCount = Integer.parseInt(args[4]);
60          }
61          if (args.length > 5) {
62              tool.messageSize = Integer.parseInt(args[5]);
63          }
64          tool.run();
65      }
66  
67      public void run() {
68          try {
69              System.out.println("Connecting to URL: " + url);
70              System.out.println("Publishing a Message with size "+messageSize+" to " + (topic ? "topic" : "queue") + ": " + subject);
71              System.out.println("Using " + (durable ? "durable" : "non-durable") + " publishing");
72  
73              Connection connection = createConnection();
74              Session session = createSession(connection);
75              MessageProducer producer = createProducer(session);
76              //connection.start();
77  
78              sendLoop(session, producer);
79  
80              System.out.println("Done.");
81              close(connection, session);
82          }
83          catch (Exception e) {
84              System.out.println("Caught: " + e);
85              e.printStackTrace();
86          }
87      }
88  
89      protected MessageProducer createProducer(Session session) throws JMSException {
90          MessageProducer producer = session.createProducer(destination);
91          if (durable) {
92              producer.setDeliveryMode(DeliveryMode.PERSISTENT);
93          }
94          else {
95              producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
96          }
97          return producer;
98      }
99  
100     protected void sendLoop(Session session, MessageProducer producer) throws Exception {
101     	
102         for (int i = 0; i < messageCount; i++) {
103         
104         	
105         	TextMessage message = session.createTextMessage(createMessageText(i));
106 
107             if (verbose) {
108             	String msg = message.getText();
109             	if( msg.length() > 50 )
110             		msg = msg.substring(0, 50)+"...";
111                 System.out.println("Sending message: " + msg);
112             }
113 
114             producer.send(message);
115             Thread.sleep(sleepTime);
116         }
117         producer.send(session.createMessage());
118     }
119 
120 	/***
121 	 * @param i
122 	 * @return
123 	 */
124 	private String createMessageText(int index) {
125 		StringBuffer buffer = new StringBuffer(messageSize);
126 		buffer.append("Message: " + index + " sent at: " + new Date());
127 		if( buffer.length() > messageSize ) {
128 			return buffer.substring(0, messageSize);
129 		}
130     	for( int i=buffer.length(); i < messageSize; i++)
131     		buffer.append(' ');
132     	return buffer.toString();
133 	}
134 }