Skip to content

Latest commit

 

History

History
92 lines (68 loc) · 4.1 KB

README.md

File metadata and controls

92 lines (68 loc) · 4.1 KB

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 ? 1000 : 1);
	}
	
	// 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";
	}
}

Maven Configuration

Maven packages are published via Maven Central

<dependency>
	<groupId>com.j256.simplejmx</groupId>
	<artifactId>simplejmx</artifactId>
	<version>2.2</version>
</dependency>

ChangeLog Release Notes

See the ChangeLog.txt file.