Simple JMX Java Library to help with the publishing of objects using JMX and the web
This package provides some Java classes to help with the publishing of objects using JMX.
Enjoy. Gray Watson
Here's a little sample program to help you get started.
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.
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 packages are published via
<dependency>
<groupId>com.j256.simplejmx</groupId>
<artifactId>simplejmx</artifactId>
<version>2.2</version>
</dependency>
See the ChangeLog.txt file.