L.S,
I'm investigating a problem in which one of our servlets doesn't return
any headers most of the time (sometimes it does work, but it seems quite
random) After a bit of digging I found out that the reason the headers
aren't added is that the response already seems to be comitted.
I've added the following two lines to the top of my Servlet (these are
the first 2 lines of doGet())
if(response.isCommitted())
logger.error("WTF?");
and it seems that the response is already commited on the 1st line of my
servlet, before I've done anything to it. Also, I've got no filters
defined for this servlet. I've set a breakpoint on the logger.error line
and this is the stacktrace at that point:
Daemon Thread [TP-Processor3] (Suspended (breakpoint at line 31 in
ImageLoader))
ImageLoader.doGet(HttpServletRequest, HttpServletResponse) line: 31
ImageLoader(HttpServlet).service(HttpServletRequest,
HttpServletResponse) line: 690
ImageLoader(HttpServlet).service(ServletRequest, ServletResponse)
line: 803
ApplicationFilterChain.internalDoFilter(ServletRequest,
ServletResponse) line: 269
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse)
line: 188
StandardWrapperValve.invoke(Request, Response) line: 213
StandardContextValve.invoke(Request, Response) line: 174
StandardHostValve.invoke(Request, Response) line: 127
ErrorReportValve.invoke(Request, Response) line: 117
StandardEngineValve.invoke(Request, Response) line: 108
CoyoteAdapter.service(Request, Response) line: 174
JkCoyoteHandler.invoke(Msg, MsgContext) line: 200
HandlerRequest.invoke(Msg, MsgContext) line: 283
ChannelSocket.invoke(Msg, MsgContext) line: 773
ChannelSocket.processConnection(MsgContext) line: 703
ChannelSocket$SocketConnection.runIt(Object[]) line: 895
ThreadPool$ControlRunnable.run() line: 689
ThreadWithAttributes(Thread).run() line: 595
Looking at the enclosed CoyoteResponse object shows that the 'committed'
variable is set to true, but bytesWritten is 0, contentLength is 0,
contentType is null, etc. so there doesn't seem to have been anything
done to the response that could have triggered a commit.
I've also tried adding a response.reset() at the top of the method, this
also fails, 10 lines down the road the response is committed again (I
haven't touched the response object yet at that point in the code, I'm
also doing nothing multithreaded to the response object myself.
Furthermore for debugging I'm only using 1 client and that client is
firing requests serially and not in parallel). Requests are going
through a mod_jk on an Apache2.2 server, but direct connections to the
tomcat seem to show the same behaviour.
A response.reset() just before the response.addHeader seems to work, but
this, of course, isn't a real solution.
Does anyone have a clue what's going on ? I can't find anything in our
code that could trigger this behaviour, could it be a bug in Tomcat or
am I missing something ?
Sincerely,
Tom
--
**Tom van Wietmarschen**
Software Engineer
Service2Media B.V.
Vreelandseweg 7
1216 CG Hilversum
Capitool 41
7521 PL Enschede
Tel +31 (0)35 626 46 12
Fax +31 (0)35 626 46 13
www.service2media.com <http://www.service2media.com>
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]