Hi all,
the outputBufferSize as a pipeline parameter doesn't help to push the output 
early to the client
(at least if the document is a small document <16k).

The reason is a BufferedOutputStream which is setup in the serializer
org.apache.xml.serializer.WriterToUTF8Buffered.java (2.7.0)

  /** number of bytes that the byte buffer can hold.
   * This is a fixed constant is used rather than m_outputBytes.lenght for 
performance.
   */
  private static final int BYTES_MAX=16*1024;

That buffer already was existing in xalan2.5.1 but there a directWrite
wrote out every byte with write(int);
Now the serializer writes out if the buffer is full or at end of document with 
write(byte[], int, int).

That means setting the outputBufferSize in sitemap to lower than 16*1024 is 
senseless
and the comment in org.apache.cocoon.environment.AbstractEnvironment.java
  // FIXME Triple buffering, anyone?
is correct: It makes no sense to buffer here. A value of 0 has the same effect as 
a value <= 16*1024.
(In detail the serializer buffer is for serialized bytes, in sitemap it is for 
pipeline bytes
 which probably is different depending on the stylesheet. I did not investigate 
how performance
 differs for outputBufferSize=0 or >0)

I use a real time application which has to write html immediately, independent 
of the number of bytes.
I use the following (and a Cocoon committer should propose that as a patch to 
the xalan team):

I add an attribute flush="on" to my xml stream. From now on xalan flushes at 
every endElement().
If I want to stop that I add an attribute flush="off" to my xml stream.

--- xalan-j_2_7_0.orig/src/org/apache/xml/serializer/ToHTMLStream.java  
2005-08-06 23:05:30.000000000 +0200
+++ xalan-j_2_7_0/src/org/apache/xml/serializer/ToHTMLStream.java       
2007-03-27 10:48:24.860050168 +0200
@@ -749,6 +749,7 @@
      *  @see #endElement
      *  @see org.xml.sax.AttributeList
      */
+    boolean flushAll = false;
     public void startElement(
         String namespaceURI,
         String localName,
@@ -756,6 +757,15 @@
         Attributes atts)
         throws org.xml.sax.SAXException
     {
+        if(atts != null)
+        {
+            String flushAtt = atts.getValue("flush");
+            if(flushAtt != null)
+            {
+                if(flushAtt.equals("on")) flushAll = true;
+                else if(flushAtt.equals("off")) flushAll = false;
+            }
+        }

         ElemContext elemContext = m_elemContext;

@@ -887,6 +897,7 @@
         final String name)
         throws org.xml.sax.SAXException
     {
+        if(flushAll) flushWriter();
         // deal with any pending issues
         if (m_cdataTagOpen)
             closeCDATA();

The same has to applied to ToStream.java.

I hope that others find it useful too.

Regards,
Michael

--
WINCOR NIXDORF International GmbH
Retail Store Solutions
Wernerwerkdamm 16
13629 Berlin, Germany
Phone +49 (0) 30 5017-1386
Fax +49 (0) 30 5017-1305
E-Mail [EMAIL PROTECTED]

WINCOR NIXDORF International GmbH
Sitz der Gesellschaft: 33106 Paderborn, Heinz-Nixdorf-Ring 1
Registergericht Paderborn HRB 3507
Geschäftsführer: Eckard Heidloff (Vorsitzender), Stefan Auerbach, Jürgen Wilde, 
Dr. Jürgen Wunram
Vorsitzender des Aufsichtsrats: Karl-Heinz Stiller
Steuernummer: 339/5884/0031
Ust-ID Nr.: DE812927716
WEEE-Reg.-Nr. DE44477193

Diese E-Mail enthält vertrauliche Informationen. Wenn Sie nicht der richtige 
Adressat sind oder
diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den 
Absender und vernichten Sie diese Mail.
Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht 
gestattet.

This e-mail may contain confidential information. If you are not the intended 
recipient or
have received this e-mail in error, please notify the sender immediately and 
destroy this e-mail.
Any unauthorized copying, disclosure or distribution of the material in this 
e-mail is strictly forbidden.

Reply via email to