You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by wo...@apache.org on 2005/08/19 05:27:57 UTC

cvs commit: jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/client ReceiveSubscriber.java

woolfel     2005/08/18 20:27:57

  Modified:    src/protocol/jms/org/apache/jmeter/protocol/jms/sampler
                        SubscriberSampler.java PublisherSampler.java
                        JMSSampler.java
               src/protocol/jms/org/apache/jmeter/protocol/jms/client
                        ReceiveSubscriber.java
  Log:
  made some additional enhancements to the topic samplers. Added handling for
  ObjectMessages to make sure we don't get an exception.
  peter lin
  
  Revision  Changes    Path
  1.7       +26 -4     jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java
  
  Index: SubscriberSampler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/SubscriberSampler.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SubscriberSampler.java	15 Aug 2005 20:33:07 -0000	1.6
  +++ SubscriberSampler.java	19 Aug 2005 03:27:57 -0000	1.7
  @@ -16,9 +16,12 @@
   
   package org.apache.jmeter.protocol.jms.sampler;
   
  +import java.io.ObjectInputStream;
  +
   import javax.jms.JMSException;
   import javax.jms.Message;
   import javax.jms.MessageListener;
  +import javax.jms.ObjectMessage;
   import javax.jms.TextMessage;
   
   import org.apache.jmeter.samplers.Entry;
  @@ -178,6 +181,7 @@
   			}
   		}
   		result.sampleEnd();
  +        result.setSamplerData(this.BUFFER.toString());
   		result.setResponseMessage(loop + " samples messages recieved");
   		if (this.getReadResponseAsBoolean()) {
   			result.setResponseData(this.BUFFER.toString().getBytes());
  @@ -218,11 +222,26 @@
   			}
   		}
   		result.sampleEnd();
  -		result.setResponseMessage(loop + " samples messages recieved");
  +		result.setResponseHeaders(loop + " samples messages recieved");
  +        if (this.SUBSCRIBER.getMessageType() == ReceiveSubscriber.TEXT) {
  +            result.setSamplerData(this.SUBSCRIBER.getMessage());
  +            result.setContentType(SampleResult.TEXT);
  +        }
   		if (this.getReadResponseAsBoolean()) {
  -			result.setResponseData(this.SUBSCRIBER.getMessage().getBytes());
  +            // added an a check to make sure the message is TextMessage
  +            // before trying to set the SampleResult.
  +            if (this.SUBSCRIBER.getMessageType() == ReceiveSubscriber.TEXT) {
  +                result.setResponseData(this.SUBSCRIBER.getMessage().getBytes());
  +            } else {
  +                result.setResponseData(
  +                        this.SUBSCRIBER.getObjectMessage().toString().getBytes());
  +            }
   		} else {
  -			result.setContentLength(this.SUBSCRIBER.getMessage().getBytes().length);
  +            // right now I'm not sure how to handle ObjectMessages, since there
  +            // isn't an easy way to count the bytes of an object message.
  +            if (this.SUBSCRIBER.getMessageType() == ReceiveSubscriber.TEXT) {
  +                result.setContentLength(this.SUBSCRIBER.getMessage().getBytes().length);
  +            }
   		}
   		result.setSuccessful(true);
   		result.setResponseCode(loop + " message(s) recieved successfully");
  @@ -247,7 +266,10 @@
   					this.BUFFER.append(content);
   					count(1);
   				}
  -			}
  +			} else if (message instanceof ObjectMessage) {
  +                ObjectMessage msg = (ObjectMessage)message;
  +                this.BUFFER.append(msg.getObject().toString());
  +            }
   		} catch (JMSException e) {
   			log.error(e.getMessage());
   		}
  
  
  
  1.8       +5 -0      jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java
  
  Index: PublisherSampler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/PublisherSampler.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PublisherSampler.java	15 Aug 2005 20:33:07 -0000	1.7
  +++ PublisherSampler.java	19 Aug 2005 03:27:57 -0000	1.8
  @@ -152,7 +152,12 @@
   			result.setResponseCode("message published successfully");
   			result.setResponseMessage(loop + " messages published");
   			result.setSuccessful(true);
  +            // we have to set the ReponseData so that it gets counted in
  +            // the aggregate listener. Since JMS performance is about
  +            // the throughput of both pub/sub, it's important to measure
  +            // both. Peter Lin
   			result.setResponseData(content.getBytes());
  +            result.setSamplerData(content);
   			result.setSampleCount(loop);
   			this.BUFFER.setLength(0);
   		}
  
  
  
  1.13      +3 -1      jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java
  
  Index: JMSSampler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/sampler/JMSSampler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- JMSSampler.java	16 Aug 2005 01:29:51 -0000	1.12
  +++ JMSSampler.java	19 Aug 2005 03:27:57 -0000	1.13
  @@ -31,6 +31,7 @@
   import javax.jms.QueueSender;
   import javax.jms.QueueSession;
   import javax.jms.Session;
  +import javax.jms.StreamMessage;
   import javax.jms.TextMessage;
   import javax.naming.Context;
   import javax.naming.InitialContext;
  @@ -140,6 +141,7 @@
   				} else {
   					if (replyMsg instanceof TextMessage) {
   						res.setResponseData(((TextMessage) replyMsg).getText().getBytes());
  +                        res.setContentLength(((TextMessage) replyMsg).getText().getBytes().length);
   					} else {
   						res.setResponseData(replyMsg.toString().getBytes());
   					}
  
  
  
  1.6       +33 -7     jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java
  
  Index: ReceiveSubscriber.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/protocol/jms/org/apache/jmeter/protocol/jms/client/ReceiveSubscriber.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ReceiveSubscriber.java	12 Jul 2005 20:50:37 -0000	1.5
  +++ ReceiveSubscriber.java	19 Aug 2005 03:27:57 -0000	1.6
  @@ -23,6 +23,7 @@
   import javax.jms.JMSException;
   import javax.jms.Message;
   import javax.jms.TextMessage;
  +import javax.jms.ObjectMessage;
   import javax.jms.Topic;
   import javax.jms.TopicConnection;
   import javax.jms.TopicConnectionFactory;
  @@ -40,6 +41,9 @@
    */
   public class ReceiveSubscriber implements Runnable {
   
  +    public static final int TEXT = 0;
  +    public static final int OBJECT = 1;
  +    
   	private static Logger log = LoggingManager.getLoggerForClass();
   
   	private TopicConnection CONN = null;
  @@ -52,7 +56,7 @@
   
   	private byte[] RESULT = null;
   
  -	private Object OBJ_RESULT = null;// TODO never read
  +	private Object OBJ_RESULT = null;
   
   	// private long time = System.currentTimeMillis();
   	private int counter;
  @@ -65,6 +69,8 @@
   										// is picked up
   
   	private Thread CLIENTTHREAD = null;
  +    
  +    private int MSG_TYPE = TEXT;
   
   	/**
   	 * 
  @@ -174,6 +180,22 @@
   		return this.RESULT;
   	}
   
  +    /**
  +     * current implementation supports Text and Object messages
  +     * @return
  +     */
  +    public int getMessageType() {
  +        return this.MSG_TYPE;
  +    }
  +    
  +    /**
  +     * Return the raw object in the message
  +     * @return
  +     */
  +    public Object getObjectMessage() {
  +        return this.OBJ_RESULT;
  +    }
  +    
   	/**
   	 * close() will stop the connection first. Then it closes the subscriber,
   	 * session and connection and sets them to null.
  @@ -260,12 +282,16 @@
   			}
   			try {
   				Message message = this.SUBSCRIBER.receive();
  -				if (message != null && message instanceof TextMessage) {
  -					TextMessage msg = (TextMessage) message;
  -					if (msg.getText().trim().length() > 0) {
  -						this.buffer.append(msg.getText());
  -						count(1);
  -					}
  +				if (message != null) {
  +                    if (message instanceof TextMessage) {
  +                        TextMessage msg = (TextMessage) message;
  +                        if (msg.getText().trim().length() > 0) {
  +                            this.buffer.append(msg.getText());
  +                        }
  +                    } else if (message instanceof ObjectMessage) {
  +                        this.OBJ_RESULT = ((ObjectMessage)message).getObject();
  +                    }
  +                    count(1);
   				}
   			} catch (JMSException e) {
   				log.info("Communication error: " + e.getMessage());
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org