# Java Management Extensions

Del acrónimo Java Management eXtensions, JMX es la tecnología que define una arquitectura de gestión, la API (Application Programming Interface), los patrones de diseño, y los servicios para la monitorización/administración de aplicaciones basadas en Java. Su versión 1.2 ha sido añadida al J2SE en su versión 5.0.

## Arquitectura JMX

La arquitectura JMX es un modelo de tres capas. El nivel de instrumentación lo definen los requisitos para implementar recursos a manejar por JMX. Puede ser cualquier entidad, como aplicaciones, componentes o dispositivos. El nivel de agente es el encargado de controlar las entidades de la capa de instrumentación. El nivel de gestión o adaptación es el encargado de adaptar las entidades externas que interactúan a nivel de agente.

### Niveles

* Nivel de Instrumentación
* Nivel de Agente
* Nivel de Gestión o adaptación
Nos permite implementar una gestión fácil e instantánea para los objetos Java. En la arquitectura, los recursos se gestionan mediante Mbeans. Los MBeans son objetos java similares conceptualmente a los javaBeans y son los encargados de representar cada una de las entidades. Un modo sencillo de ver los MBeans es pensar que son aquellas aplicaciones que se encargan de monitorizar otras entidades.
Cualquier entidad que necesite ser gestionada, en un futuro, puede ser instrumentado por medio de MBeans. Estos nos brindan la instrumentación de los recursos gestionados de forma estándar y para ser incorporados en cualquier agente JMX. Pueden ser cargados o eliminados dinámicamente según sea necesario, lo que nos brinda una gran flexibilidad.

## Tipos de MBeans
### Standard MBean

La forma más sencilla de instrumentar un recurso. Es similar al modelo de componentes de JavaBeans y con una interface de gestión estática. Posee métodos para obtener y asignar valores a los atributos que se definen en el objeto implementado. Los métodos que expone el objeto son determinados en el momento de la compilación del mismo y no pueden ser modificados en tiempo de ejecución.

### Dynamic MBean

Posee métodos genéricos para obtener, asignar valores e invocar callback. Los métodos toman entre sus argumentos el nombre del atributo cuyo valor se desea obtener, el nombre del atributo y el valor que se le quiere asignar.

### Model MBean

Constituye un MBean dinámico, genérico y configurable que se utiliza para instrumentar recursos en tiempo de ejecución.

### Open MBean

Este tipo de MBean permite utilizar objetos gestionados que son descubiertos en tiempo de ejecución.

## Modelo de Capa
### Nivel de Agente

Está representado por el Servidor de MBean donde los diferentes MBean se registran, gestiona un conjunto de agentes representado por los MBeans. El Servidor MBeans implementa la interfaz MBeanServer que interactúa con los MBean.
Los mensajes emitidos por los MBeans pueden ser enviados mediante eventos al gestor o tratados dentro del agente.

### Nivel de Gestión

Nos permite implementar adaptadores en el Servidor JMX hacia otros protocolos de gestión e implementar MBeans que interaccionen con otros protocolos de gestión exponiendo sus atributos como un recurso gestionable. Los adaptadores de protocolos y conectores permiten que las aplicaciones de gestión accedan al Servidor JMX y manipule los MBeans que lo forman. Crean un puente entre las tecnologías existentes y las futuras. JMX incluye entre sus API, una API para la gestión SNMP y una API para la gestión WBEM..

### Nivel de Implementación

Un recurso es cualquier entidad ya sea de software o de hardware que se pueda gestionar a través de la red, siendo accedido a través de su interfaz de gestión. La implementación de un recurso significa crear un objeto Java que represente la interfaz de gestión y que sigue el modelo de componentes de JavaBeans. Llamamos a estos objetos MBean.

## Servidor MBean

El Servidor constituye un entorno que permite a los gestores interactuar con los MBeans, entre los que se encuentra:
* Localización
* Filtrado por nombre o expresión
* Monitorización de atributos
* Descubrir otros agentes
* Establecer relaciones entre MBeans
* Carga dinámica
* Programación de tareas
* Definir jerarquías de agentes

## Adaptadores

Las aplicaciones de gestión acceden a los MBeans remotamente a través del Servidor MBean. También el acceso puede realizarse a través de los conectores de adaptadores de protocolos.
Las diferentes aplicaciones de gestión utilizan los conectores para interactuar con los agentes. La biblioteca JDMK que nos brinda soporta a conectores para RMI, HTTP y HTTPS.
Mientras que los adaptadores de protocolos se utilizan cuando se quiere integrar el recurso representado por MBean en un entorno de gestión ya existente. JDMK ofrece un conjunto de herramientas que facilitan la creación de agentes SNMP y la integración de la gestión SNMP en la arquitectura JMX.