You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2011/04/12 16:38:53 UTC

svn commit: r1091434 - in /activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool: JmsConsumerClient.java JmsProducerClient.java properties/JmsConsumerProperties.java properties/JmsProducerProperties.java

Author: dejanb
Date: Tue Apr 12 14:38:52 2011
New Revision: 1091434

URL: http://svn.apache.org/viewvc?rev=1091434&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3280 - support selectors in perf plugin

Modified:
    activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java
    activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsProducerClient.java
    activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsConsumerProperties.java
    activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsProducerProperties.java

Modified: activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java?rev=1091434&r1=1091433&r2=1091434&view=diff
==============================================================================
--- activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java (original)
+++ activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsConsumerClient.java Tue Apr 12 14:38:52 2011
@@ -193,7 +193,11 @@ public class JmsConsumerClient extends A
 
     public MessageConsumer createJmsConsumer() throws JMSException {
         Destination[] dest = createDestination(destIndex, destCount);
-        return createJmsConsumer(dest[0]);
+        
+        if (this.client.getMessageSelector() == null)
+        	return createJmsConsumer(dest[0]);
+        else 
+        	return createJmsConsumer(dest[0], this.client.getMessageSelector(), false);
     }
 
     public MessageConsumer createJmsConsumer(Destination dest) throws JMSException {

Modified: activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsProducerClient.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsProducerClient.java?rev=1091434&r1=1091433&r2=1091434&view=diff
==============================================================================
--- activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsProducerClient.java (original)
+++ activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/JmsProducerClient.java Tue Apr 12 14:38:52 2011
@@ -17,6 +17,7 @@
 package org.apache.activemq.tool;
 
 import java.util.Arrays;
+import java.util.Set;
 
 import javax.jms.ConnectionFactory;
 import javax.jms.DeliveryMode;
@@ -248,6 +249,13 @@ public class JmsProducerClient extends A
 
     public TextMessage createJmsTextMessage(int size) throws JMSException {
         jmsTextMessage = getSession().createTextMessage(buildText("", size));
+        
+        // support for adding message headers
+        Set<String> headerKeys = this.client.getHeaderKeys();
+        for (String key : headerKeys) {
+        	jmsTextMessage.setObjectProperty(key, this.client.getHeaderValue(key));
+        }
+        
         return jmsTextMessage;
     }
 

Modified: activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsConsumerProperties.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsConsumerProperties.java?rev=1091434&r1=1091433&r2=1091434&view=diff
==============================================================================
--- activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsConsumerProperties.java (original)
+++ activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsConsumerProperties.java Tue Apr 12 14:38:52 2011
@@ -28,7 +28,8 @@ public class JmsConsumerProperties exten
     protected long recvDuration = 5 * 60 * 1000; // Receive for 5 mins by default
     protected long recvDelay = 0; // delay in milliseconds for processing received msg 
     protected String recvType   = TIME_BASED_RECEIVING;
-
+    protected String messageSelector = null;
+    
     public boolean isDurable() {
         return durable;
     }
@@ -84,4 +85,13 @@ public class JmsConsumerProperties exten
     public long getRecvDelay() {
     	return this.recvDelay;
     }
+    
+    public String getMessageSelector() {
+    	return this.messageSelector;
+    }
+    
+    public void setMessageSelector(String selector) {
+    	if (selector != null )
+    		this.messageSelector = new String(selector);
+    }
 }

Modified: activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsProducerProperties.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsProducerProperties.java?rev=1091434&r1=1091433&r2=1091434&view=diff
==============================================================================
--- activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsProducerProperties.java (original)
+++ activemq/trunk/activemq-tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/properties/JmsProducerProperties.java Tue Apr 12 14:38:52 2011
@@ -16,7 +16,17 @@
  */
 package org.apache.activemq.tool.properties;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 public class JmsProducerProperties extends JmsClientProperties {
+	
+	private static final Logger LOG = LoggerFactory.getLogger(ReflectionUtil.class);
+	
     public static final String TIME_BASED_SENDING  = "time"; // Produce messages base on a time interval
     public static final String COUNT_BASED_SENDING = "count"; // Produce a specific count of messages
     public static final String DELIVERY_MODE_PERSISTENT     = "persistent"; // Persistent message delivery
@@ -29,8 +39,15 @@ public class JmsProducerProperties exten
     protected String sendType = TIME_BASED_SENDING;
     protected long sendDelay = 0;  // delay in milliseconds between each producer send
     
+    protected Map<String,Object> headerMap = null;
+ 
+    
     // If true, create a different message on each send, otherwise reuse.
     protected boolean createNewMsg; 
+    
+    public JmsProducerProperties() {
+    	this.headerMap = new HashMap();
+    }
 
     public String getDeliveryMode() {
         return deliveryMode;
@@ -87,4 +104,53 @@ public class JmsProducerProperties exten
     public long getSendDelay() {
     	return this.sendDelay;
     }
+    
+    
+    /* Operations for supporting message headers */
+    
+    /**
+     * Method for setting a message header. 
+     * @param encodedHeader - the header is encoded as a string using this syntax:
+     * encodedHeader = [headerkey '=' headervalue ':' ]*
+     * E.g. an encodedHeader could read "JMSType=car", or
+     * "JMSType=car:MyHeader=MyValue"
+     *
+     * That implies neither the header key nor the value 
+     * can contain any of the characters ':' and '='.
+     */
+    public void setHeader(String encodedHeader) {
+    	
+    	// remove any trailing ':' characters
+    	if (encodedHeader.endsWith(":")) {
+    		encodedHeader = encodedHeader.substring(0, encodedHeader.length()-1);
+    	}
+
+    	// split headers 
+    	String headers[] = encodedHeader.split(":");
+    	for (String h : headers) {
+    		
+    		// split into header name and value
+    		String tokens[] = h.split("=");
+    		
+    		// sanity check, don't allow empty string for header names
+    		if (tokens.length != 2 || tokens[0].equals("") || tokens[1].equals("") ) {
+    			LOG.error("Error parsing message headers. Header: \"" + h +
+    					"\". This header will be ignored.");
+    		} else {
+    			this.headerMap.put(tokens[0], tokens[1]);
+    		}
+    	}
+    }
+    
+    public Set<String> getHeaderKeys() {
+    	return this.headerMap.keySet();
+    }
+    
+    public Object getHeaderValue(String key) {
+    	return this.headerMap.get(key);
+    }  
+    
+    public void clearHeaders() {
+    	this.headerMap.clear();
+    }
 }