Thanks for all your input, I think I have now an implementation that works on Tomcat and Jetty.
By testing it, I've found something that can be an interesting information for you. The upload variant with forking a new thread is very very slow. My non scientific tests by uploading a file from 1.4 GB: - with tomca 8.0.3: /upload2: 4.5 s /upload (with new Thread): 2 mn - with jetty 9.1: /upload2: 3.6 s /upload (with new Thread): 4.1 s I tested it by removing all Thread.sleep from https://github.com/yanns/servlet31_async/blob/master/src/main/java/com/yann/ReadListenerImpl.java#L24 Cheers, Yann 2014-03-20 9:36 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: > One option I am trying is to ignore onAllDataRead and to use > sevletInputStream.isFinished to know when the body is totally > consumed: > > https://github.com/yanns/servlet31_async/blob/master/src/main/java/com/yann/ReadListenerImpl.java#L55 > > Is it a dumb idea? > > 2014-03-20 7:42 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: >> Thanks Rémy and Mark for the quick feedback and explanations! >> >> On Mar 19, 2014 6:40 PM, "Mark Thomas" <ma...@apache.org> wrote: >>> >>> On 19/03/2014 17:04, Rémy Maucherat wrote: >>> > 2014-03-19 17:47 GMT+01:00 Yann Simon <yann.simon...@gmail.com>: >>> > >>> >>> This is because you're forking a thread, it won't concurrently invoke >>> >>> the >>> >>> two events (which would be invalid). >>> >> >>> >> Can you explain more please? I have difficulties to understand your >>> >> sentence. >>> >> >>> > >>> > It means the container has to wait until onReadPossible completes to >>> > call >>> > onDataAvailable. >>> >>> I think Rémy meant Tomcat waits for onReadPossible() to complete before >>> calling onAllDataRead() >>> >>> If you look at the traces from the sample code, you'll see that the >>> >>> onDataAvailable end >>> >>> message always appears before >>> >>> onAllDataRead >>> >>> which is all you can rely on. You are seeing slightly odd behaviour >>> because you are spawning a new thread to do the read. If you do that you >>> have to handle the case that your new thread may trigger the >>> onAllDataRead event and handle it appropriately. I don't see anything >>> for Tomcat to do here. >>> >>> Mark >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org >>> For additional commands, e-mail: users-h...@tomcat.apache.org >>> >> --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org