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 2004/01/09 09:36:37 UTC

cvs commit: cocoon-2.2/src/java/org/apache/cocoon ProcessorWrapper.java Cocoon.java Processor.java

cziegeler    2004/01/09 00:36:37

  Modified:    src/java/org/apache/cocoon/components/source/impl
                        SitemapSource.java
               src/java/org/apache/cocoon/components/container
                        RequestLifecycleHelper.java
               src/java/org/apache/cocoon/environment
                        EnvironmentContext.java EnvironmentHelper.java
               src/java/org/apache/cocoon/components/cprocessor
                        InvokeContext.java TreeProcessor.java
               src/java/org/apache/cocoon ProcessorWrapper.java Cocoon.java
                        Processor.java
  Removed:     src/java/org/apache/cocoon/components/container
                        CocoonComponentManager.java
  Log:
  Cleanup releasing of processor pipelines
  
  Revision  Changes    Path
  1.22      +2 -2      cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
  
  Index: SitemapSource.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- SitemapSource.java	8 Jan 2004 11:13:07 -0000	1.21
  +++ SitemapSource.java	9 Jan 2004 08:36:37 -0000	1.22
  @@ -410,7 +410,7 @@
        */
       private void reset() {
           if (this.processingPipeline != null) {
  -            this.processor.releasePipeline(this.processingPipeline);
  +            this.processor.releasePipeline(null, this.processingPipeline);
               this.processingPipeline = null;
           }
           if (this.processKey != null) {
  
  
  
  1.2       +0 -93     cocoon-2.2/src/java/org/apache/cocoon/components/container/RequestLifecycleHelper.java
  
  Index: RequestLifecycleHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/container/RequestLifecycleHelper.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- RequestLifecycleHelper.java	7 Jan 2004 15:57:30 -0000	1.1
  +++ RequestLifecycleHelper.java	9 Jan 2004 08:36:37 -0000	1.2
  @@ -50,17 +50,12 @@
   */
   package org.apache.cocoon.components.container;
   
  -import java.util.ArrayList;
   import java.util.HashMap;
   import java.util.Iterator;
  -import java.util.List;
   import java.util.Map;
   
   import org.apache.avalon.fortress.impl.handler.ComponentHandler;
   import org.apache.avalon.framework.activity.Disposable;
  -import org.apache.avalon.framework.service.ServiceManager;
  -import org.apache.avalon.framework.service.ServiceSelector;
  -import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.components.GlobalRequestLifecycleComponent;
   import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.EnvironmentContext;
  @@ -89,48 +84,12 @@
           return desc;
       }
   
  -    /**
  -	 * Add an automatically released component
  -	 */
  -    static void addComponentForAutomaticRelease(final ServiceManager manager,
  -                                               final Object component)
  -    throws ProcessingException {
  -        EnvironmentDescription desc = getEnvironmentDescription();
  -        if (null != desc) {
  -            desc.addToAutoRelease(manager, component);
  -        }
  -    }
  -
  -    /**
  -     * Add an automatically released component
  -     */
  -    static void addComponentForAutomaticRelease(final ServiceSelector selector,
  -                                               final Object component,
  -                                                final ServiceManager manager)
  -    throws ProcessingException {
  -        EnvironmentDescription desc = getEnvironmentDescription();
  -        if (null != desc) {
  -            desc.addToAutoRelease(manager, component);
  -        }
  -    }
  -
  -    /**
  -	 * Remove from automatically released components
  -	 */
  -    public static void removeFromAutomaticRelease(final Object component)
  -        throws ProcessingException {
  -        EnvironmentDescription desc = getEnvironmentDescription();
  -        if (null != desc) {
  -            desc.removeFromAutoRelease(component);
  -        }
  -    }
   }
   
   final class EnvironmentDescription implements Disposable {
       Environment environment;
       Map objectModel;
       Map requestLifecycleComponents;
  -    List autoreleaseComponents = new ArrayList(4);
   
       /**
   	 * Constructor
  @@ -169,13 +128,6 @@
               this.requestLifecycleComponents.clear();
           }
   
  -        for (int i = 0; i < autoreleaseComponents.size(); i++) {
  -            final Object[] o = (Object[]) autoreleaseComponents.get(i);
  -            final Object component = o[0];
  -            final ComponentHandler handler = (ComponentHandler) o[1];
  -            handler.put(component);
  -        }
  -        this.autoreleaseComponents.clear();
           this.environment = null;
           this.objectModel = null;
       }
  @@ -248,49 +200,4 @@
           return null;
       }
   
  -    /**
  -     * Add an automatically released component
  -     */
  -    void addToAutoRelease(final ServiceSelector selector,
  -                          final Object          component,
  -                          final ServiceManager  manager) {
  -        this.autoreleaseComponents.add(new Object[] {component, selector, manager});
  -    }
  -
  -    /**
  -	 * Add an automatically released component
  -	 */
  -    void addToAutoRelease(final ServiceManager manager,
  -                          final Object component) {
  -        this.autoreleaseComponents.add(new Object[] { component, manager });
  -    }
  -
  -    /**
  -	 * Remove from automatically released components
  -	 */
  -    void removeFromAutoRelease(final Object component)
  -    throws ProcessingException {
  -        int i = 0;
  -        boolean found = false;
  -        while (i < this.autoreleaseComponents.size() && !found) {
  -            final Object[] o = (Object[]) this.autoreleaseComponents.get(i);
  -            if (o[0] == component) {
  -                found = true;
  -                if (o[1] instanceof ServiceManager) {
  -                    ((ServiceManager)o[1]).release( component );
  -                } else {
  -                    ((ServiceSelector)o[1]).release( component );
  -                    if (o[2] != null) {
  -                        ((ServiceManager)o[2]).release( o[1] );
  -                    }
  -                }
  -                this.autoreleaseComponents.remove(i);
  -            } else {
  -                i++;
  -            }
  -        }
  -        if (!found) {
  -            throw new ProcessingException("Unable to remove component from automatic release: component not found.");
  -        }
  -    }
   }
  
  
  
  1.4       +9 -1      cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentContext.java
  
  Index: EnvironmentContext.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentContext.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EnvironmentContext.java	5 Jan 2004 13:28:01 -0000	1.3
  +++ EnvironmentContext.java	9 Jan 2004 08:36:37 -0000	1.4
  @@ -123,6 +123,14 @@
           return this.attributes.get(key);
       }
       
  +    /**
  +     * Remove the object associated with the key
  +     * @param key The unique key
  +     */
  +    public void removeAttribute(String key) {
  +        this.attributes.remove(key);
  +    }
  +
       /* (non-Javadoc)
        * @see org.apache.avalon.framework.activity.Disposable#dispose()
        */
  
  
  
  1.18      +9 -1      cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentHelper.java
  
  Index: EnvironmentHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/environment/EnvironmentHelper.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- EnvironmentHelper.java	5 Jan 2004 13:28:01 -0000	1.17
  +++ EnvironmentHelper.java	9 Jan 2004 08:36:37 -0000	1.18
  @@ -453,6 +453,14 @@
       }
       
       /**
  +     * Return the environment context
  +     */
  +    public static EnvironmentContext getEnvironmentContext(Environment environment) {
  +        final Map objectModel = environment.getObjectModel();
  +        return (EnvironmentContext)objectModel.get(PROCESS_KEY);
  +    }
  +
  +    /**
        * This hook has to be called before a request is processed.
        * The hook is called by the Cocoon component and by the
        * cocoon protocol implementation.
  
  
  
  1.4       +7 -8      cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/InvokeContext.java
  
  Index: InvokeContext.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/InvokeContext.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- InvokeContext.java	8 Jan 2004 11:13:07 -0000	1.3
  +++ InvokeContext.java	9 Jan 2004 08:36:37 -0000	1.4
  @@ -62,8 +62,9 @@
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
  -import org.apache.cocoon.components.container.CocoonComponentManager;
   import org.apache.cocoon.components.cprocessor.variables.VariableResolver;
  +import org.apache.cocoon.environment.EnvironmentContext;
  +import org.apache.cocoon.environment.EnvironmentHelper;
   
   /**
    * The invocation context of <code>ProcessingNode</code>s.
  @@ -166,16 +167,15 @@
               // Keep current manager for proper release
               this.pipelinesManager = this.currentManager;
   
  -            this.processingPipeline = (ProcessingPipeline) 
  -                this.pipelinesManager.lookup(ProcessingPipeline.ROLE);
  +            this.processingPipeline = (ProcessingPipeline)this.pipelinesManager.lookup(ProcessingPipeline.ROLE);
               this.processingPipeline.reservice( this.pipelinesManager );
               this.processingPipeline.setup(
                     VariableResolver.buildParameters(this.processingPipelineParameters,
                                                      this, this.processingPipelineObjectModel)
               );
               if (this.isBuildingPipelineOnly) {
  -                CocoonComponentManager.addComponentForAutomaticRelease(this.pipelinesManager,
  -                                                                       this.processingPipeline);
  +                EnvironmentContext context = EnvironmentHelper.getCurrentEnvironmentContext();
  +                context.addAttribute(TreeProcessor.PIPELINE_KEY, this.pipelinesManager);
               }
           }
           return this.processingPipeline;
  @@ -235,8 +235,7 @@
       /**
        * Dumps all sitemap parameters to log
        */
  -    protected void dumpParameters()
  -    {
  +    protected void dumpParameters() {
           if (!mapStack.isEmpty()) {
               StringBuffer sb = new StringBuffer();
   
  
  
  
  1.12      +10 -9     cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/TreeProcessor.java
  
  Index: TreeProcessor.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/components/cprocessor/TreeProcessor.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TreeProcessor.java	8 Jan 2004 11:13:07 -0000	1.11
  +++ TreeProcessor.java	9 Jan 2004 08:36:37 -0000	1.12
  @@ -77,15 +77,14 @@
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
   import org.apache.cocoon.Constants;
  -import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.Processor;
   import org.apache.cocoon.components.ChainedConfiguration;
  -import org.apache.cocoon.components.container.CocoonComponentManager;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
   import org.apache.cocoon.components.sax.XMLTeePipe;
   import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.cocoon.components.source.impl.DelayedRefreshSourceWrapper;
   import org.apache.cocoon.environment.Environment;
  +import org.apache.cocoon.environment.EnvironmentContext;
   import org.apache.cocoon.environment.EnvironmentHelper;
   import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
   import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
  @@ -119,6 +118,9 @@
       /** The sitemap namespace */
       public static final String SITEMAP_NS = "http://apache.org/cocoon/sitemap/1.0";
       
  +    /** The key for the pipeline component */
  +    public static final String PIPELINE_KEY = ProcessingPipeline.class.getName();
  +    
       /* The xsl transformation location for turning a 
        * sitemap into a Fortress container configuration 
        */
  @@ -543,13 +545,12 @@
       /* (non-Javadoc)
        * @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
        */
  -    public void releasePipeline(ProcessingPipeline pipeline) {
  -        // TODO
  -        try {
  -            CocoonComponentManager.removeFromAutomaticRelease(pipeline);
  -        } catch (ProcessingException pe) {
  -            // ignore this
  -            getLogger().error("Unabled to release processing component.", pe);
  +    public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
  +        EnvironmentContext context = EnvironmentHelper.getEnvironmentContext(environment);
  +        ServiceManager manager = (ServiceManager)context.getAttribute(PIPELINE_KEY);
  +        if ( manager != null ) {
  +            manager.release(pipeline);
  +            context.removeAttribute(PIPELINE_KEY);
           }
       }
   
  
  
  
  1.9       +3 -3      cocoon-2.2/src/java/org/apache/cocoon/ProcessorWrapper.java
  
  Index: ProcessorWrapper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/ProcessorWrapper.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ProcessorWrapper.java	8 Jan 2004 11:13:07 -0000	1.8
  +++ ProcessorWrapper.java	9 Jan 2004 08:36:37 -0000	1.9
  @@ -100,8 +100,8 @@
       /* (non-Javadoc)
        * @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
        */
  -    public void releasePipeline(ProcessingPipeline pipeline) {
  -        this.processor.releasePipeline(pipeline);
  +    public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
  +        this.processor.releasePipeline(environment, pipeline);
       }
   
       /* (non-Javadoc)
  
  
  
  1.34      +10 -8     cocoon-2.2/src/java/org/apache/cocoon/Cocoon.java
  
  Index: Cocoon.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/Cocoon.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- Cocoon.java	8 Jan 2004 11:13:07 -0000	1.33
  +++ Cocoon.java	9 Jan 2004 08:36:37 -0000	1.34
  @@ -68,7 +68,6 @@
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
  -import org.apache.cocoon.components.container.CocoonComponentManager;
   import org.apache.cocoon.components.language.generator.ProgramGenerator;
   import org.apache.cocoon.components.pipeline.ProcessingPipeline;
   import org.apache.cocoon.components.source.impl.DelayedRefreshSourceWrapper;
  @@ -527,13 +526,16 @@
       /* (non-Javadoc)
        * @see org.apache.cocoon.Processor#releasePipeline(org.apache.cocoon.components.pipeline.ProcessingPipeline)
        */
  -    public void releasePipeline(ProcessingPipeline pipeline) {
  -        // TODO
  +    public void releasePipeline(Environment environment, ProcessingPipeline pipeline) {
  +        Processor processor = null;
           try {
  -            CocoonComponentManager.removeFromAutomaticRelease(pipeline);
  -        } catch (ProcessingException pe) {
  -            // ignore this
  -            getLogger().error("Unabled to release processing component.", pe);
  +            processor = (Processor) this.serviceManager.lookup( Processor.ROLE );
  +            processor.releasePipeline(environment, pipeline);
  +        } catch (ServiceException ignore) {
  +            // In fact this can never happen, therefore we ignore it
  +            this.getLogger().error("Unable to lookup processor.", ignore);
  +        } finally {
  +            this.serviceManager.release(processor);
           }
       }
       
  
  
  
  1.13      +4 -3      cocoon-2.2/src/java/org/apache/cocoon/Processor.java
  
  Index: Processor.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.2/src/java/org/apache/cocoon/Processor.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Processor.java	8 Jan 2004 11:13:07 -0000	1.12
  +++ Processor.java	9 Jan 2004 08:36:37 -0000	1.13
  @@ -84,7 +84,7 @@
        * Process the given <code>Environment</code> to assemble
        * a <code>ProcessingPipeline</code>.
        * Don't forget to release the pipeline using
  -     * {@link releasePipeline(ProcessingPipeline)}.
  +     * {@link releasePipeline(Environment, ProcessingPipeline)}.
        * @since 2.1
        */
       ProcessingPipeline buildPipeline(Environment environment)
  @@ -92,8 +92,9 @@
   
       /**
        * Release the pipeline delivered by {@link buildPipeline(Environment)}
  +     * @since 2.2
        */
  -    void releasePipeline(ProcessingPipeline pipeline);
  +    void releasePipeline(Environment environment, ProcessingPipeline pipeline);
       
       /**
        * Get the sitemap component configurations