Java ist auch eine Insel

Donnerstag, Februar 08, 2007

JBoss, JMX und JConsole

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.

AddThis Social Bookmark Button