Solicitud de promoción de Spring bean de ámbito a subprocesos secundarios (HttpServletRequest)

Intenté muchas cosas ahora, pero parece que me pierdo una pieza del rompecabezas. Aquí está la historia: tengo un bean de ámbito de solicitud que lee un poco de SessionContext de HttpServletRequest. Este atributo se establece en un filtro. Entonces, esto funciona absolutamente bien mientras el código se ejecuta en el hilo correcto.

@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);
    }
}

Ahora comencé a usar la nueva característica de Java 8 CompletableFuture y tengo tres de esas características que calculan cosas en paralelo mientras el hilo de solicitud espera el resultado. Lo que quiero hacer es promover / entregar / propagar el bean o la solicitud de manera que pueda usarse en subprocesos secundarios que se han generado desde el subproceso http original. En particular, me gustaría obtener el SessionContext de HttpServletRequest desde dentro de un CompletableFuture suministrado asincrónico.

lo que probé es esto (reemplazó la implementación de get):

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

Pero esto obviamente tiene el mismo resultado que el bean de ámbito de solicitud. Bueno, "getRequest" devuelve nulo en lugar de una excepción lanzada.

Como tercer enfoque probé estopublicación original:

ConfigurableBeanFactory cbf = (ConfigurableBeanFactory) beanFactory;

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

cbf.registerScope("simpleThreadScope", simpleThreadScope);

Y configuré el alcance de SessionContextProviderImpl para que sea "simpleThreadScope". Desafortunadamente, esto tampoco funcionó y arrojó una excepción de que se usa fuera del alcance de una solicitud.

El entorno que estoy usando: Jersey junto con inyección de primavera.

Tal vez alguien tiene alguna idea?

Saludos

Respuestas a la pregunta(2)

Su respuesta a la pregunta