Mit JBoss und den proprietären Annotationen ist es einfach eine JMX zu schreiben. JBoss bringt ein Beispiel gleich mit:
package trail.jmx;
public interface Rechner {
// Attribute
public void setGrowthrate (double g);
public double getGrowthrate ();
// The management method
public double calculate (int start, int end, double saving);
// Life cycle method
public void create () throws Exception;
public void destroy () throws Exception;
}
package trail.jmx;
import java.lang.management.ManagementFactory;
import javax.annotation.PostConstruct;
import org.jboss.annotation.ejb.Management;
import org.jboss.annotation.ejb.Service;
@Service (objectName=“trail:service=calculator“)
@Management(Rechner.class)
public class RechnerMBean implements Rechner {
double growthrate;
public void setGrowthrate (double growthrate) {
this.growthrate = growthrate;
}
public double getGrowthrate () {
return growthrate;
}
public double calculate (int start, int end, double saving) {
double tmp = Math.pow(1. + growthrate / 12., 12. * (end – start) + 1);
return saving * 12. * (tmp – 1) / growthrate;
}
// Lifecycle methods
public void create() throws Exception {
growthrate = 0.08;
System.out.println(„Calculator – Creating“);
}
public void destroy() {
System.out.println(„Calculator – Destroying“);
}
}
In der JMX-Console taucht die Klasse dann auf.
Wenn man das ganze nun mit der JConsole hinbekommen möchte, hat man ein Problem, denn JBoss meldet die Beans nicht am Standard-Container für JMX Beans an, sondern an einem eigenen. Daher benötigt JBoss einen Hinweis, in den Sun-Container zu schreiben. Dazu ist ein Schalter beim Starten (run.bat oder in Eclipse bei der Startkonfiguration) mit anzugeben:
-Djboss.platform.mbeanserver -Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl
Unter Java 5 muss natürlich noch -Dcom.sun.management.jmxremote dazu.
Jetzt ist der „Rechner“ auch in der JConsole.