Sei sulla pagina 1di 5

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho ms

Home | Quienes Somos | Empleo |

Pgina 1 de 7

Tutoriales | Contacte

www.adictosaltrabajo.com es el Web de
difusin de conocimiento de
www.autentia.com
Tutorial desarrollado por: Francisco Javier Martnez Pez
Puedes encontrarme en Autentia
Somos expertos en Java/J2EE
Contacta en info@autentia.com
Catlogo de cursos
Descargar este documento en formato PDF MBeansJBoss.pdf

Firma en nuestro libro de Visitas

Master Java J2ee Oracle

Master Protocolo y RRPP

Convert Forms to J2EE

ndago Open Cities

100% alumnos ya trabajan.


Nuevo temario de Struts + J2ME.
www.grupoatrium.com

Trabajo altamente remunerado


Secretarias Direccin y
Presidencia
www.secretariaplus.com

Forms to J2EE Evolution. Realize


true J2EE potential.
www.vgosoftware.com

La primera plataforma Open


Source de administracin
electrnica
www.andago.com

Anuncios Goooooogle

Anunciarse en este sitio

MBeans y JBoss
Los ejemplos de este tutorial estn hechos con el siguiente entorno de desarrollo:
 Jboss Eclipse IDE Milestone 5.
 JDK 1.5
 JBoss 4.0.5 GA

INTRODUCCION.
Una de las caractersticas que est haciendo al servidor de aplicaciones JBoss extenderse como una plaga, es la modularidad. Esta modularidad en
JBoss est construida sobre el API JMX (Java Management Extension).
JMX es un estndar para gestionar y monitorizar gran variedad de componentes, tanto hardware como software desde Java.
JMX define una arquitectura en 3 niveles o capas:
 Capa de Instrumentacin. Incluye todos los recursos gestionables. Este nivel define los requerimientos para implementar un recurso

gestionable mediante JMX. Un recurso gestionable por JMX puede ser cualquier cosa (aplicaciones, dispositivos, etc...). El componente software
que provee la instrumentacin de un determinado recurso es un MBean (Managed Bean). Un MBean es un objeto java que implementa uno de
los interfaces estndar de MBean y sigue los patrones de diseo asociados al mismo. Un MBean expondr todos los mtodos y propiedades que
considere necesarios para un determinado recurso. Por ejemplo, si nuestro MBean expone una impresora, tendr metodos como imprimir,
pausar etc... y propiedades como tamao del papel, estado de la impresora etc.... JMX presenta cuatro tipos de MBeans:
 MBeans estndar (Standar MBeans). Es un java bean simple y definido estticamente. (son los ms comunes dentro de JBoss)
 MBeans dinmicos (Dynamic MBeans). Estos exponen su interfaz en tiempo de ejecucin.
 MBeans Abiertos. (Open MBeans) Son una extensin de los anteriores.
 MBeans de modelo (Model MBeans). Son tambin una extensin de los MBeans dinmicos. Simplifican la instrumentacin de los
recursos proporcionando un comportamiento por defecto. Los XMBeans de JBoss son una implementacin de este tipo.
 Capa de Agente. Este nivel provee los requerimientos para implementar un agente. Los agentes son los responsables de controlar y hacer
disponibles los recursos manejados en el nivel de instrumentacin, as como gestionar las relaciones entre ellos.
 Capa de Servicios distribuidos. Mecanismo mediante el cual las aplicaciones de administracin interactan con los agentes y sus objetos
gestionados.

Un componente esencial en el nivel o capa de agente, es el servidor de MBeans. Un MBean Server es un registro de
MBeans que los hace accesibles a otras aplicaciones. Un MBean Server no expone directamente el interfaz de los MBeans
a las aplicaciones, sino que existe un nico interfaz provisto por el MBean Server con el que poder invocar al interfaz de los
MBeans (as se consigue desacoplar los MBeans de las aplicaciones que los manejan).
Echando un vistazo a los MBeans de JBoss.
JBoss incluye varios adaptadores que permiten el acceso al servidor JMX de MBeans:
 Un adaptador HTML.
 Un adaptador RMI
 Un EJB.

Tambin incluye una adems una aplicacin WEB que hace uso del adaptador HTML para acceder al Servidor JMX de
MBeans (la jmx-console) y una herramienta desde la lnea de comandos (twiddle)
Echemos un vistazo primero a la consola:
http://localhost:8080/jmx-console/

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=MBeansJBoss

17/01/2007

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho ms

Pgina 2 de 7

Desde la consola podemos ver los MBeans que se encuentran registrados en el servidor, buscarlos o filtrarlos por su
nombre, ver y modificar sus atributos, invocar a las operaciones de los mismos, etc... .
Veamos por ejemplo el MBean: jboss:service=JNDIView y pulsemos sobre el:

Una vez seleccionado, pulsad sobre el mtodo list:

Se nos muestra el estado actual de JNDI.


Vamos a hacer lo mismo pero ahora usando el adaptador RMI.
Abrimos el eclipse y nos creamos un nuevo proyecto. Importar todas las libreras que se encuentran en:
<JBOSS_PATH>/client
Crearemos una clase que llamaremos JNDIBrowser:
package com.autentia.tutoriales.jboss.mbeans;
import
import
import
import

java.util.Hashtable;
javax.management.ObjectName;
javax.naming.InitialContext;
org.jboss.jmx.adaptor.rmi.RMIAdaptor;

public class JNDIBrowser {


public static void main(String[] args) throws Exception {
// Creamos las propiedades para el acceso a JNDI.
Hashtable props = new Hashtable();
props.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=MBeansJBoss

props.put

17/01/2007

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho ms

Pgina 3 de 7

props.put("java.naming.provider.url","jnp://localhost:1099");
// Creamos el contexto JNDI
InitialContext context = new InitialContext(props);
/*
Buscamos el Adaptador JNDI que est enlazado en:
"jmx/invoker/RMIAdaptor" */
RMIAdaptor rmiserver = (RMIAdaptor)context.lookup("jmx/invoker/RMIAdaptor");
/* Le pedimos al servidor de MBeans RMI el Bean llamado:
jboss:service=JNDIView */
ObjectName beanName = new ObjectName("jboss:service=JNDIView");
// Invocamos el metodo list del MBean.
String[] tiposParametros = {"boolean"};
Object[] valoresParametros = {Boolean.TRUE};
ObjectresultadoLista = rmiserver.invoke(beanName,"list",valoresParametros,tiposParametros);
// Invocamos al metodo listXML
Object resultadoXML = rmiserver.invoke(beanName,"listXML", null, null);
// Lo pintamos todo.
System.out.println("-- INVOCANDO AL MBEAN jboss:service=JNDIView --");
System.out.println("******** VISTA FORMATO LISTA **************");
System.out.println(resultadoLista);
System.out.println("*******************************************");
System.out.println("******** VISTA FORMATO XML **************");
System.out.println(resultadoXML);
System.out.println("*******************************************");
}
}
Fijaos principalmente en la forma de invocar a los mtodos del MBean. Como coment anteriormente, el servidor de
MBeans no expone los mtodos de los Beans directamente sino a travs de un interfaz genrico, con el objetivo de no
acoplar las herramientas con los MBeans.
El resultado:

JBoss nos da la posibilidad de crear nuestros propios adaptadores para acceso al servidor de MBeans por medio de otros
protocolos.
Creando nuestros propios MBeans
JBoss durante el arranque, una de las primeras tareas que realiza es crear una instancia del Servidor de MBeans. En la
arquitectura de JBoss, este servidor juega un papel similar al del microkernel de un sistema operativo. Es decir, el
corazn de JBoss contiene solamente lo esencial del servidor de aplicaciones, toda la funcionalidad restante es registrada
por medio de MBeans dentro del servidor.
Por lo tanto, aadirle nueva funcionalidad a JBoss consiste en registrar nuevos MBeans. Dentro de JBoss podemos registrar
MBeans independientes del resto de servicios de JBoss. Estos pueden crearse siguiendo la especificacin JMX y
registrndolos en el fichero <JBOSS_PATH>/server/default/deploy/user-service.xml
Sin embargo, cuando creamos MBeans que dependen de otros servicios, debemos serguir el patrn de servicios de JBoss.
Este patrn consiste en un conjunto de operaciones del ciclo de vida de los MBeans dentro del servidor que proporcionan
notificaciones sobre cambios de estado. Los MBeans que siguen este patrn se denominan MBeans de servicio.
Las notificaciones informan a un MBean cuando puede crearse, destruirse, iniciarse o pararse. Los MBeans que
gestionan el ciclo de vida de un MBean de servicio son tres: SARDeployer, ServiceConfigurator y ServiceController.
 SARDeployer (Service ARchive deployer) es el encargado del despliegue de MBeans de servicio. Es el encargado

de manejar los ficheros de servicios. Estos pueden ser tanto un ".sar" (un jar con esa extensin que contiene un

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=MBeansJBoss

17/01/2007

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho ms

Pgina 4 de 7

fichero descriptor del servicio: META-INF/jboss-service.xml) o un fichero xml que define un servicio cuyo nombre ha
de seguir el patron *-service.xml.
 ServiceController. Se encarga de manejar las dependencias entre todos los MBeans. SARDeployer delega la
inicializacin, creacin, destruccin, inicio y parada de los servicios al ServiceController.
 ServiceConfigurator. Se encarga de configurar y registrar los servicios en el servidor de MBeans.
Ser por lo tanto, el ServiceController el encargado de gestionar el ciclo de vida de un MBean en base a 4 mtodos:
(definidos en el interfaz org.jboss.system.Service)
 el mtodo create(ObjectName obj): ste mtodo de un MBean ser invocado cuando se den las condiciones

necesarias para que el MBean pueda ser creado. Estas condiciones se darn cuando todos los servicios de los que
depende el MBean en cuestin hayan sido creados. En este punto, un MBean an no puede usar otros servicios.
Este mtodo puede verse invocado directamente por el SARDeployer, por la notificacin de una nueva clase o
porque otro servicio ha terminado de crearse.
 el mtodo start(ObjectName obj): Ser invocado cuando todos los servicios de los que depende el MBean en
cuestin hayan sido iniciados. Este mtodo puede verse invocado directamente por el SARDeployer, por la
notificacin de una nueva clase o porque otro servicio ha terminado de iniciarse. En este momento, el MBean ya se
encuentra en un estado funcional.
 el mtodo stop(ObjectName obj): Este mtodo puede verse invocado directamente por el SARDeployer, por
la notificacin la eliminacin de una clase o porque otro servicio ha terminado de pararse.
 el mtodo destroy(ObjectName obj): Este mtodo puede verse invocado directamente por el
SARDeployer, por la notificacin la eliminacin de una clase o porque otro servicio ha terminado de destruirse.

En este momento, estamos en disposicin de crear un MBean de servicio y registrarlo en el servidor de MBeans. Para ello
tenemos tres posibilidades:
1.
2.
3.

Aadir los mtodos del interfaz Service que vayamos a usar al interfaz de nuestro MBean (sin necesidad de
implementarlo, as evitamos acoplarnos con JBoss)
Extender el interfaz de nuestro MBean del interfaz Service.
Extender el interfaz de nuestro MBean del interfaz org.jboss.system.ServiceMBean (mtodo que extiende a Service
aadindole getName(), getState() y getStateString().

Nosotros vamos a usar la tercera posibilidad para generar nuestro MBean. Primero generaremos el interfaz: (ojito con los
nombres que usamos, la implementacin de JMX de JBoss nos obliga a que si la clase del MBean se llama
XXX, el interfaz se ha de llamar XXXMBean)
package com.autentia.tutoriales.jboss.mbeans;
import org.jboss.system.ServiceMBean;
public interface FechaMBean extends ServiceMBean {
/* Mtodo que formatea la fecha actual en el formato que le pasemos.
Si no recibe ningn formato, usa el formato por defecto */
public String formatFecha(String formato) throws Exception;

// Metodos accesores del atributo formato. (formato por defecto)


public String getFormato();
public void setFormato(String formato);

Ahora, vamos crear la clase del MBean:


package com.autentia.tutoriales.jboss.mbeans;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.jboss.system.ServiceMBeanSupport;
public class Fecha extends ServiceMBeanSupport implements FechaMBean {
private String formato;
public String formatFecha(String formatoActual) throws Exception {
String formatoUsar = this.formato;
if(formatoActual!=null && !"".equals(formatoActual.trim())) {
formatoUsar = formatoActual.trim();
}
SimpleDateFormat formatter=new SimpleDateFormat(formatoUsar);
return formatter.format(new Date());
}
public String getFormato() {
return this.formato;
}
public void setFormato(String formato) {
this.formato = formato;
}
public void create() throws Exception {
super.create();
System.out.println("CREATE: "+getName());
}
public void start() throws Exception {
super.start();
System.out.println("STARTING: "+getName());
}
public void stop() {
super.stop();
System.out.println("STOPPING: "+getName());
}

public void destroy() {


super.destroy();
System.out.println("DESTROYING: "+getName());
}

Hemos extendido la clase ServiceMBeanSupport ya que implementa los mtodos getName(), getState() y getStateString().

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=MBeansJBoss

17/01/2007

Tutoriales en AdictosAlTrabajo: Java, J2EE, Visual C++, Linux, UML, OOP y mucho ms

Pgina 5 de 7

Vamos a crear ahora el fichero jboss-service.xml (si quisirais poner dependencias a otros servicios, este sera el lugar)
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="com.autentia.tutoriales.jboss.mbeans.Fecha"
name="autentia.tutoriales.paco:service=FormateadorFechaActual">
<attribute name="Formato">dd/MM/yyyy</attribute>
</mbean>
</server>
(Fijos en la f mayscula del nombre del atributo)
Es momento de crear el fichero "date.sar" con la siguente estructura:
- com/autentia/tutoriales/jboss/mbeans/Fecha
- com/autentia/tutoriales/jboss/mbeans/FechaMBean
- META-INF/jboss-service.xml
Desplegadlo en el servidor y vayamos a la consola JMX:

Seleccionad "service=FormateadorFechaActual" :

Probad el mtodo que hemos creado:

El resultado:

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=MBeansJBoss

17/01/2007

Potrebbero piacerti anche