You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "matthew c. mead" <m-...@goof.com> on 2005/03/09 23:31:31 UTC

Issues with client abort during streamed file

I've seemingly run into a brick wall...  I'm about to start diddling 
around in the Tapestry source code, but wanted to check here as a sanity 
check first.

I am streaming files out of a Tapestry application deployed in Tomcat 
5.0.28.  If the user cancels the transfer, I catch and handle a 
org.apache.catalina.connector.ClientAbortException in my page class.  No 
problem, right?

Wrong.  The first exception subsequently shows up in the log.  If the 
user then attempts to do anything with the application that requires the 
session, they get presented with the Tomcat exception page.  Tapestry 
logs the second exception below.

Is there a way to prevent Tapestry from invalidating the session when 
the user aborts data transfer?

THANKS!


-matt


[1644514][WARN][tapestry.engine.AbstractEngine] Exception during 
post-request cleanup.
ClientAbortException:  java.net.SocketException: Broken pipe
        at 
org.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:373)
        at 
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:398)
        at 
org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:318)
        at 
org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297)
        at 
org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:85)
        at 
org.apache.tapestry.request.ResponseOutputStream.forceFlush(ResponseOutputStream.java:149)
        at 
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:928)
        at 
org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:197)
        at 
org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:158)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
        at 
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
        at java.lang.Thread.run(Thread.java:552)

[1716844][WARN][tapestry.engine.AbstractEngine] Unable to present 
exception page.
org.apache.tapestry.ApplicationRuntimeException: getCreationTime: 
Session already invalidated
        at 
org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:382)
        at 
org.apache.tapestry.engine.AbstractEngine.renderResponse(AbstractEngine.java:732)
        at 
org.apache.tapestry.engine.AbstractEngine.activateExceptionPage(AbstractEngine.java:459)
        at 
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:914)
        at 
org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:197)
        at 
org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:158)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
        at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
        at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
        at 
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
        at 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
        at java.lang.Thread.run(Thread.java:552)
Caused by: java.lang.IllegalStateException: getCreationTime: Session 
already invalidated
        at 
org.apache.catalina.session.StandardSession.getCreationTime(StandardSession.java:920)
        at 
org.apache.catalina.session.StandardSessionFacade.getCreationTime(StandardSessionFacade.java:77)
        at 
org.apache.tapestry.request.RequestContext.write(RequestContext.java:751)
        at 
org.apache.tapestry.request.RequestContext.render(RequestContext.java:1062)
        at 
org.apache.tapestry.components.Delegator.renderComponent(Delegator.java:45)
        at 
org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
        at 
org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:624)
        at org.apache.tapestry.html.Shell.renderComponent(Shell.java:124)
        at 
org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
        at 
org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:118)
        at 
org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:857)
        at 
org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:300)
        at 
org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:368)
        ... 31 more



-- 
matthew c. mead

http://www.goof.com/