Recibiendo las notificaciones de un XMBean

0
6303

Recibiendo las notificaciones de un XMBean

Entorno

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

<

Introducción

Este tutorial es una continuación de dos anteriores llamados MBeans y JBoss:

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

y XMBeans y JBoss:

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

En este último tutorial, os mostré como crear un XMBean y
registrarlo en el servidor de MBeans de JBoss, así como añadirle la persistencia.  Sin embargo, nos
quedó pendiente hacer algun ejemplo de envío y recepción de notificaciones.

Ya os comenté que los MBeans envían notificaciones cuando
se registran o cuando algún atributo es modificado, sin
necesidad de añadir nada.  Pero, nuestro objetivo es enviar
notificaciones cuando alguien invoque el método formatFecha del
XMBean que hicimos en el tutorial anterior. Vamos a modificar el
código del método formatFecha XMBean XFecha para que envíe notificaciones:

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);
    String resultado = formatter.format(new Date()); 
    
// Creamos un objeto javax.management.Notification
  Notification createMsg = new Notification("formatFecha",this,new Date().getTime());
// Le añadimos a la notificacion informacion adicional.  
   createMsg.setUserData("Formateada la fecha actual con el formato:" + formatoUsar +" con el resultado: "+ resultado);

// Enviamos la notificación.
   sendNotification(createMsg);       
        
   return  resultado;
 }	

Ahora, lo que necesitamos es alguien que escuche las notificaciones que se envían desde el nuestro Bean.

CREANDO EL MBEAN RECEPTOR

Para crear un MBean que reciba notificaciones (un listener), nuestro objetivo se crean un MBean que implemente el interfaz: ListenerServiceMBean.

Han de implementar este interfaz, todos aquellos MBeans
que quieran recibir notificaciones. Alguno preguntará,
¿todas las notificaciones? No, solamente recibirá
aquellas notificaciones a las que se subscriba (parecido a un topic JMS).

Además, para facilitarnos las cosas, al igual que ocurría con el interfaz ServiceMBean en el que Jboss nos regala una implementación del mismo en la clase ServiceMBeanSupport,  ocurre que existe una implementación de ListenerServiceMBean en la clase: ListenerServiceMBeanSupport. Este consta de los siguientes métodos:

	public void subscribe(boolean dynamicSubscriptions)
      throws Exception;

   public void subscribe(boolean dynamicSubscriptions, ObjectName listener)
      throws Exception;

   public void unsubscribe();
   public void handleNotification2(Notification notification, Object handback);

 Los tres primeros
nos sirven para suscribirnos / darnos de baja de manera dinámica
de alguna suscripción. El últimos de ellos es el que
más nos interesa, ya que será el método de nuestro
MBean que se invoque cuando se produzca alguna notificación a la
que estemos suscritos (algo parecido al método onMessage de un
MDB).

Dicho esto, lo primero que haremos es crearnos el interfaz: XFechaListenerMBean

package com.autentia.tutoriales.jboss.listener;
import org.jboss.system.ListenerServiceMBean;

public interface XFechaListenerMBean extends ListenerServiceMBean{
}

Recordad que el nombre del interfaz debe acabar en MBean.

Ahora, nos crearemos la clase del Bean: XFechaListener:

package com.autentia.tutoriales.jboss.listener;

import javax.management.Notification;
import org.jboss.system.ListenerServiceMBeanSupport;


public class XFechaListener extends ListenerServiceMBeanSupport 
    implements XFechaListenerMBean{

    public XFechaListener() {        
    }
    
    /**
   * Este es el método que será invocado cuando se reciba una notificación de un MBean al que estemos suscritos. */
   public void handleNotification2(Notification notif, Object handback)    {
        System.out.println("---- RECIBO UNA NOTIFICACION -----");
        System.out.println("notif.getType():"+notif.getType());            
        System.out.println("notif.getTimeStamp():"+notif.getTimeStamp());        
        System.out.println("notif..getUserData():"+notif.getUserData());        
    }

    /**
     * Sobreescribimos el metodo startService para suscribirnos a las notificaciones cuando arranquemos  
     */

    protected void startService() throws Exception {
  		/* El valor true es para indicarle que si se registran nuevas instancias de  MBeans en el servidor de 
  		*	MBeans que cumplen nuestros criterios de subscripcion, nos suscriban tambien a sus notificaciones (genial ¿no?)  
  		*/
        System.out.println("STARTING LISTENER");        
        super.subscribe(true);
    }

    /**
     * Para darnos de baja cuando se pare nuestro MBean.
     */
    protected void stopService() throws Exception {
        System.out.println("STOPPING LISTENER");        
        super.unsubscribe();
    }
    
}

Ahora nos creamos el descriptor del listener (jboss-service.xml):


    

           
        
                              
        
      


En SubscriptionList le indicamos los MBeans de los que queremos recibir
notificaciones. Nosotros le hemos indicado que queremos recibir
cualquier notificación emitida por un MBean que esté bajo
el dominio: autentia.tutoriales.paco

Una vez llegado aquí, crearos el «.sar», desplegadlo e id a la consola jmx:

consola JMX

Seleccionad el Bean XFormateadorFechaActual e invocad el método formatFecha y comprobad las trazas:

resultado

Comprobaréis que recibiréis la notificación de la
invocación al método. También recibiréis
notificaciones cuando se modifica el atributo formato o se inicia
XFormateadorFechaActual.

Bueno, lo importante de todo esto es que se os ocurran ideas donde
aplicar lo que os he enseñado en estos últimos
tutoriales, ya que aprender a hacerlo es cuestión de mirar
documentación.

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