Home Spring Spring3.2 Spring 3.2 Asynchronous Request Processing
Questions:Ask|Latest

 
 

Share on Google+Share on Google+

Spring 3.2 Asynchronous Request Processing

Advertisement
In this section, you will learn about Asynchronous Request Processing in Spring MVC 3.2.

Spring 3.2 Asynchronous Request Processing

In this section, you will learn about Asynchronous Request Processing in Spring MVC 3.2.

Before understanding asynchronous request processing, you must be familiar with Servlet 3 async processing feature.

Servlet 3 async processing

 Given below the sequence of events of Servlet 3 async processing :

  • By calling request.startAsync(), you can put ServletRequest in asynchronous mode. Due to this , Servlet and any Filters exits but  response still open , permitting other thread to complete the processing.

  • The request.startAsync() returns AsynContext which can be utilize later to control the further processing. For example, dispatch() method can be utilized to dispatch the request back to the Servlet container.

  • The current DispatcherType, provided by the ServletRequest, can be utilized to differentiate when a Servlet / a Filter is processing the initial request processing thread and when it is processing in an asynchronous dispatch.

Asynchronous Request Processing

Spring 3.2 asynchronous request processing is based on Servlet 3 based asynchronous request processing. Spring 3.2 asynchronous request processing returns java.util.concurrent.Callable and DeferredResult instead of returning a value and bring out value from a separate thread.

When a application requires to return value asynchronously within a thread handled by Spring MVC, a java.util.concurrent.Callable is returned. Given below the example of a controller method returning Callable :

@RequestMapping(method=RequestMethod.POST)
public Callable<String> UploadFile(final MultipartFile file) {

return new Callable<String>() {
public Object call() throws Exception {
// ...
return "anyView";
}
};
}

When a application requires to return value asynchronously from a thread of its own selection, a DeferredResult can be returned.
Given below the example of a controller method returning DeferredResult :

@RequestMapping("/statements")
@ResponseBody
public DeferredResult<String> statements() {
DeferredResult<String> defResult = new DeferredResult<String>();
// Save the defResult in memory
return defResult;
}


// In some other thread...
defResult.setResult(data);

Given below the sequence for Asynchronous Request Processing with Callable :

  • First, a Callable is returned by the Controller.

  • Asynchronous processing starts by the Spring MVC and also for processing in a separate thread, it submits the Callable to a TaskExecutor.

  • The response stays open in spite of the DispatcherServlet and all Filter's exit.

  • The result is created by the Callable and request is dispatch back to the Servlet container by the Spring MVC.

  •  The DispatcherServlet called once again and processing restarts with the asynchronously created result from the Callable.

Given below the sequence for Asynchronous Request Processing with a DeferredResult :

  • First, a DeferredResult is returned by the Controller and it is saved in memory fro further access.

  • Asynchronous processing starts by the Spring MVC .

  • The response stays open in spite of the DispatcherServlet and all Filter's exit.

  • From some thread, the application sets the DeferredResult and request is dispatch back to the Servlet container by the Spring MVC.

  • The DispatcherServlet called once again and processing restarts with the asynchronously created result from the Callable.



Advertisement

If you enjoyed this post then why not add us on Google+? Add us to your Circles



Liked it!  Share this Tutorial


Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.

Posted on: January 8, 2013

Related Tutorials

Ask Questions?    Discuss: Spring 3.2 Asynchronous Request Processing  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments
DMCA.com