Я еще не проверял это, но я считаю, что это сработает. Для каждого настраиваемой области/контекста вы хотите в вашем приложении, вам просто нужно добавить, что контекст с помощью расширения при инициализации контейнера:
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
На самом деле, это у меня очень близко. Даже после того, как я запустил контекст, установив его активным, я все еще получаю No Contexts Active для области ... – 2010-09-26 21:52:28
Другое примечание здесь - вы не можете вставлять контекст, если только вы не сделаете его одиночным. Если это область приложения, у вас нет гарантии, что вы получите тот же контекст, что и в карте контекстов. Это означает, что контекст, который вы активируете, является фиктивным контекстом, он ничего не контролирует. То, что я закончил, было ссылкой на него в моих классах управления жизненным циклом, а затем впрыском этого жизненного цикла и получения контекста. – 2010-09-28 12:41:03
Если бы это было @Singleton, как бы вы различали несколько запросов? Разве вы не должны создавать и активировать контекст где-нибудь в контекстном прослушивателе? –