Java JMX con Spring y Tomcat – Hello Word Example

By | 01/17/2013

Java Management eXtensions nos permite monitorear y manejar servicios sobre aplicaciones basadas en Java.

Configurando Spring

 
<!-- Usamos MetadataMBeanInfoAssembler y lo configuramos con una instancia 
de la clase AnnotationJmxAttributeSource que se le pasa a MBeanExporter a través 
de la propiedad 'assembler'. Con esto podemos utilizar y exponer nuestros bean con Anotaciones. -->
 
<!-- Expose all JMX beans  -->
<bean id="exporter" class="org.springframework.jmx.export.MBeanExporter">
<property name="assembler" ref="assembler"/>
<property name="namingStrategy" ref="namingStrategy"/>
<property name="autodetect" value="true"/>
</bean>
 
<bean id="jmxAttributeSource"
class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/>
<bean id="assembler"
class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler">
<property name="attributeSource" ref="jmxAttributeSource"/>
</bean>
 
<bean id="namingStrategy"
class="org.springframework.jmx.export.naming.MetadataNamingStrategy">
<property name="attributeSource" ref="jmxAttributeSource"/>
</bean>
 
<!-- Finish JMX Configuration -->

Puedes simplificar todo o anterior, desde el comentario ‘Expose all JMX beans’ en adelante utilizando este elemento en tu configuración.

<context:mbean-export />

Con esta linea no es necesario la configuracion namingStrategy, assembler y attributeSource, y siempre se utilzará las anotaciones de Java basada en metadatos, detectandose automáticamente los bean a exponer en JMX.

Anotando la Clase a exponer

Para marcar un bean a fin de exponerlo en JMX, demos anotar la clase  con la anotación ManagedResource.
Cada operación que queramos exponer lo anotamos con ManagedOperation y cada atributo con ManagedAttribute (esto es valido para los getter y setter)

import org.springframework.jmx.export.annotation.ManagedAttribute;
 
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.stereotype.Component;
 
@Component("helloJmx")
@ManagedResource(objectName="gp.jmx:name=HelloJmx", description="This is a Hello JMX")
public class HelloJmx implements IHelloJmx {
 
private String hiGreeting;
 
@Override
@ManagedAttribute
public void setValue(String s){
this.hiGreeting = s;
}
 
@Override
@ManagedAttribute
public String getValue(){
return this.hiGreeting;
}
 
@Override
@ManagedOperation
public String addToHello(String s){
return this.hiGreeting+= s;
}
 
@Override
public void dontExposeOnJmx() {
throw new RuntimeException();
}
 
}

Activando JMX en Tomcat:

Agrega en el arranque de Tomcat estos parametros.
Aqui no usamos nada de autenticación pero debes considerar agregar autenticación esto en tu aplicación.

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8086
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

Ahora en la linea de comandos corres 

jconsole localhost:8086

JMX con Spring y Tomcat

Descargar Fuentes con este ejemplo: spring_jmx.zip

Compartir esto:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *