Controlando el Java Service Wrapper usando JMX

El Java Service Wrapper proporciona un par de interfaces Java Management Extensions (JMX) MBean. (J2SE 5.0 JMX, JavaSE6 JMX) que hacen posible de controlar el Wrapper usando una interfaz JMX. Esta sección describe como configurar y habilitar las JMX de su aplicación, para que los MBeans proporcionados con el Wrapper esten disponibles.

JConsole

El JDK 5.0 de Oracle incluye Java Monitoring and Management Console tool "JConsole" (J2SE 5.0 JConsole) (JavaSE6 JConsole). Por favor visite los vínculos para detalles, la JConsole hace más fácil la conección para configurar las máquinas JVM adecuadamente, monitorear y administrar sus diferentes funciones.

Por razones de seguridad la oportunidad de monitorear remotamente una máquina JVM no esta habilitada por defecto. Para hacerlo es necesario definir la propiedad del sistema com.sun.management.jmxremote (J2SE 5.0) (JavaSE6) cuando se lanze la máquina JVM. Esto es posible usando el Wrapper al especificar un parámetro de la máquina JVM con la siguiente propiedad wrapper.java.additional.<n>.

Ejemplo: (parámetro de la máquina JVM)
wrapper.java.additional.1=-Dcom.sun.management.jmxremote

El Java Service Wrapper por ahora proporciona 2 interfaces MBean.

La primer inferfaz MBean org.tanukisoftware.wrapper.jmx.WrapperManagerMBean, proporciona información básica sobre el Wrapper y la máquina JVM así como la habilidad para detener y reiniciar la máquina JVM y desencadenar un volcado completo. La registración de este MBean es controlado estableciendo la propiedad del sistema org.tanukisoftware.wrapper.WrapperManager.mbean la cual esta habilitada por defecto.

La segunda interfaz MBean org.tanukisoftware.wrapper.jmx.WrapperManagerTestingMBean, hace posible desencadenar varios estados de fallo como prueba y no debería habilitarse fuera de un entorno de pruebas. El registro de este MBean es controlado al establecer la propiedad del sistema org.tanukisoftware.wrapper.WrapperManager.mbean.testing la cual también esta habilitada por defecto.

Ejemplo: (parámetro de la máquina JVM
wrapper.java.additional.1=-Dcom.sun.management.jmxremote
wrapper.java.additional.2=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=TRUE
wrapper.java.additional.3=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean.testing=false

Los MBeans registrados del Wrapper aparecerán en la pestaña de la interfaz MBean de la JConsole que es parte del paquete org.tanukisoftware.wrapper.

JBoss

El proceso de registro de la interfaz MBean del Java Service Wrapper con JBoss es muy simple. Esto asume que ya ha integrado JBoss con el Java Service Wrapper. Visite la sección de Método de Integración 1 en particular el ejemplo donde se usa JBoss. Esta explicación es hecha pensando que ya ha instalado todos los archivos del Wrapper y han sido guardados como se describe en el ejemplo de la integración usando JBoss. Especialmente el archivo wrapper.jar se espera este localizado en el directorio ${jboss.home}/lib.

JBoss le permite registrarse como un MBean, cualquier Objeto que implemente una interfaz cuyo nombre sea el mismo que el de la clase y que sea "MBean." El Java Service Wrapper proporciona dos clases WrapperManager y WrapperManagerTesting en el paquete org.tanukisoftware.wrapper.jmx

La primer clase WrapperManager proporciona varias funciones para reiniciar y detener la máquina JVM asi como otra información sobre el Java Service Wrapper. La segunda clase WrapperManagerTesting, expone algunos métodos que pueden ser útiles en el ciclo de prueba. Y son desglosados en caso de que no desee incluirlos en una versión final del producto. Para detalles por favor visite JavaDocs.

Para registrar los MBeans previamente mencionados, cree un archivo en XML y nombrelo "java-service-wrapper-service.xml" en el directorio ${jboss.home}/server/default/deploy. Este archivo debe contener lo siguiente:

Ejemplo: (java-service-wrapper-service.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server>
<server>
    <classpath archives="wrapper.jar" codebase="../../lib"/>
    
    <mbean code="org.tanukisoftware.wrapper.jmx.WrapperManager"
               name="JavaServiceWrapper:service=WrapperManager"/>
    
    <mbean code="org.tanukisoftware.wrapper.jmx.WrapperManagerTesting"
               name="JavaServiceWrapper:service=WrapperManagerTesting"/>
</server>

Note que la ubicación del archivo wrapper.jar es relativo a la ubicación del archivo XML.

Al guardar el archivo, JBoss debe detectar y registrar sus nuevos MBeans casi de inmediato, no necesita reiniciar JBoss.

Ahora, para utilizar efectivamente los MBeans nuevos, simplemente dirija su navegador a la interfaz de JBoss JMX en http://localhost:8080/jmx-console/. Usted debe notar un agente con dos MBeans JavaServiceWrapper WrapperManager y WrapperManagerTesting. Seleccionando cualquier MBean se presentará con un conjunto de atributos y acciones proporcionados por el MBean.

JBoss 6.*

Por favor asegúrese que ha seguido todos los pasos como se han explicado durante este tutorial.

La versión 6 de JBoss utiliza internamente una Fábrica MBeanServer basado en org.jboss.system.server.jmx.MBeanServerBuilderImpl. Sin embargo, este es incompatible a la máquina JVM MBeanServerBuilder ( javax.management.MBeanServerBuilder) que por defecto esta establecida. Normalmente esto no sería un problema ya que cuando JBoss se ejecuta independientemente la Plataforma MBeanService y todos los MBeans posteriores son creados desde su MBeanServerBuilder. Sin embargo, cuando el Wrapper inicia, se registrarán sus MBeans y por lo tanto la máquina JVM no tiene un MBeanServer en este momento. El Wrapper creará un MBeanServer utilizando por defecto el MBeanServer de la máquina JVM. Cuando JBoss inicia, intenta registrar sus MBeans con el MBeanServer, pero debido a la incompatibilidad con el MBeanServer de la máquina JVM ya predeterminada, JBoss no podrá registrar cualquier MBean.

Para utilizar los MBeans del Wrapper y hacer posible que JBoss registre sus MBeans, la máquina JVM necesita obtener instrucciones de no utilizar la fábrica establecida por defecto sino utilizar la usada por JBoss, que en realidad es sólo una extensión de la predeterminada. Con el fin de que se lleve a cabo, es necesario establecer las siguientes propiedades:

wrapper.java.classpath.N=%JBOSS_HOME%/lib/jboss-logmanager.jar

wrapper.java.additional.N=-Djboss.platform.mbeanserver
wrapper.java.additional.N=-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl
wrapper.java.additional.N=-Djava.util.logging.manager=org.jboss.logmanager.LogManager
wrapper.java.additional.N=-Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl

Asegúrese que N sea un número que aún no este asignado.

En otras palabras esto significa que JBoss debería usar las propiedades de la plataforma MBeanServer para registrar MBeans (-Djboss.platform.mbeanserver). La máquina JVM debería usar org.jboss.system.server.jmx.MBeanServerBuilderImpl como Fábrica de MBeanServer (-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl). Por lo tanto, el Administrador de Registros (Log Manager) de la máquina JVM y de JBoss tienen que ser redefinidas. Debido a que este Administrador de Registros no está en la ruta de clases, también es necesario que se añada ahí.

Después de seguir estos pasos, el Wrapper debería iniciar JBoss 6.* sin ningún problema, con la oportunidad de registrar sus MBeans de la mano con JBoss.

MX4J

To do.(Esta sección esta incompleta y son solo mis comentarios hasta este momento. Si puede enviar algunas sugerencias para dicha sección serán bienvenidas.)

MX4J

Referencia de Implementación de Oracle JMX

To do.(Esta sección esta incompleta y son solo mis comentarios hasta este momento. Si puede enviar algunas sugerencias para dicha sección serán bienvenidas.)

La Referencia de Implementación de Oracle es solo eso una referencia. Hasta el momento no hay un conjunto de pasos especificos para registrar los MBeans del Wrapper. Cada aplicación tiende a crear su propia manera de registrar dichos beans.

Aunque muchas aplicaciones han definido su propia sintaxis, Oracle ha definido etiquetas MLET que significa Management Applet con el propósito de definir MBeans. Dicha sintaxis se describe en JavaDocs para las clases javax.management.loading.MLet (J2SE 1.4) (J2SE 5.0) (JavaSE6) Las siguientes etiquetas de MLET se pueden usar para registrar los MBeans proporcionados con el Wrapper, note que en realidad no son archivos XML.

Etiquetas MLET:
<MLET
    CODE = org.tanukisoftware.wrapper.jmx.WrapperManager
    ARCHIVE = "../lib/wrapper.jar"
    NAME = JavaServiceWrapper:service=WrapperManager>
<MLET
    CODE = org.tanukisoftware.wrapper.jmx.WrapperManagerTesting
    ARCHIVE = "../lib/wrapper.jar"
    NAME = JavaServiceWrapper:service=WrapperManagerTesting>

Para más información visite la página de Oracle "Java Management Extensions (JMX) Home Page".

(Documentación de Java Management Extensions(JMX): J2SE 5.0 / JavaSE6)