You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by bl...@apache.org on 2001/02/22 20:08:26 UTC

cvs commit: xml-cocoon/src/org/apache/cocoon/transformation AbstractDOMTransformer.java FragmentExtractorTransformer.java I18nTransformer.java XIncludeTransformer.java XTTransformer.java

bloritsch    01/02/22 11:08:25

  Modified:    src/org/apache/cocoon Tag: xml-cocoon2 Cocoon.java
               src/org/apache/cocoon/components/language/generator Tag:
                        xml-cocoon2 ProgramGeneratorImpl.java
               src/org/apache/cocoon/components/language/markup Tag:
                        xml-cocoon2 AbstractMarkupLanguage.java
               src/org/apache/cocoon/components/language/markup/xsp Tag:
                        xml-cocoon2 XSPGenerator.java
               src/org/apache/cocoon/components/language/markup/xsp/java
                        Tag: xml-cocoon2 esql.xsl util.xsl
               src/org/apache/cocoon/generation Tag: xml-cocoon2
                        FileGenerator.java HTMLGenerator.java
               src/org/apache/cocoon/reading Tag: xml-cocoon2
                        ResourceReader.java
               src/org/apache/cocoon/sitemap Tag: xml-cocoon2 Handler.java
                        ResourcePipeline.java
               src/org/apache/cocoon/transformation Tag: xml-cocoon2
                        AbstractDOMTransformer.java
                        FragmentExtractorTransformer.java
                        I18nTransformer.java XIncludeTransformer.java
                        XTTransformer.java
  Log:
  Updated with change to support more efficient Component Use.
  Also release components when you are done....
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.58  +2 -1      xml-cocoon/src/org/apache/cocoon/Cocoon.java
  
  Index: Cocoon.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/Cocoon.java,v
  retrieving revision 1.4.2.57
  retrieving revision 1.4.2.58
  diff -u -r1.4.2.57 -r1.4.2.58
  --- Cocoon.java	2001/02/19 21:57:45	1.4.2.57
  +++ Cocoon.java	2001/02/22 19:07:34	1.4.2.58
  @@ -45,7 +45,7 @@
    *
    * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo Fumagalli</a> (Apache Software Foundation, Exoffice Technologies)
    * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
  - * @version CVS $Revision: 1.4.2.57 $ $Date: 2001/02/19 21:57:45 $
  + * @version CVS $Revision: 1.4.2.58 $ $Date: 2001/02/22 19:07:34 $
    */
   public class Cocoon extends AbstractLoggable implements Component, Initializable, Modifiable, Processor, Contextualizable {
       /** The application context */
  @@ -137,6 +137,7 @@
               is.setSystemId(this.configurationFile.toExternalForm());
               p.parse(is);
               this.configuration = b.getConfiguration();
  +            this.componentManager.release((Component) p);
           } catch (Exception e) {
               getLogger().error("Could not configure Cocoon environment", e);
               throw new ConfigurationException("Error trying to load configurations");
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.37  +10 -2     xml-cocoon/src/org/apache/cocoon/components/language/generator/Attic/ProgramGeneratorImpl.java
  
  Index: ProgramGeneratorImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/generator/Attic/ProgramGeneratorImpl.java,v
  retrieving revision 1.1.2.36
  retrieving revision 1.1.2.37
  diff -u -r1.1.2.36 -r1.1.2.37
  --- ProgramGeneratorImpl.java	2001/02/22 17:10:26	1.1.2.36
  +++ ProgramGeneratorImpl.java	2001/02/22 19:07:41	1.1.2.37
  @@ -46,7 +46,7 @@
   /**
    * The default implementation of <code>ProgramGenerator</code>
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.36 $ $Date: 2001/02/22 17:10:26 $
  + * @version CVS $Revision: 1.1.2.37 $ $Date: 2001/02/22 19:07:41 $
    */
   public class ProgramGeneratorImpl extends AbstractLoggable implements ProgramGenerator, Contextualizable, Composer, Configurable, ThreadSafe {
   
  @@ -171,7 +171,11 @@
               }
           }
   
  -        if (this.autoReload == false) return programInstance;
  +        if (this.autoReload == false) {
  +            this.markupSelector.release((Component) markupLanguage);
  +            this.languageSelector.release((Component) programmingLanguage);
  +            return programInstance;
  +        }
   
           /*
            * FIXME: It's the program (not the instance) that must
  @@ -189,6 +193,10 @@
           if (programInstance == null) {
               program = generateResource(file, normalizedName, markupLanguage, programmingLanguage, resolver);
           }
  +
  +        this.markupSelector.release((Component) markupLanguage);
  +        this.languageSelector.release((Component) programmingLanguage);
  +
           // Instantiate
           return (CompiledComponent) this.cache.select(normalizedName);
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.26  +8 -3      xml-cocoon/src/org/apache/cocoon/components/language/markup/Attic/AbstractMarkupLanguage.java
  
  Index: AbstractMarkupLanguage.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/Attic/AbstractMarkupLanguage.java,v
  retrieving revision 1.1.2.25
  retrieving revision 1.1.2.26
  diff -u -r1.1.2.25 -r1.1.2.26
  --- AbstractMarkupLanguage.java	2001/02/12 13:30:43	1.1.2.25
  +++ AbstractMarkupLanguage.java	2001/02/22 19:07:48	1.1.2.26
  @@ -48,7 +48,7 @@
    * Base implementation of <code>MarkupLanguage</code>. This class uses
    * logicsheets as the only means of code generation. Code generation should be decoupled from this context!!!
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.25 $ $Date: 2001/02/12 13:30:43 $
  + * @version CVS $Revision: 1.1.2.26 $ $Date: 2001/02/22 19:07:48 $
    */
   public abstract class AbstractMarkupLanguage extends AbstractLoggable implements MarkupLanguage, Composer, Configurable {
       /** The supported language table */
  @@ -166,9 +166,12 @@
               logicsheet.setLogger(getLogger());
           }
   
  -        URLFactory urlFactory = (URLFactory)this.manager.lookup(Roles.URL_FACTORY);
  +        URLFactory urlFactory = (URLFactory) this.manager.lookup(Roles.URL_FACTORY);
  +
           logicsheetURL = urlFactory.getURL(logicsheetLocation);
   
  +        this.manager.release((Component) urlFactory);
  +
           logicsheet.setInputSource(new InputSource(logicsheetURL.openStream()));
   
           entry = new CachedURL(logicsheetURL, logicsheet);
  @@ -279,7 +282,9 @@
   
               URL url = null;
               try {
  -                url = ((URLFactory)manager.lookup(Roles.URL_FACTORY)).getURL(logicsheetLocation);
  +                Component urlFactory = this.manager.lookup(Roles.URL_FACTORY);
  +                url = ((URLFactory) urlFactory).getURL(logicsheetLocation);
  +                this.manager.release(urlFactory);
               } catch (Exception e) {
                   getLogger().error("cannot get logicsheet at " + logicsheetLocation);
                   new SAXException ("cannot get logicsheet at " + logicsheetLocation, e);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.15  +2 -11     xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/Attic/XSPGenerator.java
  
  Index: XSPGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/Attic/XSPGenerator.java,v
  retrieving revision 1.1.2.14
  retrieving revision 1.1.2.15
  diff -u -r1.1.2.14 -r1.1.2.15
  --- XSPGenerator.java	2001/02/22 17:10:28	1.1.2.14
  +++ XSPGenerator.java	2001/02/22 19:07:53	1.1.2.15
  @@ -23,11 +23,9 @@
    * Base class for XSP-generated <code>ServerPagesGenerator</code> classes
    *
    * @author <a href="mailto:ricardo@apache.org">Ricardo Rocha</a>
  - * @version CVS $Revision: 1.1.2.14 $ $Date: 2001/02/22 17:10:28 $
  + * @version CVS $Revision: 1.1.2.15 $ $Date: 2001/02/22 19:07:53 $
    */
  -public abstract class XSPGenerator extends AbstractServerPage implements Loggable, Poolable, CompiledComponent {
  -
  -  protected Parser parser;
  +public abstract class XSPGenerator extends AbstractServerPage implements Loggable, CompiledComponent {
     protected Logger log;
   
       public void setLogger(Logger logger) {
  @@ -44,12 +42,5 @@
      */
     public void compose(ComponentManager manager) {
       super.compose(manager);
  -
  -    try {
  -        log.debug("Looking up " + Roles.PARSER);
  -        this.parser = (Parser) this.manager.lookup(Roles.PARSER);
  -    } catch (Exception e) {
  -        log.error("Can't find component", e);
  -    }
     }
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.48  +26 -9     xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/esql.xsl
  
  Index: esql.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/esql.xsl,v
  retrieving revision 1.1.2.47
  retrieving revision 1.1.2.48
  diff -u -r1.1.2.47 -r1.1.2.48
  --- esql.xsl	2001/02/20 05:10:21	1.1.2.47
  +++ esql.xsl	2001/02/22 19:07:57	1.1.2.48
  @@ -1,5 +1,5 @@
   <?xml version="1.0"?>
  -<!-- $Id: esql.xsl,v 1.1.2.47 2001/02/20 05:10:21 balld Exp $-->
  +<!-- $Id: esql.xsl,v 1.1.2.48 2001/02/22 19:07:57 bloritsch Exp $-->
   <!--
   
    ============================================================================
  @@ -174,6 +174,9 @@
         <xsp:include>java.text.DecimalFormat</xsp:include>
         <xsp:include>java.io.StringWriter</xsp:include>
         <xsp:include>java.io.PrintWriter</xsp:include>
  +      <xsl:if test="$environment = 'cocoon2'">
  +          <xsp:include>org.apache.cocoon.components.language.markup.xsp.XSPUtil</xsp:include>
  +      </xsl:if>
         <xsl:if test=".//esql:connection/esql:pool">
           <xsl:choose>
             <xsl:when test="$environment = 'cocoon1'">
  @@ -182,7 +185,6 @@
             </xsl:when>
             <xsl:when test="$environment = 'cocoon2'">
               <xsp:include>org.apache.avalon.util.datasource.DataSourceComponent</xsp:include>
  -            <xsp:include>org.apache.cocoon.components.language.markup.xsp.XSPUtil</xsp:include>
             </xsl:when>
           </xsl:choose>
         </xsl:if>
  @@ -305,10 +307,10 @@
             try {
               _esql_connection.dburl = String.valueOf(<xsl:copy-of select="$dburl"/>);
               <xsl:if test="esql:username">
  -              _esql_connection.info.put("user", String.valueOf(<xsl:copy-of select="$username"/>)); 
  +              _esql_connection.info.put("user", String.valueOf(<xsl:copy-of select="$username"/>));
               </xsl:if>
               <xsl:if test="esql:password">
  -              _esql_connection.info.put("password", String.valueOf(<xsl:copy-of select="$password"/>)); 
  +              _esql_connection.info.put("password", String.valueOf(<xsl:copy-of select="$password"/>));
               </xsl:if>
               <xsl:for-each select="esql:property">
                 _esql_connection.info.put("<xsl:value-of select="@name"/>",<xsl:call-template name="get-nested-string"><xsl:with-param name="content" select="."/></xsl:call-template>);
  @@ -745,11 +747,26 @@
       </xsl:when>
       <xsl:when test="$environment = 'cocoon2'">
         <xsp:logic>
  -        try {
  -          XSPUtil.include(new InputSource(new StringReader(<xsl:copy-of select="$content"/>)),this.contentHandler,parser);
  -        } catch (Exception _esql_exception_<xsl:value-of select="generate-id(.)"/>) {
  -          throw new RuntimeException("error parsing xml: "+_esql_exception_<xsl:value-of select="generate-id(.)"/>.getMessage()+": "+String.valueOf(<xsl:copy-of select="$content"/>));
  -        }
  +      {
  +          org.apache.cocoon.components.parser.Parser newParser = null;
  +
  +          try {
  +              newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  +
  +              InputSource __is = new InputSource(
  +                      new StringReader(
  +                          String.valueOf(<xsl:copy-of select="$content"/>)
  +                      )
  +                  );
  +
  +
  +              XSPUtil.include(__is, this.contentHandler, newParser);
  +          } catch (Exception e) {
  +              getLogger().error("Could not include page", e);
  +          } finally {
  +              if (newParser != null) this.manager.release((Component) newParser);
  +          }
  +      }
         </xsp:logic>
       </xsl:when>
       <xsl:otherwise>
  
  
  
  1.1.2.4   +55 -38    xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/util.xsl
  
  Index: util.xsl
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/components/language/markup/xsp/java/Attic/util.xsl,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- util.xsl	2001/02/12 13:30:44	1.1.2.3
  +++ util.xsl	2001/02/22 19:07:59	1.1.2.4
  @@ -131,16 +131,21 @@
   
       <xsp:logic> {
         String __name = String.valueOf(<xsl:copy-of select="$href"/>);
  +      {
  +          org.apache.cocoon.components.parser.Parser newParser = null;
   
  -      try {
  -          URL __url = ((org.apache.cocoon.components.url.URLFactory)manager.lookup(org.apache.cocoon.Roles.URL_FACTORY)).getURL(__name);
  -          InputSource __is = new InputSource(__url.openStream());
  -          __is.setSystemId(__url.toString());
  -          org.apache.cocoon.components.parser.Parser newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  -
  -          XSPUtil.include(__is, this.contentHandler, newParser);
  -      } catch (Exception e) {
  -          this.cocoonLogger.error("Could not include page", e);
  +          try {
  +              newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  +              URL __url = ((org.apache.cocoon.components.url.URLFactory)manager.lookup(org.apache.cocoon.Roles.URL_FACTORY)).getURL(__name);
  +              InputSource __is = new InputSource(__url.openStream());
  +              __is.setSystemId(__url.toString());
  +
  +              XSPUtil.include(__is, this.contentHandler, newParser);
  +          } catch (Exception e) {
  +              this.cocoonLogger.error("Could not include page", e);
  +          } finally {
  +              this.manager.release((Component) newParser);
  +          }
         }
       } </xsp:logic>
     </xsl:template>
  @@ -158,23 +163,29 @@
          </xsl:choose>
        </xsl:variable>
        <xsp:logic>
  -      try {
  -          InputSource __is = new InputSource(
  -                  new FileReader(
  -                     XSPUtil.relativeFilename(
  -                       <xsl:copy-of select="$name"/>,
  -                       this.request,
  -                       this.context
  -                     )
  -                  )
  -              );
  -
  -          org.apache.cocoon.components.parser.Parser newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  -
  -          XSPUtil.include(__is, this.contentHandler, newParser);
  -      } catch (Exception e) {
  -          this.cocoonLogger.error("Could not include page", e);
  -      }
  +       {
  +          org.apache.cocoon.components.parser.Parser newParser = null;
  +
  +          try {
  +              newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  +              InputSource __is = new InputSource(
  +                      new FileReader(
  +                         XSPUtil.relativeFilename(
  +                           <xsl:copy-of select="$name"/>,
  +                           this.request,
  +                           this.context
  +                         )
  +                      )
  +                  );
  +
  +
  +              XSPUtil.include(__is, this.contentHandler, newParser);
  +            } catch (Exception e) {
  +              this.cocoonLogger.error("Could not include page", e);
  +            } finally {
  +              this.manager.release((Component) newParser);
  +            }
  +       }
        </xsp:logic>
      </xsl:template>
   
  @@ -190,18 +201,24 @@
       </xsl:variable>
   
       <xsp:logic>
  -      try {
  -          InputSource __is = new InputSource(
  -                  new StringReader(
  -                      String.valueOf(<xsl:copy-of select="$expr"/>)
  -                  )
  -              );
  -
  -          org.apache.cocoon.components.parser.Parser newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  -
  -          XSPUtil.include(__is, this.contentHandler, newParser);
  -      } catch (Exception e) {
  -          this.cocoonLogger.error("Could not include page", e);
  +      {
  +          org.apache.cocoon.components.parser.Parser newParser = null;
  +
  +          try {
  +              newParser = (org.apache.cocoon.components.parser.Parser) this.manager.lookup(Roles.PARSER);
  +              InputSource __is = new InputSource(
  +                      new StringReader(
  +                          String.valueOf(<xsl:copy-of select="$expr"/>)
  +                      )
  +                  );
  +
  +
  +              XSPUtil.include(__is, this.contentHandler, newParser);
  +          } catch (Exception e) {
  +              this.cocoonLogger.error("Could not include page", e);
  +          } finally {
  +              this.manager.release((Component) newParser);
  +          }
         }
       </xsp:logic>
     </xsl:template>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.21  +4 -7      xml-cocoon/src/org/apache/cocoon/generation/Attic/FileGenerator.java
  
  Index: FileGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/generation/Attic/FileGenerator.java,v
  retrieving revision 1.1.2.20
  retrieving revision 1.1.2.21
  diff -u -r1.1.2.20 -r1.1.2.21
  --- FileGenerator.java	2001/02/22 17:10:31	1.1.2.20
  +++ FileGenerator.java	2001/02/22 19:08:02	1.1.2.21
  @@ -32,6 +32,7 @@
   import org.apache.avalon.ConfigurationException;
   import org.apache.avalon.Parameters;
   import org.apache.avalon.Poolable;
  +import org.apache.avalon.Component;
   
   /**
    *
  @@ -58,7 +59,7 @@
    * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo Fumagalli</a>
    *         (Apache Software Foundation, Exoffice Technologies)
    * @author <a href="mailto:cziegeler@sundn.de">Carsten Ziegeler</a>
  - * @version CVS $Revision: 1.1.2.20 $ $Date: 2001/02/22 17:10:31 $
  + * @version CVS $Revision: 1.1.2.21 $ $Date: 2001/02/22 19:08:02 $
    */
   public class FileGenerator extends ComposerGenerator implements Poolable, Configurable {
   
  @@ -139,6 +140,7 @@
   
               if(cxml == null)
               {
  +                Parser parser = (Parser)this.manager.lookup(Roles.PARSER);
                   // use the xmlcompiler for local files if storing is on
                   if (this.useStore == true && systemID.startsWith("file:") == true)
                   {
  @@ -148,9 +150,6 @@
                       XMLMulticaster multicaster = new XMLMulticaster(compiler, null,
                                 this.contentHandler, this.lexicalHandler);
   
  -                    getLogger().debug("Looking up " + Roles.PARSER);
  -                    Parser parser=(Parser)this.manager.lookup(Roles.PARSER);
  -
                       parser.setContentHandler(multicaster);
                       parser.setLexicalHandler(multicaster);
                       parser.parse(src);
  @@ -161,13 +160,11 @@
                       cxmlAndTime[1] = new Long(System.currentTimeMillis());
                       store.hold(systemID, cxmlAndTime);
                   } else {
  -                    getLogger().debug("Looking up " + Roles.PARSER);
  -                    Parser parser=(Parser)this.manager.lookup(Roles.PARSER);
  -
                       parser.setContentHandler(this.contentHandler);
                       parser.setLexicalHandler(this.lexicalHandler);
                       parser.parse(src);
                   }
  +                this.manager.release((Component) parser);
               } else {
                   // use the stored cxml
                   ByteArrayInputStream bais = new ByteArrayInputStream(cxml);
  
  
  
  1.1.2.13  +4 -2      xml-cocoon/src/org/apache/cocoon/generation/Attic/HTMLGenerator.java
  
  Index: HTMLGenerator.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/generation/Attic/HTMLGenerator.java,v
  retrieving revision 1.1.2.12
  retrieving revision 1.1.2.13
  diff -u -r1.1.2.12 -r1.1.2.13
  --- HTMLGenerator.java	2001/02/22 17:10:33	1.1.2.12
  +++ HTMLGenerator.java	2001/02/22 19:08:04	1.1.2.13
  @@ -29,7 +29,7 @@
   
   /**
    * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
  - * @version CVS $Revision: 1.1.2.12 $ $Date: 2001/02/22 17:10:33 $
  + * @version CVS $Revision: 1.1.2.13 $ $Date: 2001/02/22 19:08:04 $
    */
   public class HTMLGenerator extends ComposerGenerator implements Poolable {
   
  @@ -46,7 +46,9 @@
               tidy.setXHTML(true);
   
               // Extract the document using JTidy and stream it.
  -            URL url = ((URLFactory)manager.lookup(Roles.URL_FACTORY)).getURL(this.source);
  +            Component urlFactory = this.manager.lookup(Roles.URL_FACTORY);
  +            URL url = ((URLFactory) urlFactory).getURL(this.source);
  +            this.manager.release(urlFactory);
               org.w3c.dom.Document doc = tidy.parseDOM(new BufferedInputStream(url.openStream()), null);
               DOMStreamer streamer = new DOMStreamer(this.contentHandler,this.lexicalHandler);
               streamer.stream(doc);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.18  +7 -2      xml-cocoon/src/org/apache/cocoon/reading/Attic/ResourceReader.java
  
  Index: ResourceReader.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/reading/Attic/ResourceReader.java,v
  retrieving revision 1.1.2.17
  retrieving revision 1.1.2.18
  diff -u -r1.1.2.17 -r1.1.2.18
  --- ResourceReader.java	2001/02/20 20:34:18	1.1.2.17
  +++ ResourceReader.java	2001/02/22 19:08:07	1.1.2.18
  @@ -30,13 +30,14 @@
   
   import org.apache.avalon.ComponentManager;
   import org.apache.avalon.Composer;
  +import org.apache.avalon.Component;
   
   import org.xml.sax.SAXException;
   
   /**
    *
    * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
  - * @version CVS $Revision: 1.1.2.17 $ $Date: 2001/02/20 20:34:18 $
  + * @version CVS $Revision: 1.1.2.18 $ $Date: 2001/02/22 19:08:07 $
    *
    * The <code>ResourceReader</code> component is used to serve binary data
    * in a sitemap pipeline. It makes use of HTTP Headers to determine if
  @@ -69,16 +70,18 @@
           URLFactory urlFactory = null;
   
           try {
  -            urlFactory = (URLFactory)manager.lookup(Roles.URL_FACTORY);
  +            urlFactory = (URLFactory) this.manager.lookup(Roles.URL_FACTORY);
           } catch (Exception e) {
               getLogger().error("cannot obtain the URLFactory", e);
               throw new ProcessingException ("cannot obtain the URLFactory");
           }
   
           if (res == null) {
  +           this.manager.release((Component) urlFactory);
              throw new ProcessingException ("Missing a Response object in the objectModel");
           }
           if (req == null) {
  +           this.manager.release((Component) urlFactory);
              throw new ProcessingException ("Missing a Request object in the objectModel");
           }
           String src = null;
  @@ -115,6 +118,8 @@
               getLogger().error("ResourceReader: malformed source \"" + source + "\"", mue);
               throw new ResourceNotFoundException ("ResourceReader: malformed source \""
                   +src+"\". ", mue);
  +        } finally {
  +            this.manager.release((Component) urlFactory);
           }
           byte[] buffer = new byte[(int)len];
           is.read(buffer);
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.18  +9 -5      xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Handler.java
  
  Index: Handler.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/Handler.java,v
  retrieving revision 1.1.2.17
  retrieving revision 1.1.2.18
  diff -u -r1.1.2.17 -r1.1.2.18
  --- Handler.java	2001/02/19 21:57:50	1.1.2.17
  +++ Handler.java	2001/02/22 19:08:10	1.1.2.18
  @@ -21,6 +21,7 @@
   import org.apache.cocoon.Processor;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.components.language.generator.ProgramGenerator;
  +import org.apache.cocoon.components.language.generator.CompiledComponent;
   import org.apache.cocoon.components.url.URLFactory;
   import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.Roles;
  @@ -31,7 +32,7 @@
   import org.apache.avalon.ComponentManager;
   import org.apache.avalon.Contextualizable;
   import org.apache.avalon.Context;
  -
  +import org.apache.avalon.Component;
   import org.apache.avalon.AbstractLoggable;
   import org.apache.avalon.Loggable;
   
  @@ -40,7 +41,7 @@
    *
    * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
    * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
  - * @version CVS $Revision: 1.1.2.17 $ $Date: 2001/02/19 21:57:50 $
  + * @version CVS $Revision: 1.1.2.18 $ $Date: 2001/02/22 19:08:10 $
    */
   public class Handler extends AbstractLoggable implements Runnable, Configurable, Composer, Contextualizable, Processor {
       private Context context;
  @@ -171,10 +172,11 @@
           try {
               ProgramGenerator programGenerator = (ProgramGenerator) this.manager.lookup(Roles.PROGRAM_GENERATOR);
               smap = (Sitemap) programGenerator.load(this.sourceFile, markupLanguage, programmingLanguage, environment);
  -            smap.contextualize(this.context);
  -            smap.compose(this.manager);
  -            smap.configure(this.conf);
   
  +            if (this.sitemap != null) {
  +               programGenerator.release((CompiledComponent) this.sitemap);
  +            }
  +
               this.sitemap = smap;
               getLogger().debug("Sitemap regeneration complete");
   
  @@ -183,6 +185,8 @@
               } else {
                   getLogger().debug("No errors, but the sitemap has not been set.");
               }
  +
  +            this.manager.release((Component) programGenerator);
           } catch (Throwable t) {
               getLogger().error("Error compiling sitemap", t);
   
  
  
  
  1.1.2.23  +69 -52    xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java
  
  Index: ResourcePipeline.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java,v
  retrieving revision 1.1.2.22
  retrieving revision 1.1.2.23
  diff -u -r1.1.2.22 -r1.1.2.23
  --- ResourcePipeline.java	2001/02/22 17:10:52	1.1.2.22
  +++ ResourcePipeline.java	2001/02/22 19:08:12	1.1.2.23
  @@ -35,7 +35,7 @@
   
   /**
    * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a>
  - * @version CVS $Revision: 1.1.2.22 $ $Date: 2001/02/22 17:10:52 $
  + * @version CVS $Revision: 1.1.2.23 $ $Date: 2001/02/22 19:08:12 $
    */
   public class ResourcePipeline implements Composer {
       private Generator generator;
  @@ -130,69 +130,86 @@
   
           if (this.generator == null) {
               if (this.reader != null) {
  -                this.reader.setup ((EntityResolver) environment, environment.getObjectModel(), readerSource, readerParam);
  -                mime_type = this.reader.getMimeType();
  -                if (mime_type != null) {
  -                    // we have a mimeType freom the component itself
  -                    environment.setContentType (mime_type);
  -                } else if (readerMimeType != null) {
  -                    // there was a mimeType specified in the sitemap pipeline
  -                    environment.setContentType (this.readerMimeType);
  -                } else {
  -                    // use the mimeType specified in the sitemap component declaration
  -                    environment.setContentType (this.sitemapReaderMimeType);
  +                try {
  +                    this.reader.setup ((EntityResolver) environment, environment.getObjectModel(), readerSource, readerParam);
  +                    mime_type = this.reader.getMimeType();
  +                    if (mime_type != null) {
  +                        // we have a mimeType freom the component itself
  +                        environment.setContentType (mime_type);
  +                    } else if (readerMimeType != null) {
  +                        // there was a mimeType specified in the sitemap pipeline
  +                        environment.setContentType (this.readerMimeType);
  +                    } else {
  +                        // use the mimeType specified in the sitemap component declaration
  +                        environment.setContentType (this.sitemapReaderMimeType);
  +                    }
  +                    reader.setOutputStream (environment.getOutputStream());
  +                    reader.generate();
  +                } catch (Exception e) {
  +                    throw new ProcessingException("There was an error with the reader", e);
  +                } finally {
  +                    ((ComponentSelector) this.manager.lookup(Roles.READERS)).release((Component) reader);
                   }
  -                reader.setOutputStream (environment.getOutputStream());
  -                reader.generate();
  -
  -                ((ComponentSelector) this.manager.lookup(Roles.READERS)).release((Component) reader);
               } else {
                   throw new ProcessingException ("Generator or Reader not specified");
               }
           } else {
  -            if (this.serializer == null) {
  -                throw new ProcessingException ("Serializer not specified");
  -            }
  +            Transformer myTransformer[] = (Transformer []) transformers.toArray(new Transformer[] {});
   
  -            if (generatorException != null) {
  -                ((ErrorNotifier)this.generator).setException (generatorException);
  -            }
  +            try {
  +                if (this.serializer == null) {
  +                    if (this.generator != null) {
  +                        ((ComponentSelector) this.manager.lookup(Roles.GENERATORS)).release((Component) generator);
  +                    }
  +
  +                    if (this.transformers.isEmpty() == false) {
  +                        for (int i = 0; i < myTransformer.length; i++) {
  +                            ((ComponentSelector) this.manager.lookup(Roles.TRANSFORMERS)).release((Component) myTransformer[i]);
  +                        }
  +                    }
  +                    throw new ProcessingException ("Serializer not specified");
  +                }
   
  -            Transformer myTransformer[] = (Transformer []) transformers.toArray(new Transformer[] {});
  +                if (generatorException != null) {
  +                    ((ErrorNotifier)this.generator).setException (generatorException);
  +                }
   
  -            this.generator.setup ((EntityResolver) environment, environment.getObjectModel(), generatorSource, generatorParam);
  -            Transformer transformer = null;
  -            XMLProducer producer = this.generator;
  -            for (int i = 0; i < myTransformer.length; i++) {
  -                myTransformer[i].setup ((EntityResolver) environment, environment.getObjectModel(),
  -                        (String)transformerSources.get (i),
  -                        (Parameters)transformerParams.get (i));
  -                producer.setConsumer (myTransformer[i]);
  -                producer = myTransformer[i];
  -            }
  +                this.generator.setup ((EntityResolver) environment, environment.getObjectModel(), generatorSource, generatorParam);
  +                Transformer transformer = null;
  +                XMLProducer producer = this.generator;
  +                for (int i = 0; i < myTransformer.length; i++) {
  +                    myTransformer[i].setup ((EntityResolver) environment, environment.getObjectModel(),
  +                            (String)transformerSources.get (i),
  +                            (Parameters)transformerParams.get (i));
  +                    producer.setConsumer (myTransformer[i]);
  +                    producer = myTransformer[i];
  +                }
   
  -            mime_type = this.serializer.getMimeType();
  -            if (mime_type != null) {
  -                // we have a mimeType freom the component itself
  -                environment.setContentType (mime_type);
  -            } else if (serializerMimeType != null) {
  -                // there was a mimeType specified in the sitemap pipeline
  -                environment.setContentType (serializerMimeType);
  -            } else {
  -                // use the mimeType specified in the sitemap component declaration
  -                environment.setContentType (this.sitemapSerializerMimeType);
  -            }
  -            this.serializer.setOutputStream (environment.getOutputStream());
  -            producer.setConsumer (this.serializer);
  -            this.generator.generate();
  +                mime_type = this.serializer.getMimeType();
  +                if (mime_type != null) {
  +                    // we have a mimeType freom the component itself
  +                    environment.setContentType (mime_type);
  +                } else if (serializerMimeType != null) {
  +                    // there was a mimeType specified in the sitemap pipeline
  +                    environment.setContentType (serializerMimeType);
  +                } else {
  +                    // use the mimeType specified in the sitemap component declaration
  +                    environment.setContentType (this.sitemapSerializerMimeType);
  +                }
  +                this.serializer.setOutputStream (environment.getOutputStream());
  +                producer.setConsumer (this.serializer);
  +                this.generator.generate();
  +            } catch (Exception e) {
  +                throw new ProcessingException("Error generating the resource");
  +            } finally {
  +                ((ComponentSelector) this.manager.lookup(Roles.GENERATORS)).release((Component) generator);
   
  -            ((ComponentSelector) this.manager.lookup(Roles.GENERATORS)).release((Component) generator);
  +                for (int i = 0; i < myTransformer.length; i++) {
  +                    ((ComponentSelector) this.manager.lookup(Roles.TRANSFORMERS)).release((Component) myTransformer[i]);
  +                }
   
  -            for (int i = 0; i < myTransformer.length; i++) {
  -                ((ComponentSelector) this.manager.lookup(Roles.TRANSFORMERS)).release((Component) myTransformer[i]);
  +                ((ComponentSelector) this.manager.lookup(Roles.SERIALIZERS)).release((Component) serializer);
               }
  -
  -            ((ComponentSelector) this.manager.lookup(Roles.SERIALIZERS)).release((Component) serializer);
           }
           return true;
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.6   +68 -67    xml-cocoon/src/org/apache/cocoon/transformation/Attic/AbstractDOMTransformer.java
  
  Index: AbstractDOMTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/transformation/Attic/AbstractDOMTransformer.java,v
  retrieving revision 1.1.2.5
  retrieving revision 1.1.2.6
  diff -u -r1.1.2.5 -r1.1.2.6
  --- AbstractDOMTransformer.java	2001/01/12 15:31:31	1.1.2.5
  +++ AbstractDOMTransformer.java	2001/02/22 19:08:16	1.1.2.6
  @@ -18,6 +18,7 @@
   import org.apache.avalon.Composer;
   import org.apache.avalon.ComponentManager;
   import org.apache.avalon.Parameters;
  +import org.apache.avalon.Recyclable;
   
   /**
    * An Abstract DOM Transformer, for use when a transformer needs a DOM-based
  @@ -25,89 +26,89 @@
    * Subclass this interface and implement <code>transform(Document doc)</code>.
    * If you need a ComponentManager there is an instance variable
    * <code>manager</code> for use.
  - * 
  + *
    * @author <A HREF="rossb@apache.org">Ross Burton</A>
    * @author <A HREF="brobertson@mta.ca">Bruce G. Robertson</A>
    * @version CVS $Revision $Date
    */
   public abstract class AbstractDOMTransformer extends DOMBuilder
  -	implements Transformer, DOMBuilder.Listener, Composer {
  +    implements Transformer, DOMBuilder.Listener, Composer {
   
  -	/** The SAX entity resolver */
  -	protected EntityResolver resolver;
  -	/** The request object model */
  -	protected Map objectModel;
  -	/** The URI requested */
  -	protected String source;
  -	/** Parameters in the sitemap */
  -	protected Parameters parameters;
  -
  -	/**
  -	 * A <code>ComponentManager</code> which is available for use.
  -	 */
  -	protected ComponentManager manager;
  -
  -	public AbstractDOMTransformer() {
  -		// Set the factory later, when we have a Component Manager to get a
  -		// Parser from
  -		super();
  -		super.listener = this;
  -	}
  -
  -	/**
  -	 * Set the component manager.
  -	 */
  -	public void compose(ComponentManager manager) {
  -		this.manager = manager;
  -		// Get a parser and use it as a DOM factory
  -		try {
  -		    log.debug("Looking up " + Roles.PARSER);
  -		    Parser p = (Parser)manager.lookup(Roles.PARSER);
  -		    super.factory = (DOMFactory)p;
  -		} catch (Exception e) {
  -		    log.error("Could not find component", e);
  -		}
  -	}
  +    /** The SAX entity resolver */
  +    protected EntityResolver resolver;
  +    /** The request object model */
  +    protected Map objectModel;
  +    /** The URI requested */
  +    protected String source;
  +    /** Parameters in the sitemap */
  +    protected Parameters parameters;
   
       /**
  +     * A <code>ComponentManager</code> which is available for use.
  +     */
  +    protected ComponentManager manager;
  +
  +    public AbstractDOMTransformer() {
  +        // Set the factory later, when we have a Component Manager to get a
  +        // Parser from
  +        super();
  +        super.listener = this;
  +    }
  +
  +    /**
  +     * Set the component manager.
  +     */
  +    public void compose(ComponentManager manager) {
  +        this.manager = manager;
  +        // Get a parser and use it as a DOM factory
  +        try {
  +            log.debug("Looking up " + Roles.PARSER);
  +            Parser p = (Parser)manager.lookup(Roles.PARSER);
  +            super.factory = (DOMFactory)p;
  +        } catch (Exception e) {
  +            log.error("Could not find component", e);
  +        }
  +    }
  +
  +    /**
        * Set the <code>EntityResolver</code>, objectModel <code>Map</code>,
        * the source and sitemap <code>Parameters</code> used to process the request.
  -	 *
  -	 * If you wish to process the parameters, override this method, call
  -	 * <code>super()</code> and then add your code.
  +     *
  +     * If you wish to process the parameters, override this method, call
  +     * <code>super()</code> and then add your code.
        */
       public void setup(EntityResolver resolver, Map objectModel, String src, Parameters par)
  -		throws ProcessingException, SAXException, IOException {
  -		this.resolver = resolver;
  -		this.objectModel = objectModel;
  -		this.source = src;
  -		this.parameters = par;
  -	}
  -
  -	/**
  -	 * This method is called when the Document is finished.
  -	 * @param doc The DOM Document object representing this SAX stream
  -	 * @see org.apache.cocoon.xml.dom.DOMBuilder.Listener
  -	 */
  -	public void notify(Document doc) throws SAXException {
  -		// Call the user's transform method
  -		Document newdoc = transform(doc);
  -		// Now we stream the DOM tree out
  -		DOMStreamer s = new DOMStreamer(contentHandler, lexicalHandler);
  -		s.stream(newdoc);
  -	}
  -
  -	/**
  -	 * Transform the specified DOM, returning a new DOM to stream down the pipeline.
  -	 * @param doc The DOM Document representing the SAX stream
  -	 * @returns A DOM Document to stream down the pipeline
  -	 */
  -	protected abstract Document transform(Document doc) ;
  +        throws ProcessingException, SAXException, IOException {
  +        this.resolver = resolver;
  +        this.objectModel = objectModel;
  +        this.source = src;
  +        this.parameters = par;
  +    }
   
  +    /**
  +     * This method is called when the Document is finished.
  +     * @param doc The DOM Document object representing this SAX stream
  +     * @see org.apache.cocoon.xml.dom.DOMBuilder.Listener
  +     */
  +    public void notify(Document doc) throws SAXException {
  +        // Call the user's transform method
  +        Document newdoc = transform(doc);
  +        // Now we stream the DOM tree out
  +        DOMStreamer s = new DOMStreamer(contentHandler, lexicalHandler);
  +        s.stream(newdoc);
  +    }
   
  +    /**
  +     * Transform the specified DOM, returning a new DOM to stream down the pipeline.
  +     * @param doc The DOM Document representing the SAX stream
  +     * @returns A DOM Document to stream down the pipeline
  +     */
  +    protected abstract Document transform(Document doc) ;
  +
  +
       /** The <code>ContentHandler</code> receiving SAX events. */
       protected ContentHandler contentHandler;
  -    
  +
       /** The <code>LexicalHandler</code> receiving SAX events. */
       protected LexicalHandler lexicalHandler;
   
  
  
  
  1.1.2.4   +32 -35    xml-cocoon/src/org/apache/cocoon/transformation/Attic/FragmentExtractorTransformer.java
  
  Index: FragmentExtractorTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/transformation/Attic/FragmentExtractorTransformer.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- FragmentExtractorTransformer.java	2001/02/20 14:46:41	1.1.2.3
  +++ FragmentExtractorTransformer.java	2001/02/22 19:08:17	1.1.2.4
  @@ -10,6 +10,7 @@
   import org.apache.avalon.ComponentManager;
   import org.apache.avalon.Composer;
   import org.apache.avalon.ComponentManagerException;
  +import org.apache.avalon.Component;
   
   import org.xml.sax.SAXException;
   import org.xml.sax.Attributes;
  @@ -32,39 +33,33 @@
    * <a href="http://c2.com/cgi/wiki?YouArentGonnaNeedIt">you aren't gonna need it</a>,
    * so I've just used very simple extraction based on a URI and local name.
    * @author <a href="mailto:paul@luminas.co.uk">Paul Russell</a>
  - * @version CVS $Revision: 1.1.2.3 $ $Date: 2001/02/20 14:46:41 $
  + * @version CVS $Revision: 1.1.2.4 $ $Date: 2001/02/22 19:08:17 $
    */
   public class FragmentExtractorTransformer extends AbstractTransformer implements Composer {
       private static String EXTRACT_URI="http://www.w3.org/2000/svg";
       private static String EXTRACT_ELEMENT="svg";
  -    
  +
       private static String FE_URI="http://apache.org/cocoon/fragmentextractor";
       private static String XLINK_URI="http://www.w3c.org/1999/xlink";
  -    
  +
       private static String generatorClass = "org.apache.cocoon.generation.FragmentExtractorGenerator";
  -    
  +
       private DOMBuilder currentBuilder;
  -    
  +
       private Map prefixMap;
  -    
  +
       private int extractLevel;
  -    
  +
       private int imageID;
  -    
  +
       protected ComponentManager manager;
  -    
  +
       private DOMFactory documentFactory;
  -    
  +
       public void compose(ComponentManager manager) {
           this.manager = manager;
  -        try {
  -            documentFactory = (DOMFactory) manager.lookup(Roles.PARSER);
  -        } catch ( ComponentManagerException cme ) {
  -            documentFactory = null;
  -            getLogger().error("FragmentExtractorTransformer could not lookup parser.");
  -        }
       }
  -    
  +
       /** Setup the transformer.
        */
       public void setup(EntityResolver resolver, Map objectModel, String src, Parameters par)
  @@ -72,21 +67,21 @@
           extractLevel = 0;
           imageID = 0;
           prefixMap = new HashMap();
  -        
  -        if ( documentFactory == null ) {
  -            throw new ProcessingException(
  -                "FragmentExtractorTransformer has no document factory. "
  -                + "This is likely to be because a parser could not be "
  -                + "Retrived."
  -            );
  -        }
       }
  -     
  +
       /**
        * Receive notification of the beginning of a document.
        */
       public void startDocument()
       throws SAXException {
  +        try {
  +            documentFactory = (DOMFactory) manager.lookup(Roles.PARSER);
  +        } catch ( ComponentManagerException cme ) {
  +            documentFactory = null;
  +            getLogger().error("FragmentExtractorTransformer could not lookup parser.");
  +            throw new SAXException("Could not get documentFactory", cme);
  +        }
  +
           super.startDocument();
       }
   
  @@ -96,6 +91,9 @@
       public void endDocument()
       throws SAXException {
           super.endDocument();
  +
  +        this.manager.release((Component) this.documentFactory);
  +        this.documentFactory = null;
       }
   
       /**
  @@ -149,7 +147,6 @@
               imageID++;
               getLogger().debug("FragmentExtractorTransformer extractLevel now " + extractLevel + ".");
   
  -            
               // Start the DOM document
               this.currentBuilder = new DOMBuilder(documentFactory);
               this.currentBuilder.startDocument();
  @@ -162,7 +159,7 @@
                   );
               }
           }
  -        
  +
           if ( extractLevel == 0 ) {
               super.startElement(uri,loc,raw,a);
           } else {
  @@ -191,7 +188,7 @@
               if ( uri.equals(this.EXTRACT_URI) && loc.equals(this.EXTRACT_ELEMENT) ) {
                   extractLevel--;
                   getLogger().debug("FragmentExtractorTransformer extractLevel now " + extractLevel + ".");
  -                
  +
                   if ( extractLevel == 0 ) {
                       // finish building the DOM. remove existing prefix mappings.
                       Iterator itt = prefixMap.entrySet().iterator();
  @@ -202,11 +199,11 @@
                           );
                       }
                       this.currentBuilder.endDocument();
  -                    
  +
                       Document doc = this.currentBuilder.getDocument();
                       String id = FragmentExtractorGenerator.store(doc);
  -					getLogger().debug("FragmentExtractorTransformer stored document " + id + ".");
  -                    
  +                    getLogger().debug("FragmentExtractorTransformer stored document " + id + ".");
  +
                       // Insert ref.
                       super.startPrefixMapping("fe",FE_URI);
                       AttributesImpl atts = new AttributesImpl();
  @@ -278,7 +275,7 @@
           if ( extractLevel == 0 ) {
               super.skippedEntity(name);
           } else {
  -            this.currentBuilder.skippedEntity(name);    
  +            this.currentBuilder.skippedEntity(name);
           }
       }
   
  @@ -298,7 +295,7 @@
           } else {
               throw new SAXException(
                   "Recieved startDTD after beginning SVG extraction process."
  -            );  
  +            );
           }
       }
   
  @@ -384,7 +381,7 @@
               this.currentBuilder.comment(ch,start,len);
           }
       }
  -    
  +
       public void processDocument(Document doc) {
           getLogger().debug("FragmentExtractorTransformer recieved document.");
       }
  
  
  
  1.1.2.9   +5 -1      xml-cocoon/src/org/apache/cocoon/transformation/Attic/I18nTransformer.java
  
  Index: I18nTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/transformation/Attic/I18nTransformer.java,v
  retrieving revision 1.1.2.8
  retrieving revision 1.1.2.9
  diff -u -r1.1.2.8 -r1.1.2.9
  --- I18nTransformer.java	2001/02/22 17:10:54	1.1.2.8
  +++ I18nTransformer.java	2001/02/22 19:08:18	1.1.2.9
  @@ -18,6 +18,7 @@
   import org.apache.avalon.Poolable;
   import org.apache.avalon.ComponentManager;
   import org.apache.avalon.Composer;
  +import org.apache.avalon.Component;
   import org.apache.avalon.Parameters;
   import org.apache.avalon.Loggable;
   
  @@ -145,8 +146,10 @@
   
           URL tr = null;
           try {
  -            tr = ((URLFactory)manager.lookup(Roles.URL_FACTORY))
  +            Component urlFactory = this.manager.lookup(Roles.URL_FACTORY);
  +            tr = ((URLFactory) urlFactory)
                   .getURL(resolver.resolveEntity(null, translations_file).getSystemId());
  +            this.manager.release(urlFactory);
           } catch (Exception e) {
               getLogger().error("cannot obtain the URLFactory", e);
               throw new SAXException("cannot obtain the URLFactory", e);
  @@ -328,5 +331,6 @@
           parser.setContentHandler(i18n_handler);
           parser.parse(input);
   
  +        this.manager.release((Component) parser);
       }
   }
  
  
  
  1.1.2.20  +4 -1      xml-cocoon/src/org/apache/cocoon/transformation/Attic/XIncludeTransformer.java
  
  Index: XIncludeTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/transformation/Attic/XIncludeTransformer.java,v
  retrieving revision 1.1.2.19
  retrieving revision 1.1.2.20
  diff -u -r1.1.2.19 -r1.1.2.20
  --- XIncludeTransformer.java	2001/02/22 17:10:56	1.1.2.19
  +++ XIncludeTransformer.java	2001/02/22 19:08:19	1.1.2.20
  @@ -31,6 +31,7 @@
   import org.apache.avalon.Loggable;
   import org.apache.avalon.AbstractLoggable;
   import org.apache.avalon.Poolable;
  +import org.apache.avalon.Component;
   import org.apache.cocoon.Roles;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.components.parser.Parser;
  @@ -48,7 +49,7 @@
    * by the SAX event FSM yet.
    *
    * @author <a href="mailto:balld@webslingerZ.com">Donald Ball</a>
  - * @version CVS $Revision: 1.1.2.19 $ $Date: 2001/02/22 17:10:56 $ $Author: bloritsch $
  + * @version CVS $Revision: 1.1.2.20 $ $Date: 2001/02/22 19:08:19 $ $Author: bloritsch $
    */
   public class XIncludeTransformer extends AbstractTransformer implements Composer, Poolable {
   
  @@ -265,6 +266,8 @@
                   parser.setLexicalHandler(xinclude_handler);
                   parser.parse(input);
               }
  +
  +            this.manager.release((Component) parser);
           }
       }
   
  
  
  
  1.1.2.14  +4 -2      xml-cocoon/src/org/apache/cocoon/transformation/Attic/XTTransformer.java
  
  Index: XTTransformer.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/transformation/Attic/XTTransformer.java,v
  retrieving revision 1.1.2.13
  retrieving revision 1.1.2.14
  diff -u -r1.1.2.13 -r1.1.2.14
  --- XTTransformer.java	2001/02/22 17:10:57	1.1.2.13
  +++ XTTransformer.java	2001/02/22 19:08:20	1.1.2.14
  @@ -71,7 +71,7 @@
    * This Transformer use the XT processor.
    *
    * @author <a href="mailto:ssahuc@imediation.com">Sahuc Sebastien</a>
  - * @version CVS $Revision: 1.1.2.13 $ $Date: 2001/02/22 17:10:57 $
  + * @version CVS $Revision: 1.1.2.14 $ $Date: 2001/02/22 19:08:20 $
    */
   public class XTTransformer extends DocumentHandlerWrapper
   implements Transformer, Composer, Loggable, Poolable {
  @@ -344,7 +344,9 @@
           // Set the xslFile for the caching mechanism
           URL url = null;
           try {
  -            url = ((URLFactory)this.manager.lookup(Roles.URL_FACTORY)).getURL(sheetSource.getSystemId());
  +            Component urlFactory = this.manager.lookup(Roles.URL_FACTORY);
  +            url = ((URLFactory) urlFactory).getURL(sheetSource.getSystemId());
  +            this.manager.release(urlFactory);
           } catch (Exception e) {
               log.error("cannot obtain the URLFactory", e);
               throw new SAXException ("cannot obtain the URLFactory", e);