XMBeans y JBoss

0
9173
XMBeans y JBoss


Los
ejemplos de este tutorial están hechos con el siguiente
entorno de desarrollo:

  • Jboss Eclipse
    IDE Milestone 5.

  • JDK 1.5

  • JBoss
    4.0.5 GA


INTRODUCCION.

Este tutorial es una continuación de una anterior llamado MBeans y JBoss:

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


En el tutorial anterior os
mostré un poco la implementación JMX de JBoss en base al
servidor de MBeans, y os mostré un ejemplo de un MBean
estándar creado mediante la implementación del interfaz ServiceMBean y la extensión de la clase ServiceMBeanSupport.
Os comenté que este tipo de MBeans se integran en el ciclo de
vida propio de los servicios de JBoss, pudiendo establecer dependencias
entre ellos. Por ejemplo, si vuestro MBean depende para su
ejecución de un datasource, podemos hacer que nuestro MBean
dependa del mismo para que no se arrancado hasta que el datasource no
haya sido arrancado. Siguiendo un poco el tutorial anterior, y si
suponemos que el datasource se llama PacoDS, podríamos modificar el jboss-service.xml del tutorial anterior añadiendo la dependencia de la siguiente manera:


    
       
     dd/MM/yyyy
jboss.jca:name=PacoDS,service=DataSourceBinding
  

Esto impedirá que nuestro servicio sea arrancado (método start()) hasta que no sea iniciado el datasource PacoDS.

Sin embargo, JBoss permite
añadir una serie de características a los MBeans, pero
para ello estos han de ser XMBeans (XML MBeans) y no estándar
MBeans. Las características que podemos añadir son las
siguientes:

  • Añadir información descriptiva a los métodos y atributos del MBean.
  • Posibilidad de
    exponer información de notificación, es decir indicarle a
    nuestro MBean que transmita notificaciones en ciertos casos.
  • Añadir persistencia a los atributos de los MBeans.
  • Añadir interceptors
    personalizados para los MBeans (para seguridad, acceso remoto…) 

Creando el XMBean

Vamos, en primer lugar, a crear nuestra clase. Ahora no extenderemos ninguna clase ni implementaremos ningún interfaz:

package com.autentia.tutoriales.jboss.xmbeans;

import java.text.SimpleDateFormat;
import java.util.Date;

public class XFecha {

    private String formato;
        
        public String getFormato() {        
        return this.formato;
    }

    public void setFormato(String formato) {
        this.formato = formato;        
    }

    public String formatFecha(String formatoActual) throws Exception {
        String formatoUsar = "";
        
        if(this.formato!=null && !"".equals(this.formato.trim())) {
            formatoUsar=this.formato.trim();
        } else {
            formatoUsar="dd/MM/yyyy";
        }
        
        if(formatoActual!=null && !"".equals(formatoActual.trim())) {
            formatoUsar = formatoActual.trim();
        }        
        SimpleDateFormat formatter=new SimpleDateFormat(formatoUsar);
        return formatter.format(new Date());    
    }

    public void start() throws Exception {        
        System.out.println("STARTING: XFecha");        
    }
    
    public void stop() {        
        System.out.println("STOPING: XFecha");            
    }
}

Ahora crearemos el jboss-service.xml:


    
         
  

Como podéis ver, le hemos añadido la referencia al descriptor del
XMBean. Será en este donde describamos el comportamiento de
nuestro XMBean.

Vamos por tanto, a crearnos el fichero: xformateadorfechaactual-xmbean.xml




    XMBean para formatear la fecha actual Version 1.0
    
        
        
        
    
    com.autentia.tutoriales.jboss.xmbeans.XFecha
    
        Constructor por defecto
        XFecha
    
    
    
        
            Formato por defecto que se usa para formatear la fecha actual sino se recibe valor en el metodo formatFecha
        
        Formato
        java.lang.String        
        
    
    
        Metodo start del ciclo de vida
        start
    
    
        Metodo stop del ciclo de vida
        stop
    
    
        Formatea la fecha actual en el formato recibido como parametro.
        Si el parametro es nulo o vacio, usa el formato por defecto
        
        formatFecha
        
            Formato a usar
            formatFecha
            java.lang.String
        
        java.lang.String
        

Como
podéis ver, hemos definido los atributos y las
características de los mismos, los métodos, un
constructor por defecto, hemos indicado la clase que implementa el
XMBean y hemos incluido las descripciones de todos ellos. Aunque no
hemos añadido ningún elemento de notificaciones,
también se están enviando cada vez que se produce un
cambio en el atributo o se arranca o se para el servicio (regalito de
JBoss). Por lo tanto, de las cuatro
características que hablamos antes, hemos añadido las dos
primeras. En el próximo tutorial os enseñaré a
enviar notificaciones propias y recibirlas.

   

Vamos a crearnos el fichero «.sar» (en mi caso xdate.sar) con la siguiente estructura:

– META-INF/xformateadorfechaactual-xmbean.xml

– META-INF/jboss-service.xml

– com/autentia/tutoriales/jboss/xmbeans/XFecha.class

Lo desplegamos y nos vamos a la consola JMX:

consola JMX

Seleccionamos service=XFormateadorFechaActual

consola JMX

Probad los
métodos, a modificar el valor de formato, etc… . Observad
también como se han añadido las descripciones en la
consola. Hasta ahora, aparentemente no hemos ganado mucho con respecto
al MBean estándar. 

Añadiendo la persistencia de los atributos.

Tenemos
un atributo en nuestro XMBean que se llama formato, que es modificable
y que tiene un valor por defecto. Es posible modificar su valor
mediante la consola JMX o mediante la invocación de su
método setFormato.
Sin
embargo, si modificamos el valor del atributo formato, y redesplegamos
el XMBean podéis comprobar que el valor almacenado se pierde.
Para solucionar esto podemos añadirle la persistencia al
atributo. Para ello, modificaremos el descriptor del XMBean de la
siguiente manera (comprobad que no tenéis definidos valores por
defecto en el atributo, porque sino se sobreescribirá por ese):

<mbean>

....

    <description>XMBean para formatear la fecha actual Version 1.0</description>

    <descriptors>

        <persistence persistPolicy="OnUpdate" persistPeriod="10"

            persistLocation="${jboss.server.data.dir}" persistName="XFecha.ser" />

        <currencyTimeLimit value="10" />

        <state-action-on-update value="keep-running" />

     <persistence-manager value="org.jboss.mx.persistence.ObjectStreamPersistenceManager"/>

    </descriptors>

....

</mbean>

Haced la prueba
ahora, volved a desplegar el XMBean, modificad el atributo, parar
JBoss, volvedlo a arrancar y comprobaréis que mantiene el valor
modificado. Podéis comprobar que se os genera el fichero XFecha.ser (con los valores serializados de los atributos) en el directorio: <RUTA_JBOSS>/server/default/data

En el próximo tutorial os enseñaré a suscribiros a las notificaciones que generamos en el XMBean.

Si nos necesitáis, ya sabéis donde buscarnos: http://www.autentia.com








 


DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad