Introducción básica a JMX

1. Introducción

El marco de Java Management Extensions (JMX) se introdujo en Java 1.5 y ha encontrado una amplia aceptación en la comunidad de desarrolladores de Java desde sus inicios.

Proporciona una infraestructura fácilmente configurable, escalable, confiable y más o menos amigable para administrar la aplicación Java de manera local o remota. El marco introduce el concepto de MBeans para la gestión de aplicaciones en tiempo real.

Este artículo es una guía paso a paso para principiantes para crear y configurar un MBean básico y administrarlo a través de JConsole.

2. Arquitectura JMX

La arquitectura JMX sigue un enfoque de tres capas:

  1. Capa de instrumentación: MBeans registrados con el agente JMX a través de los cuales se gestionan los recursos
  2. Capa de agente JMX: el componente central (MbeanServer) que mantiene el registro de MBeans administrados y proporciona una interfaz para acceder a ellos
  3. Capa de administración remota: generalmente una herramienta del lado del cliente como JConsole

3. Creación de una clase MBean

Al crear MBeans, hay un patrón de diseño particular al que debemos cumplir. La clase modelo MBean DEBE implementar una interfaz con el siguiente nombre: “nombre de clase modelo” más MBean .

Así que definamos nuestra interfaz MBean y la clase que la implementa:

public interface GameMBean { public void playFootball(String clubName); public String getPlayerName(); public void setPlayerName(String playerName); } public class Game implements GameMBean { private String playerName; @Override public void playFootball(String clubName) { System.out.println( this.playerName + " playing football for " + clubName); } @Override public String getPlayerName() { System.out.println("Return playerName " + this.playerName); return playerName; } @Override public void setPlayerName(String playerName) { System.out.println("Set playerName to value " + playerName); this.playerName = playerName; } }

La clase Game anula un método playFootball () de la interfaz principal. Aparte de esto, la clase tiene una variable miembro playerName y getter / setter para ella.

Tenga en cuenta que getter / setter también se declaran en la interfaz principal.

4. Instrumentación con el agente JMX

Los agentes JMX son las entidades que se ejecutan de forma local o remota y que proporcionan el acceso de gestión a los MBeans registrados con ellos.

Usemos PlatformMbeanServer , el componente principal del agente JMX, y registremos Game MBean con él.

Usaremos otra entidad - ObjectNam e - para registrar la instancia de la clase Game con PlatformMbeanServer ; esta es una cadena que consta de dos partes:

  • dominio : puede ser una cadena arbitraria, pero de acuerdo con las convenciones de nomenclatura de MBean, debe tener un nombre de paquete Java (evita conflictos de nomenclatura)
  • clave: una lista de pares " clave = valor " separados por una coma

En este ejemplo, usaremos: “com.baledung.tutorial: type = basic, name = game”.

Vamos a llegar al MBeanServer de la clase de fábrica java.lang.management.ManagementFactory.

Luego registraremos el modelo MBean usando el ObjectName creado :

try { ObjectName objectName = new ObjectName("com.baeldung.tutorial:type=basic,name=game"); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); server.registerMBean(new Game(), objectName); } catch (MalformedObjectNameException | InstanceAlreadyExistsException | MBeanRegistrationException | NotCompliantMBeanException e) { // handle exceptions }

Por último, sólo para ser capaz de probarlo - añadiremos un tiempo bucle para evitar que la aplicación de terminación antes de poder acceder a los MBean través JConsole:

while (true) { }

5. Acceder al MBean

5.1. Conexión desde el lado del cliente

  1. Inicie la aplicación en Eclipse
  2. Inicie Jconsole (ubicado en la carpeta bin del directorio de instalación de JDK de su máquina)
  3. Conexión -> nueva conexión -> seleccione el proceso Java local de este tutorial -> Conectar -> Advertencia de conexión SSl insegura -> Continuar con conexión insegura
  4. Una vez establecida la conexión, haga clic en la pestaña MBeans superior derecha del panel Ver
  5. La lista de MBeans registrados aparecerá en la columna de la izquierda.
  6. Haga clic en com.baeldung.tutorial -> básico -> juego
  7. Bajo el juego, habrá dos filas, una para atributos y operaciones.

Aquí hay un vistazo rápido a la parte del proceso de JConsole:

5.2. Gestionar el MBean

Los conceptos básicos de la gestión MBean son simples:

  • Los atributos se pueden leer o escribir
  • Se pueden invocar métodos y se les pueden proporcionar argumentos o valores devueltos de ellos

Veamos qué significa eso para el Game MBean en la práctica:

  • atributo : escriba un nuevo valor para el atributo playerName , por ejemplo, "Messi" y haga clic en el botón Actualizar

El siguiente registro aparecerá en la consola de Eclipse:

Establecer playerName para valorar a Messi

  • operaciones : escriba un valor para el argumento String del método playFootBall () - por ejemplo, “Barcelona” y haga clic en el botón de método. Aparecerá una ventana de alerta para una invocación exitosa .

El siguiente registro aparecerá en la consola de eclipse:

Messi jugando al fútbol en el Barcelona

6. Conclusión

Este tutorial abordó los conceptos básicos de la configuración de una aplicación habilitada para JMX mediante el uso de MBeans. Además, discutió sobre el uso de una herramienta típica del lado del cliente como JConsole para administrar el MBean instrumentado.

El dominio de la tecnología JMX es muy amplio en alcance y alcance. Este tutorial puede considerarse un paso para principiantes hacia eso.

El código fuente de este tutorial se puede encontrar en Github.