http://code.google.com/p/groovy-jmx-builder/
Features
- Ability to expose any class instance for management for both Java and Groovy classes.
- No need to implement a specific management interface.
- Shield developer from complexity of JMX API
- Use familiar Groovy builder pattern
- Exposes attribute, constructors, operations, parameters
public class Greeter {
private String name;
private String language = "en";
// ...
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// ...
public String greet(){
String greet = (String) (langs.containsKey(getLanguage()) ?
langs.get(getLanguage()) : langs.get("en"));
return greet + " " + getName();
}
String greet(String person){
return langs.get(language) + " " + person
}
}
You can use Groovy Jmx Builder to expose an instance of that class for management as an MBean.
def greeter = new Greeter()You use the JmxBuilder() class to capture meta data about your class instance that will be made available at runtime for management.
JmxBuilder jmx = new JmxBuilder()
def server = jmx.export(svr){
bean(greeter){
name("greeterDemo:service=greeting")
desc("This service prints a greeting on console")
attribute(name:"name", desc:"name of person to greet", writable:true)
attribute(name:"language", desc:"the language to use", editable:true)
operation(name:"greet", desc:"Sends greeting to user")
operation(name:"greet", desc:"Send greeting to user"){
parameter(type:"java.lang.String", name:"Person", desc:"The person to send greeting to")
}
}
bean(object:greeter, name:"greeterDemo:service=greeting2")
}
In JConsole, the generated MBean may look like this

Feedbacks
I am interested in feedbacks for this project. So, download it and give it a try. I will be adding more features to it in the future.