File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Web Component Certification (SCWCD/OCPJWCD) and the fly likes AsyncContext setTimeout doubt ? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Web Component Certification (SCWCD/OCPJWCD)
Bookmark "AsyncContext setTimeout doubt ?" Watch "AsyncContext setTimeout doubt ?" New topic

AsyncContext setTimeout doubt ?

gurpeet singh
Ranch Hand

Joined: Apr 04, 2012
Posts: 924

the api for setTimeout says :

Sets the timeout (in milliseconds) for this AsyncContext.
The timeout applies to this AsyncContext once the container-initiated dispatch during which one of the ServletRequest#startAsync methods was called has returned to the container.

The timeout will expire if neither the complete() method nor any of the dispatch methods are called. A timeout value of zero or less indicates no timeout.

If setTimeout(long) is not called, then the container's default timeout, which is available via a call to getTimeout(), will apply.

timeout - the timeout in milliseconds
IllegalStateException - if this method is called after the container-initiated dispatch, during which one of the ServletRequest#startAsync methods was called, has returned to the container

im unable to understand what does container-initiated dispatch means ?

i searched the forum and found this link where the discussion regarding the same was going on. please have a look at that discussion. piyush has tried to answer it by saying that container-initiated dispatch means the service() or the doFilter() method but he is not sure. my second question is same what piyush said , how can we get IllegalStateException mentioned in the setTimeOut method above ? please help
Jim Forest

Joined: Jan 07, 2004
Posts: 2

About your second question:
void setTimeout(long timeout)
can throw (un-checked) IllegalStateException, when someone is setting a timeout on a AsyncContext object, which already FINISHED its work.

Have a look here:

last line of code should throw an exception

OK, I must admit, my code sample is very primitive, but I'm too lazy to write now multi-class example with async requests running in separate threads
And exactly under such conditions (multi-threaded servlet processing) you have not so bad chance to try working with object, which already finished its work (life-cycle).
I hope, you get the idea: once AsyncContext is recycled you cant use it anymore.
BTW, this is true not only about setTimeout(), but also for nearly all other methods in AsyncContext interface.

And one more hint: just look into the source code of some open-source implementation. I've just done that with "tomcat 7.0"
I agree. Here's the link:
subject: AsyncContext setTimeout doubt ?
It's not a secret anymore!