cziegeler 2002/11/15 05:31:36 Modified: src/java/org/apache/cocoon/components/source/impl SitemapSource.java src/java/org/apache/cocoon/components CocoonComponentManager.java Log: Avoid mxing of environments Revision Changes Path 1.20 +17 -2 xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java Index: SitemapSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- SitemapSource.java 14 Nov 2002 15:43:17 -0000 1.19 +++ SitemapSource.java 15 Nov 2002 13:31:36 -0000 1.20 @@ -66,6 +66,8 @@ import org.apache.cocoon.ResourceNotFoundException; import org.apache.cocoon.components.CocoonComponentManager; import org.apache.cocoon.components.pipeline.ProcessingPipeline; +import org.apache.cocoon.components.sax.XMLDeserializer; +import org.apache.cocoon.components.sax.XMLSerializer; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.environment.wrapper.EnvironmentWrapper; import org.apache.cocoon.xml.AbstractXMLConsumer; @@ -368,13 +370,26 @@ if (this.redirectSource != null) { this.environment.toSAX(this.redirectSource, consumer); } else { + // We have to buffer the result in order to get + // clean environment stack handling. + XMLSerializer xmls = (XMLSerializer) this.manager.lookup(XMLSerializer.ROLE); + Object fragment; try { CocoonComponentManager.enterEnvironment(this.environment, this.environment.getObjectModel(), this.pipelineProcessor); - this.processingPipeline.process(this.environment, consumer); + this.processingPipeline.process(this.environment, xmls); + fragment = xmls.getSAXFragment(); } finally { + this.manager.release(xmls); CocoonComponentManager.leaveEnvironment(); + } + XMLDeserializer xmld = (XMLDeserializer) this.manager.lookup(XMLDeserializer.ROLE); + try { + xmld.setConsumer(consumer); + xmld.deserialize(fragment); + } finally { + this.manager.release(xmld); } } } catch (SAXException e) { 1.30 +10 -20 xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java Index: CocoonComponentManager.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- CocoonComponentManager.java 14 Nov 2002 15:43:20 -0000 1.29 +++ CocoonComponentManager.java 15 Nov 2002 13:31:36 -0000 1.30 @@ -186,14 +186,16 @@ * @return A unique key within this thread. */ public static Object startProcessing(Environment env) { - ArrayList processes = (ArrayList)processList.get(); + Map processes = (Map)processList.get(); if (processes == null) { - processes = new ArrayList(4); + processes = new HashMap(4); processList.set(processes); } - Map key = new HashMap(5); - processes.add(key); + Map values = new HashMap(5); + Long key = new Long(System.currentTimeMillis()); + processes.put(key, values); + env.getObjectModel().put("org.apache.cocoon.components.CocoonComponentManager", key); return key; } @@ -205,22 +207,10 @@ * {@link startProcessing(Environment)}. */ public static void endProcessing(Object key) { - ArrayList processes = (ArrayList)processList.get(); + Map processes = (Map)processList.get(); if ( null != processes ) { - - // we do a direct object reference comparission - // here for improved performance - int i = 0; - int len = processes.size(); - - while (i < len) { - if (processes.get(i) == key) { - processes.remove(i); - i = len; - } else { - i++; - } - } + + processes.remove(key); } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]