cziegeler    02/05/29 02:12:04

  Modified:    .        todo.xml
               src/java/org/apache/cocoon/components
                        CocoonComponentManager.java
               src/java/org/apache/cocoon/components/pipeline
                        AbstractProcessingPipeline.java
               src/java/org/apache/cocoon/components/treeprocessor
                        InvokeContext.java
  Log:
  Fixed documentation generation
  Fixed out of memory error
  Corrected release of ProcessingPipeline
  
  Revision  Changes    Path
  1.35      +1 -7      xml-cocoon2/todo.xml
  
  Index: todo.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/todo.xml,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- todo.xml  29 May 2002 08:20:25 -0000      1.34
  +++ todo.xml  29 May 2002 09:12:04 -0000      1.35
  @@ -3,7 +3,7 @@
   <!DOCTYPE todo PUBLIC "-//APACHE//DTD Todo V1.0//EN" 
"src/documentation/xdocs/dtd/todo-v10.dtd">
   
   <!--
  -  $Id: todo.xml,v 1.34 2002/05/29 08:20:25 cziegeler Exp $
  +  $Id: todo.xml,v 1.35 2002/05/29 09:12:04 cziegeler Exp $
   -->
   
   
  @@ -34,12 +34,6 @@
      a correct implementation of the toString() method of the used
      keys. A correct version should rely on hashCode() and equals().
      (This is actually an Avalon action as the code is in Excalibur)
  -  </action> 
  -
  -  <action context="code" assigned-to="open">
  -    Correct the release of internal ProcessingPipelines. If an
  -    error/exception occurs, the ProcessingPipeline might not be
  -    released correctly.
     </action> 
   
     <action context="code" assigned-to="open">
  
  
  
  1.19      +89 -2     
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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- CocoonComponentManager.java       26 Apr 2002 08:41:52 -0000      1.18
  +++ CocoonComponentManager.java       29 May 2002 09:12:04 -0000      1.19
  @@ -51,14 +51,17 @@
   package org.apache.cocoon.components;
   
   import java.io.IOException;
  +import java.util.ArrayList;
   import java.util.HashMap;
   import java.util.Iterator;
  +import java.util.List;
   import java.util.Map;
   import java.util.Stack;
   import org.apache.avalon.excalibur.component.ExcaliburComponentManager;
   import org.apache.avalon.framework.component.Component;
   import org.apache.avalon.framework.component.ComponentException;
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.component.Recomposable;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.environment.Environment;
  @@ -76,7 +79,7 @@
    * and by handling the lookup of the <code>SourceResolver</code> (in development)
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
  - * @version CVS $Id: CocoonComponentManager.java,v 1.18 2002/04/26 08:41:52 
cziegeler Exp $
  + * @version CVS $Id: CocoonComponentManager.java,v 1.19 2002/05/29 09:12:04 
cziegeler Exp $
    */
   public final class CocoonComponentManager
   extends ExcaliburComponentManager
  @@ -132,7 +135,7 @@
                   return;
               }
           }
  -        stack.push(new Object[] {env, objectModel, new HashMap(5), ONE, processor});
  +        stack.push(new Object[] {env, objectModel, new HashMap(5), ONE, processor, 
new ArrayList(2)});
       }
   
       /**
  @@ -150,6 +153,21 @@
                       final Component component = (Component)o[0];
                       ((CocoonComponentManager)o[1]).releaseRLComponent( component );
                   }
  +                if (objects.length > 5) {
  +                    final List automaticReleasedComponents = (List)objects[5];
  +                    for(int i = 0; i < automaticReleasedComponents.size(); i++) {
  +                        final Object[] o = 
(Object[])automaticReleasedComponents.get(i);
  +                        final Component component = (Component)o[0];
  +                        if (o[1] instanceof ComponentManager) {
  +                            ((ComponentManager)o[1]).release( component );
  +                        } else {
  +                            ((ComponentSelector)o[1]).release( component );
  +                            if (o[2] != null) {
  +                                ((ComponentManager)o[2]).release( (Component)o[1] );
  +                            }
  +                        }
  +                    }
  +                }
               }
           }
       }
  @@ -232,6 +250,75 @@
               return;
           }
           super.release( component);
  +    }
  +
  +    /**
  +     * Add an automatically released component
  +     */
  +    public static void addComponentForAutomaticRelease(final ComponentSelector 
selector,
  +                                                       final Component         
component,
  +                                                       final ComponentManager  
manager)
  +    throws ProcessingException {
  +        final Stack stack = (Stack)environmentStack.get();
  +        if ( null != stack && !stack.empty()) {
  +            final Object[] objects = (Object[])stack.firstElement();
  +            final List automaticReleasedComponents = (List)objects[5];
  +            automaticReleasedComponents.add(new Object[] {component, selector, 
manager});
  +        } else {
  +            throw new ProcessingException("Unable to add component for automatic 
release: no environment available.");
  +        }
  +    }
  +
  +    /**
  +     * Add an automatically released component
  +     */
  +    public static void addComponentForAutomaticRelease(final ComponentManager 
manager,
  +                                                       final Component        
component)
  +    throws ProcessingException {
  +        final Stack stack = (Stack)environmentStack.get();
  +        if ( null != stack && !stack.empty()) {
  +            final Object[] objects = (Object[])stack.firstElement();
  +            final List automaticReleasedComponents = (List)objects[5];
  +            automaticReleasedComponents.add(new Object[] {component, manager});
  +        } else {
  +            throw new ProcessingException("Unable to add component for automatic 
release: no environment available.");
  +        }
  +    }
  +
  +    /**
  +     * Remove from automatically released components
  +     */
  +    public static void removeFromAutomaticRelease(final Component component)
  +    throws ProcessingException {
  +        final Stack stack = (Stack)environmentStack.get();
  +        if ( null != stack && !stack.empty()) {
  +            final Object[] objects = (Object[])stack.firstElement();
  +            final List automaticReleasedComponents = (List)objects[5];
  +            int i = 0;
  +            boolean found = false;
  +            while (i < automaticReleasedComponents.size() && !found) {
  +                final Object[] o = (Object[])automaticReleasedComponents.get(i);
  +                if (o[0] == component) {
  +                    found = true;
  +                    if (o[1] instanceof ComponentManager) {
  +                        ((ComponentManager)o[1]).release( component );
  +                    } else {
  +                        ((ComponentSelector)o[1]).release( component );
  +                        if (o[2] != null) {
  +                            ((ComponentManager)o[2]).release( (Component)o[1] );
  +                        }
  +                    }
  +                    automaticReleasedComponents.remove(i);
  +                } else {
  +                    i++;
  +                }
  +            }
  +            if (!found) {
  +                throw new ProcessingException("Unable to remove component from 
automatic release: component not found.");
  +            }
  +        } else {
  +            throw new ProcessingException("Unable to remove component from 
automatic release: no environment available.");
  +        }
       }
   
       /**
  
  
  
  1.15      +8 -2      
xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java
  
  Index: AbstractProcessingPipeline.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- AbstractProcessingPipeline.java   29 May 2002 08:20:26 -0000      1.14
  +++ AbstractProcessingPipeline.java   29 May 2002 09:12:04 -0000      1.15
  @@ -61,6 +61,7 @@
   import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.cocoon.ConnectionResetException;
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.components.CocoonComponentManager;
   import org.apache.cocoon.components.pipeline.OutputComponentSelector;
   import org.apache.cocoon.components.saxconnector.SAXConnector;
   import org.apache.cocoon.environment.Environment;
  @@ -84,7 +85,7 @@
    *
    * @since @next-version@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
  - * @version CVS $Id: AbstractProcessingPipeline.java,v 1.14 2002/05/29 08:20:26 
cziegeler Exp $
  + * @version CVS $Id: AbstractProcessingPipeline.java,v 1.15 2002/05/29 09:12:04 
cziegeler Exp $
    */
   public abstract class AbstractProcessingPipeline
     extends AbstractLogEnabled
  @@ -196,7 +197,12 @@
        * this method and NOT by using a component manager!
        */
       public void release() {
  -        this.manager.release( this );
  +        try {
  +            CocoonComponentManager.removeFromAutomaticRelease( this );
  +        } catch (ProcessingException pe) {
  +            // ignore this
  +            this.getLogger().error("Unabled to release processing component.", pe);
  +        }
       }
   
       /**
  
  
  
  1.10      +7 -2      
xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/InvokeContext.java
  
  Index: InvokeContext.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/InvokeContext.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- InvokeContext.java        27 May 2002 14:31:27 -0000      1.9
  +++ InvokeContext.java        29 May 2002 09:12:04 -0000      1.10
  @@ -57,7 +57,7 @@
   import org.apache.avalon.framework.component.ComponentSelector;
   import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.avalon.framework.logger.Loggable;
  -
  +import org.apache.cocoon.components.CocoonComponentManager;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
   import org.apache.cocoon.environment.Environment;
   import org.apache.log.Logger;
  @@ -76,7 +76,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Sylvain Wallez</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
  - * @version CVS $Id: InvokeContext.java,v 1.9 2002/05/27 14:31:27 cziegeler Exp $
  + * @version CVS $Id: InvokeContext.java,v 1.10 2002/05/29 09:12:04 cziegeler Exp $
    */
   
   public class InvokeContext implements Recomposable, Disposable, Loggable {
  @@ -172,6 +172,11 @@
                     
MapStackResolver.buildParameters(this.processingPipelineParameters,
                                                      this.getMapStack())
               );
  +            if (this.isInternalRequest) {
  +                
CocoonComponentManager.addComponentForAutomaticRelease(this.pipelineSelector,
  +                                                                       
this.processingPipeline,
  +                                                                       
this.pipelinesManager);
  +            }
           }
           return this.processingPipeline;
       }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to