Spring, der Request Scoped Bean für untergeordnete Threads (HttpServletRequest) befördert

Ich habe jetzt viele Dinge ausprobiert, aber ich scheine ein Stück des Puzzles zu verpassen. Hier ist die Geschichte: Ich habe ein Request Scoped Bean, das SessionContext aus dem HttpServletRequest liest. Dieses Attribut wird in einem Filter festgelegt. Das funktioniert also einwandfrei, solange der Code auf dem richtigen Thread ausgeführt wird.

@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.INTERFACES)
public class SessionContextProviderImpl implements SessionContextProvider<SessionContext> {
    private final HttpServletRequest _request;

    @Autowired
    public SessionContextProviderImpl(HttpServletRequest request) {
        _request = request;
    }

    @Override
    public SessionContext get() {
        return (SessionContext) _request.getAttribute(Constants.SESSION_CONTEXT_IDENTIFIER);
    }
}

Nun habe ich angefangen, die neue Funktion CompletableFuture von Java 8 zu verwenden, und ich habe drei dieser Funktionen, die parallel Sachen berechnen, während der Anfragethread auf das Ergebnis wartet. Was ich tun möchte, ist, die Bohne oder die Anfrage in einer Weise zu fördern / weiterzugeben / zu verbreiten, dass sie für untergeordnete Threads verwendet werden kann, die vom ursprünglichen http-Thread erzeugt wurden. Insbesondere möchte ich den SessionContext aus dem HttpServletRequest in einer asynchron bereitgestellten CompletableFuture erhalten.

was ich versucht habe, ist dies (ersetzt Implementierung von get):

final HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
request.getAttribute(Constants.SESSION_CONTEXT_IDENTIFIER);

Aber dies hat offensichtlich das gleiche Ergebnis wie die Bean mit Anforderungsbereich. Nun, "getRequest" gibt null zurück, anstatt eine Ausnahme auszulösen.

ls dritten Ansatz habe ich versucht, dieseoriginal post:

ConfigurableBeanFactory cbf = (ConfigurableBeanFactory) beanFactory;

org.springframework.beans.factory.config.Scope simpleThreadScope = new SimpleThreadScope();

cbf.registerScope("simpleThreadScope", simpleThreadScope);

Und ich setze den Bereich des SessionContextProviderImpl auf "simpleThreadScope". Leider hat dies auch nicht funktioniert und eine Ausnahme ausgelöst, dass es außerhalb eines Anforderungsbereichs verwendet wird.

ie Umgebung, die ich benutze: Jersey zusammen mit Federeinspritzun

Vielleicht hat jemand eine Idee?

Grüß

Antworten auf die Frage(4)

Ihre Antwort auf die Frage