Package org.enigma1510.async.springtomcat.web

Source Code of org.enigma1510.async.springtomcat.web.ExampleController$RequestContext

package org.enigma1510.async.springtomcat.web;

import static reactor.event.selector.Selectors.$;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.async.DeferredResult;

import reactor.core.Environment;
import reactor.core.Reactor;
import reactor.core.spec.Reactors;
import reactor.event.Event;
import reactor.function.Consumer;

@RequestMapping("/example")
@Controller
public class ExampleController {
  public Logger log = Logger.getLogger(getClass());

  private Environment environment;
  private Reactor defaultEventLoopReactor;

  @PostConstruct
  public void init() {
    environment = new Environment();
    defaultEventLoopReactor = Reactors.reactor().env(environment).dispatcher(Environment.EVENT_LOOP).get();

    defaultEventLoopReactor.on($("request"),
        new Consumer<Event<RequestContext>>() {

          @Override
          public void accept(Event<RequestContext> event) {
            RequestContext context = event.getData();
            DeferredResult<ExampleResponse> deferredResult = context.deferredResult;
            HttpServletResponse servletResponse = context.servletResponse;

            ExampleResponse exampleResponse = new ExampleResponse();
            exampleResponse.setMessage( "success");
            exampleResponse.setStatus( "OK");
           
            log.info("setting response status");
            servletResponse.setStatus( HttpServletResponse.SC_BAD_REQUEST);
           
            log.info("setting result.");
            deferredResult.setResult( exampleResponse);
          }
        });
  }

  @RequestMapping(method = RequestMethod.GET, produces = "application/json")
  @ResponseBody
  public DeferredResult<ExampleResponse> deferredResultExample( HttpServletResponse servletResponse) {
    log.info("controller method invoked");

    DeferredResult<ExampleResponse> deferredResult = new DeferredResult<ExampleResponse>( 2000l);

    RequestContext context = new RequestContext();
    context.deferredResult = deferredResult;
    context.servletResponse = servletResponse;
   
    log.debug("controller method sending event with deferredResult");
    defaultEventLoopReactor.notify("request", Event.wrap(context));

    log.debug("controller method returning deferredResult");
    return deferredResult;
  }
 
  private class RequestContext {
    private DeferredResult<ExampleResponse> deferredResult;
    private HttpServletResponse servletResponse;
  }

}
TOP

Related Classes of org.enigma1510.async.springtomcat.web.ExampleController$RequestContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.