CDI - Scrittura contesti personalizzati e cannocchiali
Domanda
Mi piacerebbe avere i miei propri contesti di alcuni progetti CDI-based. Ho bisogno (vogliamo) personalizzato ambiti di modo che io possa isolare i quanto a lungo un vita dei componenti e dove.
Per implementare il proprio contesto, è necessario implementare l'interfaccia Context che è abbastanza auto-esplicativo, ma come o dove si ha realmente definire quando viene creato?
Soluzione
Non ho ancora testato questo, ma credo che questo funzionerà. Per ogni ambito personalizzato / contesto che si desidera nella propria applicazione, è sufficiente aggiungere tale contesto tramite un'estensione quando il contenitore viene inizializzato:
public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
CustomContext customContext = new CustomContext();
afterBeanDiscovery.addContext(customContext);
beanManager ...
}
Ora, il trucco è, è necessario mantenere un riferimento a tale contesto così poi quando si desidera avviare o interrompere esso, è possibile. Sarebbe qualcosa di simile:
@Inject
protected HttpRequestLifecycle httpRequestLifecycle;
public void doSomething()
{
startContext();
doStuff();
stopContext();
}
public void startContext()
{
httpRequestContextLifecycle.getHttpRequestContext().activate();
}
che dovrebbe farlo, non c'è una ricca documentazione là fuori, quindi spero che questo aiuta.
Chiunque sia interessato, controlla la fonte qui: http://github.com/walterjwhite/server.web.application
Walter
Altri suggerimenti
Controlla questo articolo DZone: Custom ambiti in CDI 1.0 e 3.1 Primavera (Metà inferiore)