2010-08-22 23 views
6

Estoy intentando observar los eventos de inicio y cierre de una aplicación web de CDI. Tengo un bean ApplicationScoped que escucha esos eventos:CDI - Observación de eventos de contenedor

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

No veo nada en los registros.

¿Qué me estoy perdiendo?

+0

Tengo un beans.xml vacío en este archivo. No creo que este bean llegue a construirse ya que no veo ninguna declaración de registro producida por él. –

+0

¿su registrador está configurado correctamente? Pruebe System.out – Bozho

+0

Voy a intentarlo :) –

Respuesta

14

Gracias a Pete Muir, la solución fue implementar la interfaz de extensión. Una vez que hice eso, junto con la creación de un archivo especial, funcionó perfectamente.

Lo que hay que recordar es que, si desea observar (o actuar sobre) los eventos del contenedor, debe implementar la interfaz de extensión ya que es un evento especial.

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

Walter

+0

Gracias por publicar esto. +1 por todos lados. –

+2

Menciona la creación de un archivo especial. ¿Qué archivo fue eso? –

7

El "archivo especial" mencionada por Walter White es:

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

Ese archivo debe contener el nombre completo de la clase de extensión. ie:

org.mydomain.extension.MyExtension 
Cuestiones relacionadas