Bean com escopo de solicitação de promoção de primavera para threads filho (HttpServletRequest)

Eu tentei muitas coisas agora, mas parece que estou perdendo uma peça do quebra-cabeça. Aqui está a história: Eu tenho um bean com escopo de solicitação que lê alguns SessionContext do HttpServletRequest. Este atributo é definido em um filtro. Portanto, isso está funcionando absolutamente bem enquanto o código é executado no thread correto.

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

Agora comecei a usar o novo recurso java 8s CompletableFuture e tenho três desses recursos computando coisas em paralelo enquanto o encadeamento de solicitação aguarda o resultado. O que eu quero fazer é promover / entregar / propagar o bean ou solicitar de uma maneira que ele possa ser usado em threads filho que foram gerados a partir do segmento http original. Em particular, eu gostaria de obter o SessionContext do HttpServletRequest de dentro de um CompletableFuture fornecido assíncrono.

o que eu tentei é isso (implementação substituída de get):

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

Mas isso obviamente tem o mesmo resultado que o bean com escopo da solicitação. Bem, "getRequest" retorna nulo em vez de uma exceção lançada.

Como terceira abordagem, tentei issopostagem original:

ConfigurableBeanFactory cbf = (ConfigurableBeanFactory) beanFactory;

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

cbf.registerScope("simpleThreadScope", simpleThreadScope);

E eu defino o escopo do SessionContextProviderImpl como "simpleThreadScope". Infelizmente, isso também não funcionou e lançou uma exceção que é usada fora do escopo de uma solicitação.

O ambiente que estou usando: Jersey juntamente com injeção de mola.

Talvez alguém tenha alguma ideia?

Saudações

questionAnswers(2)

yourAnswerToTheQuestion