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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to