CDI - 观察容器事件

6 cdi java-ee-6 jboss-weld

我正在尝试观察CDI Web应用程序的启动和关闭事件.我有一个ApplicationScoped bean来侦听这些事件:

@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);
    }
Run Code Online (Sandbox Code Playgroud)

我在日志中看不到任何内容.

我错过了什么?

小智 15

感谢Pete Muir,解决方案是实现Extension接口.一旦我这样做,同时创建一个特殊的文件,它完美地工作.

要记住的是,如果要观察(或采取行动)容器事件,则必须实现扩展接口,因为它是一个特殊事件.

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

沃尔特

  • 你提到创建一个特殊文件.那个文件是什么? (2认同)

Geo*_*old 7

Walter White提到的"特殊档案"是:

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

该文件应包含Extension类的完全限定名称.即:

org.mydomain.extension.MyExtension
Run Code Online (Sandbox Code Playgroud)