Table of Contents
This small project enables to export your classes easily through JMX.
- Issues: https://github.com/mathieucarbou/jmx/issues
- OSGI Compliant:
- Build Status:
Releases
Available in Maven Central Repository: http://repo1.maven.org/maven2/com/mycila/jmx/
Snapshots
Available in OSS Repository: https://oss.sonatype.org/content/repositories/snapshots/com/mycila/jmx/
Maven dependency
<dependency>
<groupId>com.mycila</groupId>
<artifactId>mycila-jmx</artifactId>
<version>X.Y.ga</version>
</dependency>
Maven sites
@JmxBean
: mark a class to be exported to JMX and set its name@JmxMethod
: export a method@JmxProperty
: export a bean property (getter/setter) and specify its access writes@JmxField
: export a field to JMX and specify its access writes@JmxMetric
: export a JMX metric, its name and unit (counter or gauge)
A bean can implement the interface JmxSelfNaming
to return the its ObjectName
Supposing you have annotated your class like this
@JmxBean("com.company:type=MyService,name=main")
public final class MyService {
private String name;
@JmxField
private int internalField = 10;
@JmxProperty
public String getName() { return name; }
public void setName(String name) { this.name = name; }
@JmxMethod(parameters = {@JmxParam(value = "number", description = "put a big number please !")})
void increment(int n) {
internalField += n;
}
}
Then create an exporter which will be able to export your beans:
MycilaJmxExporter exporter = new MycilaJmxExporter();
exporter.setMetadataAssembler(getMetadataAssembler());
exporter.setEnsureUnique(true);
And export your service:
exporter.register(myServiceInstance)
JmxMetadataAssembler
are implementations which describes the exportable members of a class and how to export them. Several implementation exist:
PublicMetadataAssembler
: when beans are registered, only public methods, properties and fields are exportedAnnotationMetadataAssembler
: when beans are registered, only annotated methods, properties and fields are exportedCustomMetadataAssembler
: you can specify which members are exported. This class can be useful if you only need to export just some members and if you do not have access to the source code of the class to export
Example
CustomMetadataAssembler assembler = new CustomMetadataAssembler()
.addAttribute(MyClass.class, "myRWField")
.addProperty(MyClass.class, "myProperty")
.addOperation(MyClass.class, "goMethod");
You will be able to find other examples in the Unit Tests
When using the service discovery feature of [Mycile Guice] (http://mycila.github.io/guice/) (Google Guice extensions) JMX annoteated beans are automatically discovered and exported
- [VisualVM] (http://visualvm.java.net/): Connects to a Java process and manage exported JMX classes
- [MX4J] (http://mx4j.sourceforge.net/): Web interface yo manage JMX beans