Как мне прослушать все контекстуальные события Seam с параметризованными именами?
-
23-08-2019 - |
Вопрос
Шов будет гореть различные виды мероприятий которые относятся к определенным областям, задачам или процессам и добавляет название области, задачи или процесса в конец события.
Как мне прослушать все события определенного типа?
Например.для любого <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 для создания observer или чего-то подобного, и я буду прослушивать до двух классов событий в одном компоненте.
Решение
Вы можете легко сделать это, заменив класс 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.
Другие советы
Внутри if вы должны написать super.RaiseEvent(...), иначе вы получите бесконечный цикл.