Skip to content
Branch: master
Go to file
Code

Latest commit

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Simple Java JMX

This package provides some Java classes to help with the publishing of objects using JMX.

Enjoy, Gray Watson

Little Sample Program

Here's a little sample program to help you get started.

Publishing JMX Beans over HTTP for Web Browser

SimpleJMX also contains a simple web-server handler that uses Jetty so that you can access JMX information from a web browser or other web client using the JmxWebServer class. To use this class you need to provide a Jetty version in your dependency list or classpath. You just need to add the following code to your application startup.

// start a web server for exposing jmx beans listing on port 8080
JmxWebServer jmxWebServer = new JmxWebServer(8080);
jmxWebServer.start();

For more details, see the web server sample program.

Sample Jmx Code

First we create a server either as a wrapper around the default mbean server running in the JVM or one that listens on it's own port.

// create a new JMX server listening on a specific port
JmxServer jmxServer = new JmxServer(JMX_PORT);
// NOTE: you could also use the platform mbean server:
// JmxServer jmxServer = new JmxServer(ManagementFactory.getPlatformMBeanServer());

// start the server
jmxServer.start();

// create the object we will be exposing with JMX
RuntimeCounter counter = new RuntimeCounter();
// register our object
jmxServer.register(counter);
...
// shutdown our server
jmxServer.stop();
...

Here's the class we are publishing via the server. The class is annotated with @JmxResource to define the bean name. The fields and get/set methods are annotated to show attributes (@JmxAttributeField, @JmxAttributeMethod). Other methods can be annotated with @JmxOperation to expose them as operations.

@JmxResource(domainName = "j256")
public class RuntimeCounter {
	private long startMillis = System.currentTimeMillis();
	
	// we can annotate fields directly to be published, isReadible defaults to true
	@JmxAttributeField(description = "Show runtime in seconds", isWritable = true)
	private boolean showSeconds;
	
	// we can annotate getter methods
	@JmxAttributeMethod(description = "Run time in seconds or milliseconds")
	public long getRunTime() {
		long diffMillis = System.currentTimeMillis() - startMillis;
		return diffMillis / (showSeconds ? 1 : 1000);
	}
	
	// this is an operation that shows up in the operations tab in jconsole.
	@JmxOperation(description = "Reset our start time to the current millis")
	public String resetStartTime() {
		startMillis = System.currentTimeMillis();
		return "Timer has been reset to current millis";
	}
}

ChangeLog Release Notes

See the ChangeLog.txt file.

About

Simple JMX Java Library to help with the publishing of objects using JMX and the web

Topics

Resources

License

Languages

You can’t perform that action at this time.