On 07/08/2013 17:14, Daniel Mikusa wrote:
> I have a questions regarding the Non Blocking API introduced in Tomcat 8.
>
> I'm looking at the TestNonBlockingAPI test as an example, specifically the
> NBReadServlet class.
>
> @WebServlet(asyncSupported = true)
> public class NBReadServlet extends TesterServlet {
> private static final long serialVersionUID = 1L;
> public volatile TestReadListener listener;
> @Override
> protected void service(HttpServletRequest req, HttpServletResponse resp)
> throws ServletException, IOException {
> // step 1 - start async
> AsyncContext actx = req.startAsync();
> actx.setTimeout(Long.MAX_VALUE);
> actx.addListener(new AsyncListener() {
> // removed for brevity
> });
> // step 2 - notify on read
> ServletInputStream in = req.getInputStream();
> listener = new TestReadListener(actx);
> in.setReadListener(listener);
>
> listener.onDataAvailable();
> }
> }
>
> My question is why does the test call "listener.onDataAvailable()" at the end?
>
> In regards to the "onDataAvailable()" method, Section 3.7 of the spec says…
>
> "The onDataAvailable method is invoked on the ReadListener when data is
> available to read from the incoming request stream. The container will invoke
> the method the first time when data is available to read. The container will
> subsequently invoke the onDataAvailable method if and only if isReady method
> on ServletInputStream, described below, returns false."
>
> ...which leads me to believe that the container should be calling
> onDataAvailable and not the servlet.
>
> As a side note, my test works if I call "onDataAvailable()" from my test
> servlet. Otherwise it fails and times out.
I think you may have a bug there. Please could you create a Bugzilla
entry for it.
Cheers,
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]