Nie testowałem jeszcze tego, ale wierzę, że to zadziała. Dla każdego niestandardowego Zakres/kontekst chcesz w aplikacji, wystarczy dodać, że kontekst, poprzez rozszerzenie, gdy pojemnik jest inicjowany:
public void afterBeanDiscovery(@Observes AfterBeanDiscover afterBeanDiscovery, BeanManager beanManager)
{
CustomContext customContext = new CustomContext();
afterBeanDiscovery.addContext(customContext);
beanManager ...
}
Teraz sztuką jest, trzeba posiadać odniesienie do tej sytuacji więc jeśli chcesz zacząć lub zatrzymać, możesz. To byłoby coś takiego:
@Inject
protected HttpRequestLifecycle httpRequestLifecycle;
public void doSomething()
{
startContext();
doStuff();
stopContext();
}
public void startContext()
{
httpRequestContextLifecycle.getHttpRequestContext().activate();
}
To powinno wystarczyć, nie ma tam bogactwa dokumentacji, więc mam nadzieję, że to pomoże.
Każdy zainteresowany, sprawdź źródło tutaj: http://github.com/walterjwhite/server.web.application
Walter
Właściwie, to dało mi bardzo bliskie. Nawet po uruchomieniu kontekstu, ustawiając go jako aktywny, nadal otrzymuję No Contexts Active dla zakresu ... –
Inna uwaga tutaj - nie można wstrzyknąć kontekstu, chyba że zrobi się singleton. Jeśli ma zasięg aplikacji, nie masz gwarancji, że uzyskasz ten sam kontekst, który znajduje się na mapie kontekstów. Oznacza to, że kontekst, który aktywujesz, jest fikcyjnym kontekstem, nie kontroluje niczego. To, co udało mi się zrobić, zawierało odniesienie do moich klas zarządzania cyklem życia, a następnie wstrzykiwanie tego cyklu życia i uzyskiwanie kontekstu. –
Jeśli to był @Singleton, w jaki sposób różnisz wiele żądań? Nie powinieneś tworzyć i aktywować kontekstu gdzieś w słuchaczu kontekstu? –