Comment puis-je écouter tous les événements contextuels Seam avec des noms paramétrés?

StackOverflow https://stackoverflow.com/questions/553157

Question

Seam feu différents types d'événements qui se rapportent aux étendues particulières, les tâches ou les processus et ajoute le nom de la portée, tâche ou un processus à la fin de l'événement.

Comment puis-je écouter tous les événements d'un type?

par exemple. pour tout <name> Je voudrais écouter des événements tels que ceux-ci:

  • org.jboss.seam.createProcess.<name> - appelé lorsque le processus est créé
  • org.jboss.seam.endProcess.<name> - appelée lorsque la fin du processus
  • org.jboss.seam.initProcess.<name> - appelé lorsque le processus est associé à la conversation
  • org.jboss.seam.startTask.<name> - appelé lorsque la tâche est démarrée
  • org.jboss.seam.endTask.<name> - appelée lorsque la tâche est terminée

Je dois le faire malgré ne pas connaître la liste des noms valides à l'avant ...: - (

J'espère être en utilisant @Observer pour créer l'observateur, ou quelque chose de semblable, et je vais écouter jusqu'à deux classes d'événements dans le même composant.

Était-ce utile?

La solution

Vous pouvez facilement le faire en remplaçant des événements de classe avec votre propre implémentation de Seam. Ensuite, regardez pour les événements qui sont soulevées qui commencent par une chaîne particulière:

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

Vous pouvez maintenant observer "org.jboss.seam.createProcess" pour obtenir tous les événements CreateProcess.

Autres conseils

A l'intérieur du cas, vous devez écrire super.raiseEvent (...) sinon vous aurez une boucle infinie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top