2010-08-22 8 views
6

Я пытаюсь наблюдать как события запуска, так и завершения работы для веб-приложения CDI. У меня есть компонент ApplicationScoped, который прослушивает эти события:CDI - Наблюдение за событиями в контейнере

@ApplicationScoped 
public class PrettyfacesStartupObserver 
{ 
    private static final Log LOGGER = LogFactory.getLog(PrettyfacesStartupObserver.class); 

    public PrettyfacesStartupObserver() 
    { 
     LOGGER.debug("\n\n\n\n\n\n\n\n\n\nconstructor"); 
    } 

    public void onStartup(@Observes 
    AfterBeanDiscovery afterBeanDiscovery 
              ) 
    { 
     LOGGER.debug("\n\n\n\n\n\n\n\n\n\nafter bean discover"); 
    } 

    public void onStartup(@Observes 
    AfterDeploymentValidation afterDeploymentValidation 
              ) 
    { 
     LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nafter deployment validation"); 
    } 

    public void onShutdown(@Observes 
    BeforeShutdown beforeShutdown 
               ) 
    { 
     LOGGER.debug("\n\n\n\n\n\n\n\n\n\n\nbefore shutdown:" + beforeShutdown); 
    } 

Я ничего не вижу в журналах.

Что мне не хватает?

+0

У меня есть пустой beans.xml в этом архиве. Я не верю, что этот компонент никогда не будет создан, так как я не вижу никаких отчетов журнала, созданных им. – 2010-08-24 12:16:25

+0

Ваш логин настроен правильно? Попробуйте System.out – Bozho

+0

Я дам эту попытку :) – 2010-08-24 13:42:31

ответ

14

Благодаря Pete Muir решение было реализовать интерфейс расширения. Как только я это сделал, наряду с созданием специального файла, он работал отлично.

Следует помнить, что если вы хотите наблюдать (или действовать) с событиями контейнера, вы должны реализовать интерфейс расширения, поскольку это особое событие.

https://docs.jboss.org/weld/reference/latest/en-US/html/extend.html#d0e4984

Walter

+0

Спасибо за публикацию этого. +1 вокруг. –

+2

Вы упомянули о создании специального файла. Какой файл был? –

7

"Специальный файл" упоминается Вальтер Уайт:

META-INF/services/javax.enterprise.inject.spi.Extension

Этот файл должен содержать полное имя вашего класса Extension. ie:

org.mydomain.extension.MyExtension