Come faccio ad ascoltare tutti gli eventi contestuali Seam con i nomi con parametri?
-
23-08-2019 - |
Domanda
Seam scatterà diversi tipi di eventi che riguardano particolari ambiti, attività o processi e aggiunge il nome dell'ambito, un'attività o un processo al termine dell'evento.
Come faccio ad ascoltare a tutti gli eventi di un tipo?
es. per qualsiasi <name>
mi piacerebbe ascoltare eventi come questi:
-
org.jboss.seam.createProcess.<name>
- chiamato quando viene creato il processo -
org.jboss.seam.endProcess.<name>
- chiamato quando finisce il processo -
org.jboss.seam.initProcess.<name>
- chiamato quando il processo è associato con la conversazione -
org.jboss.seam.startTask.<name>
- chiamato quando viene avviato il task -
org.jboss.seam.endTask.<name>
- chiamato quando il compito è finito
Ho bisogno di fare questo pur non conoscendo l'elenco dei nomi validi in anticipo ...: - (
Spero di essere con @Observer per creare l'osservatore, o qualcosa di simile, e io ascolto fino a due classi di eventi nello stesso componente.
Soluzione
Si può facilmente farlo sostituendo classe Eventi di Seam con una propria implementazione. Poi cercare gli eventi che vengono sollevate che iniziano con una particolare stringa:
@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.
}
}
A questo punto è possibile osservare "org.jboss.seam.createProcess" per ottenere tutti gli eventi CreateProcess.
Altri suggerimenti
All'interno del caso, è necessario scrivere super.raiseEvent (...) altrimenti si otterrà un ciclo infinito.