2010-08-22 18 views
6

Sto cercando di osservare sia gli eventi di avvio che di arresto per un'applicazione Web CDI. Ho un bean ApplicationScoped che ascolta quegli eventi:CDI - Observing Container Events

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

Non vedo nulla nei registri.

Cosa mi manca?

+0

Ho un bean.xml vuoto in questo archivio. Non credo che questo bean venga mai costruito in quanto non vedo nessuna dichiarazione di log prodotta da esso. –

+0

il tuo logger è configurato correttamente? Prova System.out – Bozho

+0

Ti darò una prova :) –

risposta

14

Grazie a Pete Muir, la soluzione era implementare l'interfaccia Extension. Una volta che l'ho fatto, insieme alla creazione di un file speciale, ha funzionato perfettamente.

La cosa da ricordare è che se si desidera osservare (o agire su) eventi contenitore, è necessario implementare l'interfaccia di estensione poiché si tratta di un evento speciale.

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

Walter

+0

Grazie per aver postato questo. +1 tutto intorno. –

+2

Hai menzionato la creazione di un file speciale. Che file era? –

7

Il "file speciale" di cui parla Walter White è:

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

Questo file deve contenere il nome completo della classe Extension. ie:

org.mydomain.extension.MyExtension