2010-08-22 7 views
6

Ich versuche, sowohl die Start-und Herunterfahren Ereignisse für eine CDI-Webanwendung zu beobachten. Ich habe eine ApplicationScoped Bean, die für diese Ereignisse lauscht:CDI - Observing Container Ereignisse

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

Ich sehe nichts in den Protokollen.

Was fehlt mir?

+0

Ich habe eine leere beans.xml in diesem Archiv. Ich glaube nicht, dass diese Bohne jemals konstruiert wird, da ich keine von ihr erzeugten Log-Anweisungen sehe. –

+0

ist Ihr Logger richtig konfiguriert? Try System.out – Bozho

+0

Ich gebe das einen Versuch :) –

Antwort

14

Dank Pete Muir bestand die Lösung darin, die Erweiterungsschnittstelle zu implementieren. Sobald ich das gemacht habe, zusammen mit dem Erstellen einer speziellen Datei, hat es perfekt funktioniert.

Die Sache zu erinnern ist, wenn Sie Container-Ereignisse beobachten (oder handeln) möchten, müssen Sie die Erweiterungsschnittstelle implementieren, da es ein besonderes Ereignis ist.

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

Walter

+0

Danke für das Posten. +1 überall. –

+2

Sie erwähnen das Erstellen einer speziellen Datei. Welche Datei war das? –

7

Die "spezielle Datei" erwähnt von Walter White ist:

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

Diese Datei den vollständig qualifizierten Namen Ihres Erweiterungsklasse enthalten sollte. ie:

org.mydomain.extension.MyExtension