Author: sebb Date: Sat Jun 20 02:14:43 2009 New Revision: 786747 URL: http://svn.apache.org/viewvc?rev=786747&view=rev Log: Bug 47394 - It should be easier to plug a custom SampleSender in jmeter
Modified: jakarta/jmeter/trunk/bin/jmeter.properties jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml Modified: jakarta/jmeter/trunk/bin/jmeter.properties URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/bin/jmeter.properties?rev=786747&r1=786746&r2=786747&view=diff ============================================================================== --- jakarta/jmeter/trunk/bin/jmeter.properties (original) +++ jakarta/jmeter/trunk/bin/jmeter.properties Sat Jun 20 02:14:43 2009 @@ -459,11 +459,13 @@ # Batch returns samples in batches # Statistical returns sample stats # hold_samples was originally defined as a separate property, -# but can now also be defined using remote.mode +# but can now also be defined using mode=Hold +# mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender #mode=Standard #mode=Batch #mode=Hold #mode=Statistical +#mode=org.example.load.MySampleSender #hold_samples=true #num_sample_threshold=100 #time_threshold=60000 Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java?rev=786747&r1=786746&r2=786747&view=diff ============================================================================== --- jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java (original) +++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/samplers/SampleSenderFactory.java Sat Jun 20 02:14:43 2009 @@ -18,10 +18,30 @@ package org.apache.jmeter.samplers; +import java.lang.reflect.Constructor; + import org.apache.jmeter.util.JMeterUtils; -import org.apache.jmeter.samplers.StatisticalSampleSender; +import org.apache.jorphan.logging.LoggingManager; +import org.apache.log.Logger; public class SampleSenderFactory { + + private static final Logger log = LoggingManager.getLoggerForClass(); + + private static final String MODE_STANDARD = "Standard"; // $NON-NLS-1$ + + private static final String MODE_HOLD = "Hold"; // $NON-NLS-1$ + + private static final String MODE_BATCH = "Batch"; // $NON-NLS-1$ + + private static final String MODE_STATISTICAL = "Statistical"; // $NON-NLS-1$ + + // Support original property name + private static final boolean holdSamples = JMeterUtils.getPropDefault("hold_samples", false); // $NON-NLS-1$ + + // Extended property name + private static final String type = JMeterUtils.getPropDefault("mode", MODE_STANDARD); // $NON-NLS-1$ + /** * Checks for the Jmeter property mode and returns the required class. * @@ -30,24 +50,33 @@ * hold_samples until end of test or batch samples. */ static SampleSender getInstance(RemoteSampleListener listener) { - // Support original property name - boolean holdSamples = JMeterUtils.getPropDefault("hold_samples", false); - - // Extended property name - String type = JMeterUtils.getPropDefault("mode", "Standard"); - - if (holdSamples || type.equalsIgnoreCase("Hold")) { + if (holdSamples || type.equalsIgnoreCase(MODE_HOLD)) { HoldSampleSender h = new HoldSampleSender(listener); return h; - } else if (type.equalsIgnoreCase("Batch")) { + } else if (type.equalsIgnoreCase(MODE_BATCH)) { BatchSampleSender b = new BatchSampleSender(listener); return b; - } else if (type.equalsIgnoreCase("Statistical")) { + } else if (type.equalsIgnoreCase(MODE_STATISTICAL)) { StatisticalSampleSender s = new StatisticalSampleSender(listener); return s; - } else { + } else if (type.equalsIgnoreCase(MODE_STANDARD)) { StandardSampleSender s = new StandardSampleSender(listener); return s; + } else { + // should be a user provided class name + SampleSender s = null; + try { + Class clazz = Class.forName(type); + Constructor cons = clazz.getConstructor(new Class[] {RemoteSampleListener.class}); + s = (SampleSender) cons.newInstance(new Object [] {listener}); + } catch (Exception e) { + // houston we have a problem !! + log.error("Unable to create a sample sender from class "+type); + throw new IllegalArgumentException(e.getMessage()); + } + + return s; } + } } Modified: jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml?rev=786747&r1=786746&r2=786747&view=diff ============================================================================== --- jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml (original) +++ jakarta/jmeter/trunk/xdocs/usermanual/remote-test.xml Sat Jun 20 02:14:43 2009 @@ -216,6 +216,8 @@ </ul> Other fields that vary between samples are lost. </li> + <li>Custom implementation : set the mode parameter to your custom sample sender class name + </li> </ul> </ul> <p>The following properties apply to the Batch and Statistical modes:</p> --------------------------------------------------------------------- To unsubscribe, e-mail: jmeter-dev-unsubscr...@jakarta.apache.org For additional commands, e-mail: jmeter-dev-h...@jakarta.apache.org