¿Cómo escuchar a todos los eventos contextuales costura con nombres parametrizados?
-
23-08-2019 - |
Pregunta
diferentes tipos de eventos que se refieren a determinados alcances, tareas o procesos y añade el nombre del ámbito, tarea o proceso hasta el final del evento.
¿Cómo puedo escuchar a todos los eventos de un tipo?
por ejemplo. para cualquier <name>
me gusta escuchar a eventos como estos:
-
org.jboss.seam.createProcess.<name>
- llamada cuando se crea el proceso -
org.jboss.seam.endProcess.<name>
- llamada cuando termine el proceso -
org.jboss.seam.initProcess.<name>
- llama cuando el proceso está asociado con la conversación -
org.jboss.seam.startTask.<name>
- llamada cuando se inicia la tarea -
org.jboss.seam.endTask.<name>
- llamada cuando se termina la tarea
Necesito hacer esto a pesar de no conocer la lista de nombres válidos en la delantera ...: - (
Espero estar usando @Observer para crear el observador, o algo similar, y voy a escuchar a un máximo de dos clases de eventos en el mismo componente.
Solución
Se puede hacer esto mediante la sustitución de la clase Eventos de costura con su propia aplicación. A continuación, busque los eventos que se plantean que comienzan con una cadena en particular:
@Scope(ScopeType.STATELESS)
@BypassInterceptors
@Name("org.jboss.seam.core.events")
@Install(precedence=APPLICATION)
public class Events extends org.jboss.seam.core.Events
{
@Override
public void raiseEvent(String type, Object... parameters )
{
super.raiseEvent( type, parameters );
if ( type.startsWith( "org.jboss.seam.createProcess" ) )
{
super.raiseEvent( "org.jboss.seam.createProcess", parameters );
}
//etc.
}
}
Ahora puede observar "org.jboss.seam.createProcess" para obtener todos los eventos CreateProcess.
Otros consejos
En el interior del caso, debe escribir super.raiseEvent (...) de lo contrario obtendrá un bucle infinito.