Pergunta

Seam irá disparar diferentes tipos de eventos que se relacionam a determinados escopos, tarefas ou processos e acrescenta o nome do escopo, tarefa ou processo até o final do evento.

Como posso ouvir todos os eventos de um tipo?

por exemplo. para qualquer <name> eu gostaria de ouvir eventos como estes:

  • org.jboss.seam.createProcess.<name> - chamado quando o processo é criado
  • org.jboss.seam.endProcess.<name> - chamado quando o processo termina
  • org.jboss.seam.initProcess.<name> - chamado quando o processo está associado com a conversa
  • org.jboss.seam.startTask.<name> - chamado quando a tarefa é iniciada
  • org.jboss.seam.endTask.<name> - chamado quando a tarefa é finalizada

Eu preciso fazer isso apesar de não saber a lista de nomes válidos na frente ...: - (

Espero estar usando @Observer para criar o observador, ou algo semelhante, e eu vou ouvir até duas classes de eventos no mesmo componente.

Foi útil?

Solução

Você pode facilmente fazer isso, substituindo classe Eventos do Seam com sua própria implementação. Em seguida, procure eventos que são gerados que começam com uma determinada seqüência:

@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.
   }
}

Agora você pode observar "org.jboss.seam.createProcess" para obter todos os eventos CreateProcess.

Outras dicas

Dentro do caso, você deve escrever super.raiseEvent (...) caso contrário, você vai ter um loop infinito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top