Vadim Gritsenko wrote:

>>From: Jeremy Quinn [mailto:[EMAIL PROTECTED]]
>>
<snip/>

>This means: Hold stream till end-of-processing. This allows: reset
>response completely, and output clean error page, without parts of XML
>previously processed.
>
>>If an internal pipeline makes an error, and has it's own
>>error-handler, I would hope that error could be inline,
>>
>
>Then the pipeline which called this internal one will never know that
>exception happened: it will get either result, or partial result and
>error (IIRC).
>

Yep : <handle-errors> isn't executed on internal request.

>Try also increasing buffer of the serializer, then environment will be
>able to reset the partial result and output clean error page. From the
>Environment:
>
<snip/>

tryResetResponse() has unfortunately nothing to do with serializer 
buffering : it is directly tied to the servlet engine's ouputstream 
buffering. This methods checks if response.isCommitted(), meaning some 
data was sent to the client, and if not, calls response.reset(), which 
empties the servlet engine's buffer.

So a solution to your problem, Jeremy, may be to increase the response 
buffer. javax.servlet.ServletResponse allows this through 
setBufferSize(), but this method doesn't exist on 
cocoon.environment.Response.

There are IMO two ways to set this value in Cocoon :
- add a new "buffer-size" parameter in web.xml : it will be then set for 
*all* requests, but having a global setting may be overkill for most request
- enhance <map:pipeline> with a "buffer-size" attribute, which allows 
fine-grained control of the buffer size at the pipeline level. This 
implies we add setBufferSize to cocoon's Request interface.

Wether we chose one or the other (or something else), I suggest to do it 
after 2.0.2.

There are also some related subjects that were left pending that could 
be discussed at that time :
- per-pipeline choice of the pipeline implementation, e.g. <map:pipeline 
type="caching">
- enhancement of <handle-errors> : having only types 404 and 500 and 
rather limiting, while a Notifying gives us an interesting "type" 
information that could be used to select a particular error handler.

Thoughts ?

Sylvain

-- 
Sylvain Wallez
  Anyware Technologies                  Apache Cocoon
  http://www.anyware-tech.com           mailto:[EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to