CDI - Наблюдение за контейнерными событиями - PullRequest
6 голосов
/ 22 августа 2010

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

@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);
    }

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

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

Ответы [ 2 ]

14 голосов
/ 28 августа 2010

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

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

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

Walter

7 голосов
/ 15 декабря 2011

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

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

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

org.mydomain.extension.MyExtension
...