Simple Java JMX
This package provides some Java classes to help with the publishing of objects using JMX.
- For more information, visit the SimpleJMX home page.
- Online documentation can be found on the home page. Here are the SimpleJMX Javadocs.
- Code available from the git repository.
- Maven packages are published via
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
<dependency>
<groupId>com.j256.simplejmx</groupId>
<artifactId>simplejmx</artifactId>
<version>1.19</version>
</dependency>
ChangeLog Release Notes
See the ChangeLog.txt file.