Как мне прослушать все контекстные события Seam с параметризованными именами? - PullRequest
2 голосов
/ 16 февраля 2009

Seam будет запускать различные виды событий , которые относятся к определенным областям, задачам или процессам, и добавляет имя области, задачи или процесса в конец события.

Как мне прослушать все события типа?

например. для любого <name> я бы хотел послушать такие события:

  • org.jboss.seam.createProcess.<name> - вызывается при создании процесса
  • org.jboss.seam.endProcess.<name> - вызывается по окончании процесса
  • org.jboss.seam.initProcess.<name> - вызывается, когда процесс связан с беседой
  • org.jboss.seam.startTask.<name> - вызывается при запуске задания
  • org.jboss.seam.endTask.<name> - вызывается при завершении задачи

Мне нужно сделать это , несмотря на то, что я не знаю списка допустимых имен заранее ...: - (

Я надеюсь использовать @Observer для создания наблюдателя или что-то подобное, и я буду слушать до двух классов событий в одном компоненте.

Ответы [ 2 ]

4 голосов
/ 22 мая 2009

Вы можете легко сделать это, заменив класс Events в Seam собственной реализацией. Затем найдите события, которые начинаются с определенной строки:

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

Теперь вы можете наблюдать "org.jboss.seam.createProcess", чтобы получить все события createProcess.

2 голосов
/ 27 июля 2009

Внутри if вы должны написать super.raiseEvent (...), иначе вы получите бесконечный цикл.

...