You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2002/11/15 14:31:37 UTC
cvs commit: xml-cocoon2/src/java/org/apache/cocoon/components CocoonComponentManager.java
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: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org