====== Lanzar Eventos mediante Objetos JAVA ====== Se ha añadido a JBoss Seam una nueva forma de lanzar y registrar eventos mediante instancias de objetos (clases) JAVA. ===== Forma Tradicional de Lanzar Eventos en JBoss Seam ===== La forma tradicional de lanzar eventos en Seam es mediante la clase //org.jboss.seam.core.Events//, utilizando un //String//, ejemplo: if (Events.exists()) { Events.instance().raiseEvent("org.jboss.seam.security.loginSuccessful"); } y registramos los oyentes (//listeners// u //observers//) utilizando el mismo //String//, ejemplo: @Observer("org.jboss.seam.security.loginSuccessful") public void miObserver() { // realizar tareas } o mediante el fichero //components.xml//, ejemplo: ===== Nueva Forma de Lanzar Eventos en JBoss Seam mediante Instancias de Objetos ===== Disponible tambien para FundeWeb 1.5. Con la nueva forma, vamos a utilizar POJOS, que son a al vez, contenedores de propiedades y el identificador del evento en si mismo. Para eso el POJO tiene que implementar la inteface //org.jboss.seam.core.EventObject//, ejemplo: package es.um.atica.prueba.events; import org.jboss.seam.core.EventObject; public class PruebaEvent implements EventObject { private String propiedadUno = null; private boolean propiedadDos = false; public PruebaEvent() { } public PruebaEvent( String propiedadUno, boolean propiedadDos ) { this.propiedadUno = propiedadUno; this.propiedadDos = propiedadDos; } public String getPropiedadUno() { return propiedadUno; } public void setPropiedadUno( String propiedadUno ) { this.propiedadUno = propiedadUno; } public boolean isPropiedadDos() { return propiedadDos; } public void setPropiedadDos( boolean propiedadDos ) { this.propiedadDos = propiedadDos; } @Override public String toString() { return "PruebaEvent[P1= " + propiedadUno + ", P2= " + propiedadDos + "]"; } } para lanzar el evento, utilizamos la clase //Events//, ejemplo: public void lanzaEventoSincrono() { log.info( "Entra en lanzaEventoSincrono" ); PruebaEvent event = new PruebaEvent("lanzaEvento", true); if ( Events.exists() ) { Events.instance().raiseEvent( event ); } log.info( "Sale de lanzaEventoSincrono" ); } public void lanzaEventoAsincrono() { log.info( "Entra en lanzaEventoAsincrono" ); PruebaEvent event = new PruebaEvent("lanzaEvento", true); if ( Events.exists() ) { Events.instance().raiseAsynchronousEvent( event ); } log.info( "Sale de lanzaEventoAsincrono" ); } y registramos los oyentes (listeners u observers) sin utilizar un //String//, ejemplo: package es.um.atica.prueba.backbeans; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Observer; import org.jboss.seam.core.Events; import org.jboss.seam.log.Log; import es.um.atica.prueba.events.PruebaEvent; @Name("pruebaEventObject") public class PruebaEventObject { @Observer public void listenerEvento(PruebaEvent event) { log.info( "Entra en listenerEvento: recibido #0", event ); } } Para este tipo de lanzamiento de eventos, el método oyente (tiene la anotación //@Observer//) solo puede tener un parámetro, que es el propio evento. Para registrarlo mediante el fichero //components.xml//, el //String// de registro es el que forman la concatnacion del paquete y el nombre de la clase, separados por un '.', ejemplo: donde //event//, es una variable de contexto accesible por EL. Se puede crear mediante código o mediante la anotación @Out en un componente Seam (las clases que tienen la anotación //@Name// o declaradar en el fichero //components.xml//. ---- --- //[[juanmiguel.bernal@ticarum.es|JUAN MIGUEL BERNAL GONZALEZ]] 02/08/2018 08:08//