CDI - Observación de contenedores Eventos
-
30-09-2019 - |
Pregunta
Estoy intentando observar tanto los eventos de inicio y cierre de una aplicación web CDI. Tengo un bean ApplicationScoped que escuchas para esos eventos:
@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 falta?
Solución
Gracias a Pete Muir, la solución fue implementar la interfaz de extensión. Una vez que lo hice, junto con la creación de un archivo especial, que funcionó a la perfección.
Lo que hay que recordar es, si se desea observar (o actuar sobre) los eventos de contenedores, debe implementar la interfaz de extensión, ya que es un evento especial.
https: //docs.jboss. org / soldadura / reference / latest / es-eS / html / extend.html # d0e4984
Walter
Otros consejos
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. es decir:
org.mydomain.extension.MyExtension