====== 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//