List of usage examples for org.springframework.web.context.request.async WebAsyncUtils getAsyncManager
public static WebAsyncManager getAsyncManager(WebRequest webRequest)
From source file:io.jmnarloch.spring.boot.rxjava.mvc.SingleReturnValueHandler.java
@SuppressWarnings("unchecked") @Override// w w w .j av a 2 s . c om public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { if (returnValue == null) { mavContainer.setRequestHandled(true); return; } final Single<?> single = Single.class.cast(returnValue); WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(new SingleDeferredResult(single), mavContainer); }
From source file:fi.minedu.oiva.backend.spring.handler.CompletionStageReturnValueHandler.java
@SuppressWarnings("unchecked") @Override/*from w w w .j av a2 s .com*/ public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { if (returnValue == null) { mavContainer.setRequestHandled(true); return; } final DeferredResult<Object> deferredResult = new DeferredResult<>(); WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer); CompletionStage<?> future = (CompletionStage<?>) returnValue; future.whenComplete((result, ex) -> { if (ex != null) { deferredResult.setErrorResult(ex); } else { deferredResult.setResult(result); } }); }
From source file:io.jmnarloch.spring.boot.rxjava.mvc.ObservableReturnValueHandler.java
@SuppressWarnings("unchecked") @Override/* w ww . j a v a 2 s . c o m*/ public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { if (returnValue == null) { mavContainer.setRequestHandled(true); return; } final Observable<?> observable = Observable.class.cast(returnValue); WebAsyncUtils.getAsyncManager(webRequest) .startDeferredResultProcessing(new ObservableDeferredResult(observable), mavContainer); }
From source file:com.carlomicieli.jtrains.infrastructure.web.CompletableFutureReturnValueHandler.java
@Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { final DeferredResult<Object> deferredResult = new DeferredResult<>(); final CompletableFuture<?> future = (CompletableFuture<?>) returnValue; final CompletableFuture<Object> completedFuture = future.handle((ret, err) -> { if (ret != null) { deferredResult.setResult(ret); return ret; } else {//from w w w .j a va2s. c om deferredResult.setErrorResult(err); return null; } }); WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer); }
From source file:com.anderl.hibernate.ext.OpenSessionInViewFilter.java
@Override protected void doFilterUnignored(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { //TODO fixme//from ww w. j av a 2s .c o m SessionFactory sessionFactory = null; // SpringUtils.getSpringBeanFromWebCtx(sessionFactoryBeanName, SessionFactory.class); WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); String key = getAlreadyFilteredAttributeName(); boolean isFirstRequest = !isAsyncDispatch(request); //TODO ga2unte: this doesnt work, because isExtendedToNextRequest is always false if set in last request //possible fix to ensure session cleanup: create two sessions in sesionholder, one for extended requests, one for conversation //then here clean only conversation session // //if not extended to next request // if (!OpenSessionHelper.isExtendedToNextRequest(request)) { // //if there is still a session in sessionholder // if (OpenSessionHelper.getSessionFromCache() != null) { // //close that session // //example: user comes from conversation, session was set in OpenSessionInConversationFilter // //but user has navigated away from that conversation without setting ending the conversation // OpenSessionHelper.closeSessionFromCache(); // } // } if (isFirstRequest || !OpenSessionHelper.applySessionBindingInterceptor(asyncManager, key)) { Session session = OpenSessionHelper.getSession(request, key, sessionFactory); OpenSessionHelper.bindSessionToTransactionSnyManager(sessionFactory, asyncManager, key, session); } try { filterChain.doFilter(request, response); } finally { //always unbind session OpenSessionHelper.unbindSession(sessionFactory); //if not extended to next request, close session if (!OpenSessionHelper.isExtendedToNextRequest(request)) { OpenSessionHelper.closeSessionFromCache(); } else { log.debug("not closing session: extended to nextt request"); } } }
From source file:com.kixeye.chassis.transport.http.ListenableFutureReturnValueHandler.java
@Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { if (returnValue == null) { mavContainer.setRequestHandled(true); return;/*w ww . j a v a 2 s . c om*/ } final DeferredResult<Object> deferredResult = new DeferredResult<>(); Futures.addCallback((ListenableFuture<?>) returnValue, new FutureCallback<Object>() { @Override public void onSuccess(@Nullable Object result) { deferredResult.setResult(result); } @Override public void onFailure(Throwable t) { deferredResult.setErrorResult(t); } }); WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer); }
From source file:com.kixeye.chassis.transport.http.ObserableReturnValueHandler.java
@Override public void handleReturnValue(Object returnValue, MethodParameter returnType, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception { if (returnValue == null) { mavContainer.setRequestHandled(true); return;/*w w w. ja v a 2 s. com*/ } final DeferredResult<Object> deferredResult = new DeferredResult<>(); ((Observable<?>) returnValue).subscribe(new Observer<Object>() { @Override public void onCompleted() { if (!deferredResult.hasResult()) { logger.error("onComplete before onNext"); deferredResult.setResult(null); } } @Override public void onError(Throwable e) { deferredResult.setErrorResult(e); } @Override public void onNext(Object args) { deferredResult.setResult(args); } }); WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(deferredResult, mavContainer); }
From source file:com.sishuok.bigpipe.handler.BigpipeTaskReturnValueHandler.java
@Override public void handleReturnValue(final Object returnValue, final MethodParameter returnType, final ModelAndViewContainer mavContainer, final NativeWebRequest webRequest) throws Exception { final BigPipeTask bigPipeTask = (BigPipeTask) returnValue; final HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); final HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class); final DeferredResult<Void> deferredResult = new DeferredResult<Void>(); mavContainer.setRequestHandled(true); WebAsyncUtils.getAsyncManager(request).startDeferredResultProcessing(deferredResult, mavContainer); final BigPipeContext context = new BigPipeContext(request.getContextPath(), bigPipeTask.getModel()); //?pagelet? ? final String framePageletName = bigPipeTask.getFramePageletName(); final Pagelet framePagelet = pageletFinder.find(framePageletName); Assert.notNull(framePagelet, framePageletName + " pagelet not exists"); final BigPipeContext frameContext = context.copy(); final PageletResult framePageletResult = framePagelet.run(frameContext, response); final PageletView framePageletView = pageletViewResolver.resolve(framePageletResult); framePageletView.render(frameContext, response); final AtomicInteger counter = new AtomicInteger(bigPipeTask.getPageletNames().size()); //?Npagelet?/* w w w . j a v a 2s. co m*/ for (String otherPageletName : bigPipeTask.getPageletNames()) { final Pagelet pagelet = pageletFinder.find(otherPageletName); Assert.notNull(pagelet, otherPageletName + " pagelet not exists"); //??? executor.execute(new Runnable() { @Override public void run() { try { final BigPipeContext pageletContext = context.copy(); final PageletResult pageletResult = pagelet.run(pageletContext, response); final PageletView pageletView = pageletViewResolver.resolve(pageletResult); pageletView.render(pageletContext, response); } catch (Exception e) { e.printStackTrace(); // } if (counter.decrementAndGet() <= 0) { deferredResult.setResult(null); } } }); } }
From source file:co.paralleluniverse.springframework.web.servlet.mvc.method.annotation.FiberRequestMappingHandlerAdapter.java
/** * Invoke the {@link RequestMapping} handler method preparing a {@link ModelAndView} * if view resolution is required./*from w w w .j a v a2 s.co m*/ */ private ModelAndView invokeHandleMethod(HttpServletRequest request, HttpServletResponse response, HandlerMethod handlerMethod) throws Exception { ServletWebRequest webRequest = new ServletWebRequest(request, response); WebDataBinderFactory binderFactory = getDataBinderFactory(handlerMethod); ModelFactory modelFactory = getModelFactory(handlerMethod, binderFactory); FiberServletInvocableHandlerMethod requestMappingMethod = createRequestMappingMethod(handlerMethod, binderFactory); ModelAndViewContainer mavContainer = new ModelAndViewContainer(); mavContainer.addAllAttributes(RequestContextUtils.getInputFlashMap(request)); modelFactory.initModel(webRequest, mavContainer, requestMappingMethod); mavContainer.setIgnoreDefaultModelOnRedirect(this.ignoreDefaultModelOnRedirect); AsyncWebRequest asyncWebRequest = WebAsyncUtils.createAsyncWebRequest(request, response); asyncWebRequest.setTimeout(this.asyncRequestTimeout); final WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); asyncManager.setTaskExecutor(this.taskExecutor); asyncManager.setAsyncWebRequest(asyncWebRequest); asyncManager.registerCallableInterceptors(this.callableInterceptors); asyncManager.registerDeferredResultInterceptors(this.deferredResultInterceptors); if (asyncManager.hasConcurrentResult()) { Object result = asyncManager.getConcurrentResult(); mavContainer = (ModelAndViewContainer) asyncManager.getConcurrentResultContext()[0]; asyncManager.clearConcurrentResult(); if (logger.isDebugEnabled()) { logger.debug("Found concurrent result value [" + result + "]"); } requestMappingMethod = requestMappingMethod.wrapConcurrentResult(result); } requestMappingMethod.invokeAndHandle(webRequest, mavContainer); if (asyncManager.isConcurrentHandlingStarted()) { return null; } return getModelAndView(mavContainer, modelFactory, webRequest); }
From source file:com.mystudy.source.spring.mvc.DispatcherServlet.java
/** * Exposes the DispatcherServlet-specific request attributes and delegates to {@link #doDispatch} * for the actual dispatching./*ww w . j a va 2 s . c o m*/ */ @Override protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception { if (logger.isDebugEnabled()) { String requestUri = urlPathHelper.getRequestUri(request); String resumed = WebAsyncUtils.getAsyncManager(request).hasConcurrentResult() ? " resumed" : ""; logger.debug("DispatcherServlet with name '" + getServletName() + "'" + resumed + " processing " + request.getMethod() + " request for [" + requestUri + "]"); } // Keep a snapshot of the request attributes in case of an include, // to be able to restore the original attributes after the include. Map<String, Object> attributesSnapshot = null; if (WebUtils.isIncludeRequest(request)) { logger.debug("Taking snapshot of request attributes before include"); attributesSnapshot = new HashMap<String, Object>(); Enumeration<?> attrNames = request.getAttributeNames(); while (attrNames.hasMoreElements()) { String attrName = (String) attrNames.nextElement(); if (this.cleanupAfterInclude || attrName.startsWith("org.springframework.web.servlet")) { attributesSnapshot.put(attrName, request.getAttribute(attrName)); } } } // Make framework objects available to handlers and view objects. request.setAttribute(WEB_APPLICATION_CONTEXT_ATTRIBUTE, getWebApplicationContext()); request.setAttribute(LOCALE_RESOLVER_ATTRIBUTE, this.localeResolver); request.setAttribute(THEME_RESOLVER_ATTRIBUTE, this.themeResolver); request.setAttribute(THEME_SOURCE_ATTRIBUTE, getThemeSource()); FlashMap inputFlashMap = this.flashMapManager.retrieveAndUpdate(request, response); if (inputFlashMap != null) { request.setAttribute(INPUT_FLASH_MAP_ATTRIBUTE, Collections.unmodifiableMap(inputFlashMap)); } request.setAttribute(OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap()); request.setAttribute(FLASH_MAP_MANAGER_ATTRIBUTE, this.flashMapManager); try { doDispatch(request, response); } finally { if (WebAsyncUtils.getAsyncManager(request).isConcurrentHandlingStarted()) { return; } // Restore the original attribute snapshot, in case of an include. if (attributesSnapshot != null) { restoreAttributesAfterInclude(request, attributesSnapshot); } } }