001 /** 002 * 003 * Copyright 2004 Protique Ltd 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 **/ 018 package org.activemq.tool; 019 020 import java.util.Date; 021 022 import javax.jms.Connection; 023 import javax.jms.DeliveryMode; 024 import javax.jms.JMSException; 025 import javax.jms.MessageProducer; 026 import javax.jms.Session; 027 import javax.jms.TextMessage; 028 029 /** 030 * A simple tool for publishing messages 031 * 032 * @version $Revision$ 033 */ 034 public class ProducerTool extends ToolSupport { 035 036 protected int messageCount = 10; 037 protected long sleepTime = 0L; 038 protected boolean verbose = true; 039 protected int messageSize = 255; 040 041 public static void main(String[] args) { 042 runTool(args, new ProducerTool()); 043 } 044 045 protected static void runTool(String[] args, ProducerTool tool) { 046 if (args.length > 0) { 047 tool.url = args[0]; 048 } 049 if (args.length > 1) { 050 tool.topic = args[1].equalsIgnoreCase("true"); 051 } 052 if (args.length > 2) { 053 tool.subject = args[2]; 054 } 055 if (args.length > 3) { 056 tool.durable = args[3].equalsIgnoreCase("true"); 057 } 058 if (args.length > 4) { 059 tool.messageCount = Integer.parseInt(args[4]); 060 } 061 if (args.length > 5) { 062 tool.messageSize = Integer.parseInt(args[5]); 063 } 064 tool.run(); 065 } 066 067 public void run() { 068 try { 069 System.out.println("Connecting to URL: " + url); 070 System.out.println("Publishing a Message with size "+messageSize+" to " + (topic ? "topic" : "queue") + ": " + subject); 071 System.out.println("Using " + (durable ? "durable" : "non-durable") + " publishing"); 072 073 Connection connection = createConnection(); 074 Session session = createSession(connection); 075 MessageProducer producer = createProducer(session); 076 //connection.start(); 077 078 sendLoop(session, producer); 079 080 System.out.println("Done."); 081 close(connection, session); 082 } 083 catch (Exception e) { 084 System.out.println("Caught: " + e); 085 e.printStackTrace(); 086 } 087 } 088 089 protected MessageProducer createProducer(Session session) throws JMSException { 090 MessageProducer producer = session.createProducer(destination); 091 if (durable) { 092 producer.setDeliveryMode(DeliveryMode.PERSISTENT); 093 } 094 else { 095 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 096 } 097 return producer; 098 } 099 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 }