You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Building JMeter plug-in with Eclipse

Targetted to Eclipse 3.1 and JMeter 2.1 trunk version.

  1. Check out JMeter trunk from Subversion

2. Set up jmeter-trunk project

  • Let Eclipse internal compiler handle the building of JMeter
  • Source build paths:
  • src/protocol/ftp
  • test/src
  • src/protocol/http
  • src/protocol/java
  • src/protocol/jdbc
  • src/protocol/tcp
  • src/monitor/components
  • src/monitor/model
  • src/components
  • src/core
  • src/examples
  • src/functions
  • src/htmlparser
  • src/jorphan
  • src/junit
  • src/reports
    • Exclude following files from building
      • They have missing dependencies and are related to HTTP security which you are not probably interested in
      • org/apache/jmeter/util/JsseSSLManager.java
      • org/apache/jmeter/util/keystore/DefaultKeyStore.java
      • org/apache/jmeter/util/keystore/PKCS12KeyStore.java
    • Add libraries
      • All jar files under lib/ folder
    • To make logging to Eclipse console work, you need to comment out some code. Read more notes about this below. Class is org.apacha.jmeter.jorphan.logging.LoggingManager
	public static void initializeLogging(Properties properties) {
		if (logManager == null) {
			logManager = new LoggingManager();
		}

		/* This following code caused me to lost 3 hours of working time 
		 * and now I am extra frustrated
		 
		setFormat(properties);

		// Set the top-level defaults
		setTarget(makeWriter(properties.getProperty(LOG_FILE, "jmeter.log"), LOG_FILE));
		setPriority(properties.getProperty(LOG_PRIORITY, "INFO"));

		setLoggingLevels(properties);
		// now set the individual categories (if any)
		 * 
		 */

		setConfig(properties);// Further configuration
		
	}
  • Now Eclipse should build JMeter without errors (stop icons in source tree)

3. Set up your custom plug-in project

  • Create a new Java project
  • Add jmeter-trunk to project dependencies
  • Create bin/ and src/ folders
  • Create jmeter.properties in the bin/
    • This defines where JMeter internal class loader looks for classes
    • It should look like this
search_paths=../../jmeter-trunk/bin/protocol/ftp; \
			 ../../jmeter-trunk/bin/protocol/http; \
			 ../../jmeter-trunk/bin/protocol/java; \
			 ../../jmeter-trunk/bin/protocol/jdbc; \
			 ../../jmeter-trunk/bin/protocol/ldap; \
			 ../../jmeter-trunk/bin/protocol/tcp; \
			 ../../jmeter-trunk/bin/components; \
			 ../../jmeter-trunk/bin/core; \
			 ../../jmeter-trunk/bin/default; \
			 ../../jmeter-trunk/bin/functions; \
			 ../../jmeter-trunk/bin/htmlparser; \
			 ../../jmeter-trunk/bin/jorphan \
			 .

  • Create log4j.conf

4. Setting up a JMeter launcher

  • Set working directory to bin/ in your project
  • Copy lib/ from jmeter-trunk to your plug-in project root

5. Also, you might want to modify class

Notes

I wasted 4 hours trying to get Jorphan logging to work. Jorphan overrides log4j normal configuration mechanism, but does it badly, making log activation impossible.

  1. There is one missing dependency which causes start-up failure with message Caused by: java.lang.NoClassDefFoundError: org/apache/avalon/excalibur/i18n/ResourceManager if you try to configure logger. Get the jar file from http://mirrors.bevc.net/apache/excalibur/excalibur-i18n/binaries/ and place it to lib/

2. Even after placing a correct logging file through jmeter.properties settings you get this

org.apache.avalon.framework.configuration.ConfigurationException: No log targets configured for the root logger.
	at org.apache.avalon.excalibur.logger.LogKitLoggerManager.setupLoggers(LogKitLoggerManager.java:531)
	at org.apache.avalon.excalibur.logger.LogKitLoggerManager.configure(LogKitLoggerManager.java:407)
	at org.apache.jorphan.logging.LoggingManager.setConfig(LoggingManager.java:148)
	at org.apache.jorphan.logging.LoggingManager.initializeLogging(LoggingManager.java:114)
	at org.apache.jmeter.util.JMeterUtils.getProperties(JMeterUtils.java:133)
	at org.apache.jmeter.JMeter.initializeProperties(JMeter.java:327)
	at org.apache.jmeter.JMeter.start(JMeter.java:242)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.jmeter.NewDriver.main(NewDriver.java:161)

My head was already hurting so badly that I didn't want to debug the problem further. The JMeter logging code had several deprecated non-func histroric layers confusing poor debuggers.

---- (warning) End of edit conflict ----

  • No labels