/** @see RequestScopePropagator#wrap(Callable) */ // ServletScopes#continueRequest is deprecated, but it's not obvious their // recommended replacement is an appropriate drop-in solution; see // https://gerrit-review.googlesource.com/83971 @SuppressWarnings("deprecation") @Override protected <T> Callable<T> wrapImpl(Callable<T> callable) { Map<Key<?>, Object> seedMap = new HashMap<>(); // Request scopes appear to use specific keys in their map, instead of only // providers. Add bindings for both the key to the instance directly and the // provider to the instance to be safe. seedMap.put(Key.get(typeOfProvider(String.class), CanonicalWebUrl.class), Providers.of(url)); seedMap.put(Key.get(String.class, CanonicalWebUrl.class), url); seedMap.put(Key.get(typeOfProvider(SocketAddress.class), RemotePeer.class), Providers.of(peer)); seedMap.put(Key.get(SocketAddress.class, RemotePeer.class), peer); return ServletScopes.continueRequest(callable, seedMap); }
public ExtDirectJsonRequestProcessorThread() { Subject subject = SecurityUtils.getSubject(); checkState(subject != null, "Subject is not set"); // create the thread state by this moment as this is created in the master (web container) thread threadState = new SubjectThreadState(subject); final String baseUrl = BaseUrlHolder.get(); processRequest = ServletScopes.transferRequest(new Callable<String>() { @Override public String call() { threadState.bind(); UserIdMdcHelper.set(); try { // apply base-url from the original thread BaseUrlHolder.set(baseUrl); return ExtDirectJsonRequestProcessorThread.super.processRequest(); } finally { UserIdMdcHelper.unset(); threadState.restore(); } } }); }
@Inject GuiceRequestScopePropagator( @CanonicalWebUrl @Nullable Provider<String> urlProvider, @RemotePeer Provider<SocketAddress> remotePeerProvider, ThreadLocalRequestContext local, Provider<RequestScopedReviewDbProvider> dbProviderProvider) { super(ServletScopes.REQUEST, local, dbProviderProvider); this.url = urlProvider != null ? urlProvider.get() : null; this.peer = remotePeerProvider.get(); }
@Override public Map<Scope, ComponentScope> createScopeMap() { Map<Scope, ComponentScope> m = super.createScopeMap(); m.put(ServletScopes.REQUEST, ComponentScope.PerRequest); return m; }
@Override protected void configure() { bindScope(RequestScoped.class, ServletScopes.REQUEST); for (Binding binding : bindings) { binding.bind(); } }
private static Object doInRequestScope(Callable<Object> callable) throws Exception { return ServletScopes.scopeRequest(callable, Collections.<Key<?>, Object>emptyMap()).call(); }