After I attended the Groovy/Grails Experience in February this year, I realize that the Groovy builder pattern can be used to façade many other API’s (not just swing). So, I decide to create, yet another builder, for the JMX API and here it is!
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
Suppose you have a class called Greeter (on your class path) that prints out greeting to a specified person in a specified language, so the class may look like this
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()
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")
}
You use the JmxBuilder() class to capture meta data about your class instance that will be made available at runtime for management.
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.

