CDI - написание пользовательских контекстов и областей
Вопрос
Я хотел бы иметь свои собственные контексты для некоторых проектов на основе CDI. Мне нужно (хочу) пользовательские призывы, чтобы я мог изолировать, как долго живет компонент и где.
Чтобы реализовать свой собственный контекст, вам необходимо реализовать контекстный интерфейс, который является довольно объяснительным, но как или где вам действительно определить, когда он создан?
Решение
Я еще не проверил это, но я верю, что это будет работать. Для каждого пользовательского объема / контекста вы хотите в своем приложении, вам просто нужно добавить это контекст через расширение, когда контейнер инициализирован:
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
Уолтер
Другие советы
Проверьте эту статью одона: Пользовательские призывы в CDI 1.0 и весна 3.1 (нижняя половина)