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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top