Hi all,

I'm running into a problem with tomcat, which I believe is self-inflicted.
 Mostly I just want to confirm my suspicions.

I'm doing some fairly high-rate polling (using
JavaScript/XmlHttpRequest/DWR).  I'm polling, which is just calling the DWR
servlet once every second (using setTimeout on the response callback).

Now.. So far nothing should seem out of the ordinary.  And indeed many of
these polling cycles do run and complete successfully.  However after a
number of cycles (somewhere around 60), I start to get
NullPointerExceptions from the apache tomcat code.  Looks like from the
Response.recycle method, etc.  Full stack trace below.

Now.. I don't think there's anything wrong with tomcat here.. I've been
using tomcat for years, and it's pretty rock solid.  I suspect the problem
is in my lack of understanding of the life cycle of the request/response
objects.  Here's the details in what I'm doing, and what I suspect I'm
doing wrong:

This poll has the job of batching up "data requests" from the client
JavaScript code and passing them off to the server.  On the server, each
data request is spawned off to a new thread using a thread pool.  After the
threads are posted to the thread pool, the originating servlet request
returns.  However, before the response is committed, when the thread is
created for the thread pool, I'm assigning the HttpServletRequest and
Response (and the HttpSession) as local thread variables.  Once the thread
is finished, I remove the references by assigning the local variables to
null.

So.. When I'm trying to preserve the request, response and session objects
in a thread, knowing that the response will be committed before the thread
dies, am I breaking a cardinal rule?  Should I expect that tomcat will
throw NullPointerExceptions because of this?

Thanks!
-darrell


Full stack trace:Aug 30, 2013 9:50:51 PM
org.apache.coyote.http11.Http11Processor process
SEVERE: Error finishing response
java.lang.NullPointerException
at org.apache.tomcat.util.http.MimeHeaders.setValue(MimeHeaders.java:302)
at
org.apache.coyote.http11.Http11Processor.prepareResponse(Http11Processor.java:1558)
at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:958)
at org.apache.coyote.Response.action(Response.java:181)
at
org.apache.coyote.http11.InternalOutputBuffer.endRequest(InternalOutputBuffer.java:403)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:903)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:680)
Aug 30, 2013 9:50:51 PM
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process
SEVERE: Error reading request, ignored
java.lang.NullPointerException
at org.apache.tomcat.util.http.MimeHeaders.clear(MimeHeaders.java:152)
at org.apache.coyote.Response.recycle(Response.java:579)
at
org.apache.coyote.http11.InternalOutputBuffer.nextRequest(InternalOutputBuffer.java:373)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:925)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:680)

Reply via email to