CDI - Написание пользовательских контекстов и областей - PullRequest
7 голосов
/ 25 сентября 2010

Я хотел бы иметь свой собственный контекст для некоторых проектов на основе CDI. Мне нужны (нужны) настраиваемые области видимости, чтобы я мог определить, как долго и где компонент живет.

Чтобы реализовать свой собственный контекст, вам нужно реализовать интерфейс Context, который довольно понятен, но как или где вы действительно определяете, когда он создается?

Ответы [ 2 ]

4 голосов
/ 26 сентября 2010

Я еще не проверял это, но я верю, что это будет работать. Для каждой настраиваемой области / контекста, которую вы хотите в своем приложении, вам просто нужно добавить этот контекст через расширение при инициализации контейнера:

public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
  CustomContext customContext = new CustomContext();
  afterBeanDiscovery.addContext(customContext);

  beanManager ...
}

Итак, хитрость в том, что вам нужно держать ссылку на этот контекст, чтобы потом, когда вы захотите запустить или остановить его, вы можете. Это было бы что-то вроде:

@Inject
protected HttpRequestLifecycle httpRequestLifecycle;

public void doSomething()
{
  startContext();
  doStuff();
  stopContext();
}

public void startContext()
{
  httpRequestContextLifecycle.getHttpRequestContext().activate();
}

Это должно сработать, там не так много документации, поэтому я надеюсь, что это поможет.

Кто-нибудь заинтересован, проверьте источник здесь: http://github.com/walterjwhite/server.web.application

Walter

1 голос
/ 16 июля 2011

Проверьте эту статью DZone: Пользовательские области в CDI 1.0 и Spring 3.1 (нижняя половина)

...