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