Example usage for org.springframework.web.context.request.async WebAsyncUtils getAsyncManager

List of usage examples for org.springframework.web.context.request.async WebAsyncUtils getAsyncManager

Introduction

In this page you can find the example usage for org.springframework.web.context.request.async WebAsyncUtils getAsyncManager.

Prototype

public static WebAsyncManager getAsyncManager(WebRequest webRequest) 

Source Link

Document

Obtain the WebAsyncManager for the current request, or if not found, create and associate it with the request.

Usage

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