JMX. La guía perdida. Parte 5. JConsole, Weblogic 12c y Glassfish 5.

Por Isaac Ruiz.
Publicado en Junio 2018

Revisado por Juan Pablo Guisado



Indice


JMX. La guía perdida. Parte 5. JConsole, Weblogic 12c y Glassfish 5.
Alcance.
Requerimientos.
Introducción.
JConsole y WLS 12c.
Validando dominio.
Archivos necesarios.
Servidores disponibles.
Domain Runtime Server
Runtime Server
Edit Server.
Servidor DomainRuntime
Explorando MBeans
JConsole y Glassfish.
Validación.
Para conocer la ubicación del log.
Ejecución.
Explorando MBeans.
Conclusión.
Enlaces.



Alcance.


El presente documento detalla cómo utilizar JConsole para conectarse a un servidor de aplicaciones y explorar sus MBeans. Se muestran como ejemplo conexiones con los siguientes servidores de aplicaciones:

  • Weblogic 12c.
  • Glassfish v5.

Este documento es la 5ª parte de una serie de artículos sobre JMX, puedes consultar los anteriores aquí:

En el primer artículo de la serie se hace un repaso por las bases de la tecnología JMX, si aún no estás familiarizado con JMX, es recomendable leerlo.




Requerimientos.


El presente documento asume que el lector tiene cierta experiencia administrando algún servidor de aplicaciones java, como puede ser Weblogic, Glassfish, Wildfly, WebSphere, etc.  Conoce un sistema operativo a nivel de usuario y sabe ejecutar tareas a vía CLI.

En este documento, se asume que se tiene disponible un dominio WLS 12c.

Si aún no tienes instalado un dominio puedes apoyarte en alguno de estos documentos:


También se asume que tienes disponible una instalación de Glassfish versión 5 (el contenido también aplica a la versión 4), puedes seguir esta pequeña guía para realizar la instalación.




Introducción.


Ya estamos más familiarizados con JMX, ya sabemos que podemos acceder a cualquier proceso java de manera local o remota para poder administrar los MBeans que tenga disponibles y que estos se exponen a través de un servidor de MBeans; todo proceso java tiene uno por default.

Ahora aprenderemos a utilizar JConsole para conectarnos a nuestro servidor de aplicaciones java favorito y administrar así sus MBeans, en esta ocasión mostraremos como conectarnos a un WLS 12c y un Glassfish v5.

En los dos ejemplos asumiremos que queremos acceder de manera remota a cada servidor de aplicaciones.




JConsole y WLS 12c.


Iniciamos con Weblogic Server 12c.

Lo primero que debemos realizar es la validación del dominio, y de su configuración.

Debemos tener estos valores a la mano:

Campo

Valor

URL de Administración

http://10.0.1.29:7001/console/

HOST

10.0.1.29

PUERTO

7001

USER

weblogic

PASSWORD

welcome1

Los valores son ilustrativos, debes substituirlos por los valores de tu servidor.




Validando dominio.


Validamos primero que los valores que tenemos son los correctos, para ello entraremos a la consola web de nuestro WLS 12c.

http://10.0.1.29:7001/console/



Figura 1. Home de WLS 12c.



Una vez en la consola vamos a validar que el protocolo IIOP esté activado para nuestro servidor Administrador.

Debemos de seleccionar nuestro servidor Administrador para poder acceder a sus detalles de configuración.

Servidores->AdminServer


Figura 2. Listado de servidores.



Ya la pantalla de configuración del AdminServer seleccionamos:

Protocolos->IIOP

Y validamos de que esté activo.


Figura 3. Protocolo IIOP activado.



El dominio está funcionando y configurado correctamente.




Archivos necesarios.


Ya en la parte 2 de esta serie vimos cómo realizar una conexión remota a un WLS 12c utilizando código, para realizar la conexión de manera remota requerimos un jar que contiene las clases necesarias para facilitar la conexión.

El jar es: wlsjmxclient.jar

Con JConsole no será distinto, seguimos requiriendo ese archivo y requeriremos dos más, para ello debemos conocer el valor de las siguientes carpetas:

Campo

Valor.

JDK_HOME

Para conocer la ubicación de un par de jar’s del JDK

ORACLE_HOME

Para recuperar un achivo wlsjmxclient.jar



Veamos la lista.

Archivo

Ubicación

wljmxclient.jar

(Máquina con WLS12c)$ORACLE_HOME/wlserver/server/lib/

tools.jar

(Máquina local)$JDK_HOME/lib/

jconsole.jar

(Máquina local)$JDK_HOME/lib/




Figura 4. Conexión remota con JConsole hacia un WLS 12c.



Haremos una invocación de JConsole desde la máquina local, agregando esos tres jars a la línea de arranque de JConsole. Será necesario que copies el archivo: wlsjmxclient.jar a la maquina desde dónde quieres conectarte.

Asumiendo que nuestro JDK_HOME es /u01/oracle/jdk1.8.0_77/, la línea para invocar JConsole es:


jconsole 
-J-
Djava.class.path=/u01/oracle/jdk1.8.0_77/lib/jconsole.jar:
/u01/oracle/jdk1.8.0_77/lib/tools.jar:/path/local/al/archivo/wljmxclient.jar 
-J-Djmx.remote.protocol.provider.pkgs=weblogic.management.remote  -debug
      

Puedes ver el gist aquí (https://gist.github.com/rugi/68a763fb83d531bb2be3121099ed0cf8).

La línea anterior se ejecuta en la maquina desde donde nos queremos conectar a nuestro WLS 12c.

Con esto ya podemos conectarnos al WLS, lo único que nos hace falta es elegir a que servidor de MBeans nos vamos a conectar.




Servidores disponibles.


Recordemos que el WLS expone tres servidores JMX.

Veamos un resumen de ellos.

Domain Runtime Server

MBean Server

Domain Runtime MBean Server

Nombre JNDI

weblogic.management.mbeanservers.domainruntime

Objetivo

Proporciona acceso a los MBeans de servicios del dominio completo, esto incluye aplicaciones desplegadas, servidores JMS, dataSources, etc.
Es el punto de acceso para acceder de manera jerárquica toda la información del dominio, es decir, de todos los servidores que conforman el dominio.




Runtime Server

MBean Server

Runtime MBean Server

Nombre JNDI

weblogic.management.mbeanservers.runtime

Objetivo

Proporciona acceso a MBeans de tiempo de ejecución y puede activarlos dentro de la configuración.




Edit Server

MBean Server

Edit MBean Server

Nombre JNDI

weblogic.management.mbeanservers.edit

Objetivo

Proporciona el punto de entrada para administrar la
Configuración del dominio.



Nos conectaremos al DomainRuntime Server.



Servidor DomainRuntime


Al igual que en el ejemplo de la parte 2, nos conectaremos al servidor: domainruntime.

La cadena de conexión es:


  service:jmx:rmi:///jndi/iiop://HOST:PORT/weblogic.management.mbeanservers.domainruntime
  



Para nuestro ejemplo será:



  service:jmx:rmi:///jndi/iiop://10.0.1.29:7001/weblogic.management.mbeanservers.domainruntime 
      



Estamos usando la IP y Puerto de nuestro servidor de administración, indicamos también las credenciales.


Figura 5. Datos de conexión para nuestro servidor WLS12c.



Una vez realizada la conexión debemos poder ver la siguiente pantalla que ya conocemos.


Figura 6. JConsole conectado a WLS. DomainRuntimeServer.


Listo, hemos accedido al servidor domainruntime de nuestro WLS 12c.



Explorando MBeanS

Veamos un MBean que ya conocemos, este MBean nos proporciona entre muchas otras cosas, la información de los servidores disponibles en el dominio:

Su ObjectName es:

com.bea:Name=DomainRuntimeService,Type=  
weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean
  

El dominio (todo lo que está antes de los dos puntos) entonces es:

com.bea


Las propiedades (pares llave=valor separadas con coma después de los dos puntos) son dos:

Name

DomainRuntimeService

Type

weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean



Con el dominio y la propiedad Name podemos encontrar este MBean en JConsole.

El árbol principal de MBeans en JConsole muestra en su primer nivel los dominios disponibles, por ello será muy sencillo encontrar el dominio que buscamos.


Figura 7. Árbol de MBeans, la rama principal es el dominio.



Ya tenemos ubicado el dominio, abrimos la hoja  y ahora vamos a buscar por el Name a nuestro MBean.


Figura 8. DomainRuntimeService MBean.



Listo, hemos encontrado nuestro MBean en JConsole, veámoslo a detalle:


Figura 9. DomainRuntimeService MBean. Detalle.




Aquí puedes ver más información de este MBean.

https://docs.oracle.com/middleware/1221/wls/WLAPI/weblogic/management/mbeanservers/domainruntime/

DomainRuntimeServiceMBean.html

Felicitaciones, nos hemos conectado vía JConsole a un servidor WLS 12c. Prueba ahora conectarte a los otros dos servidores de MBeans y observa las diferencias que tienen.

Ahora haremos algo similar con Glassfish.




JConsole y Glassfish.


Glassfish es la implementación de referencia para JEE (ahora llamado Jakarta EE), actualmente se encuentra en la versión 5 y es uno de los servidores de aplicaciones java más utilizados.

Glassfish sólo expone un servidor JMX y lo mejor de todo, una vez iniciado el servidor, se encuentra listo para ser utilizado.

Al igual que con WLS 12c, queremos conectarnos de manera remota usando JConsole.


Figura 10. Accediendo de manera remota a Glassfish v5.




Validación.


Lo primero que vamos a hacer es validar que nuestro servidor Galssfish se encuentra funcionando adecuadamente.


      http://10.0.1.29:4848/common/index.jsf 
      

La IP mostrada es con fines ilustrativos, debes substituirla con la IP de tu servidor.


Figura 11. Glasshfish. Pantalla principal.

Una vez que ya validamos que el servidor está funcionando adecuadamente, revisaremos el log para conocer la cadena de conexión al servidor de MBeans de nuestro Glassfish.



Para conocer la ubicación del log.

Al momento de iniciar Glassfish, la salida a consola nos indica la ubicación del log principal.


%> .\asadmin start-domain
Waiting for domain1 to start ........................
Successfully started the domain : domain1
domain  Location: \opt\glassfish-5.0\domains\domain1
Log File: \opt\glassfish-5.0\domains\domain1\logs\server.log
Admin Port: 4848
Command start-domain executed successfully.
    


Abriremos el archivo server.log para conocer la cadena de conexión al servidor de MBeans de nuestro Glassfish.

Buscamos la parte del log que indica el inicio del servidor, y en particular buscamos un mensaje similar al siguiente:


[2018-03-05T09:24:37.602-0600] [glassfish 5.0] [INFO] [NCLS-JMX-00008] 
[javax.enterprise.system.jmx] [tid: _ThreadID=146 _ThreadName=RMI TCP 
Connection(6)-xxx.xxx.xx.x] [timeMillis: 1520263477602] [levelValue: 800] [[
Booting AMX Listener, connection made for service:jmx:rmi:// 
10.0.1.29:8686/jndi/rmi://10.0.1.29:8686/jmxrmi, now booting AMX MBeans]]
    


La cadena de conexión es esta:


service:jmx:rmi://10.0.1.29:8686/jndi/rmi://10.0.1.29:8686/jmxrmi
    


Esta será el valor que pondremos en nuestro JConsole al abrirlo.




Ejecución.


Abrimos JConsole y le pasamos el valor de nuestra cadena de conexión.

En este ejemplo estamos tratando de conectarnos a un servidor Glassfish con la configuración por default, por lo tanto, no requerimos pasarle usuario y password a la pantalla de conexión del JConsole.

Si tu dominio Glassfish sí tiene acceso vía usuario y password, es momento de colocar esos valores.


Figura 12. JConsole. Cadena de conexión a Glassfish v5.



Una vez conectado, podemos ya ver la pantalla principal con el resumen de nuestro Glassfish.


Figura 13. Pantalla de resumen con JConsole.





Explorando MBeans.


Los principales MBeans de Glassfish tienen como nombre de dominio: amx.

Amx es el acrónimo para Application Server Management Extension, es el mecanismo por medio del cual Glasshfish expone sus MBean para configuración y monitoreo.


Figura 14. Dominio AMX en JConsole.



EL listado de MBeans es muy grande, veamos un fragmento de la lista:


Figura 15. Contenido del dominio amx. Detalle.



Exploraremos un par de MBeans, los relacionados a los dataSources. Cuando iniciamos el servidor Glassfish, automáticamente se ponen disponibles dos dataSources (que a su vez habilitan dos pools de conexiones).

Estos se pueden ver aquí:


Figura 16. Recursos JDBC.


Podemos localizar los MBeans en la siguiente ruta con JConsole.


Figura 17. MBeans JDBC en JConsole.


Listo.

Ahora ya sabemos cómo usar JConsole para conectarnos a un servidor Weblogic o a un Glassfish.

El procedimiento es similar para el resto de los servidores de aplicaciones.




Conclusión.


Todo servidor de aplicaciones java explota las bondades de JMX, por ello es sencillo conectarse con JConsole. Utilizar JConsole para explorar los MBeans de nuestro servidor de aplicaciones java es una manera sencilla y accesible, ya podemos monitorear procesos java remotos y locales.

En próximas entregas conocemos más características de JMX, las notificaciones es una de ellas.




Enlaces.





Isaac Ruiz Guerra (@rugi), es programador Java yConsultor TI. Especializado en integración de sistemas, fundamentalmente relacionados con el sector financiero. Actualmente forma parte del equipo de S&P Solutions. Escribe en su blog personal xhubacubi.blogspot.com, pero también participa y pertenece a www.javahispano.org y a www.javamexico.org

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.