vgritsenko    02/01/24 19:58:31

  Modified:    src/java/org/apache/cocoon/transformation
                        CachingCIncludeTransformer.java
                        FragmentExtractorTransformer.java
                        I18nTransformer.java
                        WriteDOMSessionTransformer.java
                        XIncludeTransformer.java
  Log:
  Always recycle sources.
  
  Revision  Changes    Path
  1.3       +14 -3     
xml-cocoon2/src/java/org/apache/cocoon/transformation/CachingCIncludeTransformer.java
  
  Index: CachingCIncludeTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/CachingCIncludeTransformer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CachingCIncludeTransformer.java   7 Jan 2002 13:09:02 -0000       1.2
  +++ CachingCIncludeTransformer.java   25 Jan 2002 03:58:30 -0000      1.3
  @@ -12,12 +12,15 @@
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.parameters.Parameters;
  +
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.caching.CacheValidity;
   import org.apache.cocoon.caching.Cacheable;
   import org.apache.cocoon.caching.IncludeCacheValidity;
  +import org.apache.cocoon.environment.Source;
   import org.apache.cocoon.environment.SourceResolver;
   import org.apache.cocoon.xml.IncludeXMLConsumer;
  +
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.AttributesImpl;
  @@ -45,7 +48,7 @@
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Carsten Ziegeler</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Maciek Kaminski</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2002/01/07 13:09:02 $ $Author: cziegeler $
  + * @version CVS $Revision: 1.3 $ $Date: 2002/01/25 03:58:30 $ $Author: vgritsenko $
    */
   public class CachingCIncludeTransformer extends AbstractTransformer
   implements Recyclable, Composable, Cacheable {
  @@ -141,12 +144,16 @@
   
           // complete validity information
           if(currentCacheValidity != null ) {
  +            Source temp = null;
               try {
  -                currentCacheValidity.add(src, 
sourceResolver.resolve(src).getLastModified());
  +                temp = sourceResolver.resolve(src);
  +                currentCacheValidity.add(src, temp.getLastModified());
                   getLogger().debug("currentCacheValidity: " + currentCacheValidity);
               } catch (Exception e) {
                   getLogger().error("CachingCIncludeTransformer could not resolve 
resource:" + src,  e);
                   throw new SAXException("CachingCIncludeTransformer could not 
resolve resource", e);
  +            } finally {
  +                if (temp != null) temp.recycle();
               }
           }
   
  @@ -161,11 +168,15 @@
                                  attrs);
           }
   
  +        Source source = null;
           try {
  -            this.sourceResolver.resolve(src).toSAX(getConsumer());
  +            source = this.sourceResolver.resolve(src);
  +            source.toSAX(getConsumer());
           } catch (Exception e) {
               getLogger().error("CachingCIncludeTransformer", e);
               throw new SAXException("CachingCIncludeTransformer could not read 
resource", e);
  +        } finally {
  +            if (source != null) source.recycle();
           }
   
           if (!"".equals(element)) {
  
  
  
  1.4       +3 -4      
xml-cocoon2/src/java/org/apache/cocoon/transformation/FragmentExtractorTransformer.java
  
  Index: FragmentExtractorTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/FragmentExtractorTransformer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FragmentExtractorTransformer.java 23 Jan 2002 20:58:11 -0000      1.3
  +++ FragmentExtractorTransformer.java 25 Jan 2002 03:58:30 -0000      1.4
  @@ -46,7 +46,7 @@
    * and the associated generator are very likely to fail on a clustered server.</b>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Paul Russell</a>
  - * @version CVS $Revision: 1.3 $ $Date: 2002/01/23 20:58:11 $
  + * @version CVS $Revision: 1.4 $ $Date: 2002/01/25 03:58:30 $
    */
   public class FragmentExtractorTransformer extends AbstractTransformer
       implements Composable, Disposable, Cacheable, Poolable {
  @@ -70,10 +70,9 @@
   
       private DOMFactory documentFactory;
   
  -    public void compose(ComponentManager manager)
  -        throws ComponentException{
  +    public void compose(ComponentManager manager) throws ComponentException {
           this.manager = manager;
  -        documentFactory = (DOMFactory) manager.lookup(Parser.ROLE);
  +        this.documentFactory = (DOMFactory) this.manager.lookup(Parser.ROLE);
       }
   
       /** Setup the transformer.
  
  
  
  1.4       +10 -6     
xml-cocoon2/src/java/org/apache/cocoon/transformation/I18nTransformer.java
  
  Index: I18nTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/I18nTransformer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- I18nTransformer.java      8 Jan 2002 05:44:54 -0000       1.3
  +++ I18nTransformer.java      25 Jan 2002 03:58:30 -0000      1.4
  @@ -490,13 +490,17 @@
                   );
   
           debug( "catalog location:" + location );
  -        Source source = resolver.resolve( location );
  -        String systemId = source.getSystemId();
  -        if ( !systemId.startsWith( FILE ) ) {
  -            throw new ResourceNotFoundException( systemId + " does not denote a 
directory" );
  +        Source source = resolver.resolve(location);
  +        try {
  +            String systemId = source.getSystemId();
  +            if ( !systemId.startsWith( FILE ) ) {
  +                throw new ResourceNotFoundException( systemId + " does not denote a 
directory" );
  +            }
  +            debug( "catalog directory:" + systemId );
  +            dirConf.setValue( systemId );
  +        } finally {
  +            source.recycle();
           }
  -        debug( "catalog directory:" + systemId );
  -        dirConf.setValue( systemId );
   
           configuration.addChild( dirConf );
           factory.configure( configuration );
  
  
  
  1.2       +7 -11     
xml-cocoon2/src/java/org/apache/cocoon/transformation/WriteDOMSessionTransformer.java
  
  Index: WriteDOMSessionTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/WriteDOMSessionTransformer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- WriteDOMSessionTransformer.java   3 Jan 2002 12:31:20 -0000       1.1
  +++ WriteDOMSessionTransformer.java   25 Jan 2002 03:58:30 -0000      1.2
  @@ -11,6 +11,7 @@
   import org.apache.avalon.excalibur.pool.Poolable;
   import org.apache.avalon.framework.activity.Disposable;
   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.Composable;
   import org.apache.avalon.framework.parameters.Parameters;
  @@ -44,7 +45,7 @@
    *   dom-root-element is the trigger that will be the root element of the DOM
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Sven Beauprez</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2002/01/03 12:31:20 $ $Author: giacomo $
  + * @version CVS $Revision: 1.2 $ $Date: 2002/01/25 03:58:30 $ $Author: vgritsenko $
    */
   
   public class WriteDOMSessionTransformer extends AbstractTransformer implements 
  @@ -96,20 +97,15 @@
   
       /** END SitemapComponent methods **/
   
  -    public void compose(ComponentManager manager) {
  +    public void compose(ComponentManager manager) throws ComponentException {
           this.manager = manager;
  -        try {
  -            getLogger().debug("Looking up " + Parser.ROLE);
  -            parser = (Parser)manager.lookup(Parser.ROLE);
  -        } catch (Exception e) {
  -            getLogger().error("Could not find component", e);
  -        }
  +        this.parser = (Parser)this.manager.lookup(Parser.ROLE);
       }
       
       public void dispose() {
  -      if (parser!=null)  {
  -        manager.release((Component)parser);
  -      }
  +        if (this.parser != null)  {
  +            this.manager.release((Component)this.parser);
  +        }
       }
   
   
  
  
  
  1.3       +84 -74    
xml-cocoon2/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java
  
  Index: XIncludeTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XIncludeTransformer.java  3 Jan 2002 14:56:56 -0000       1.2
  +++ XIncludeTransformer.java  25 Jan 2002 03:58:30 -0000      1.3
  @@ -41,7 +41,7 @@
    * by the SAX event FSM yet.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Donald Ball</a>
  - * @version CVS $Revision: 1.2 $ $Date: 2002/01/03 14:56:56 $ $Author: cziegeler $
  + * @version CVS $Revision: 1.3 $ $Date: 2002/01/25 03:58:30 $ $Author: vgritsenko $
    */
   public class XIncludeTransformer extends AbstractTransformer implements Composable, 
Recyclable, Disposable {
   
  @@ -143,14 +143,19 @@
   
               // If url ends with .xxx then truncate to dir
               if (base_xmlbase_uri.getSystemId().lastIndexOf('.') > 
base_xmlbase_uri.getSystemId().lastIndexOf('/')) {
  -               base_xmlbase_uri = 
this.resolver.resolve(base_xmlbase_uri.getSystemId().substring(0,base_xmlbase_uri.getSystemId().lastIndexOf('/')+1));
  +               String uri = 
base_xmlbase_uri.getSystemId().substring(0,base_xmlbase_uri.getSystemId().lastIndexOf('/')+1);
  +               base_xmlbase_uri.recycle();
  +               base_xmlbase_uri = null;
  +               base_xmlbase_uri = this.resolver.resolve(uri);
               }
   
               if (current_xmlbase_uri == null) {
                  current_xmlbase_uri = base_xmlbase_uri;
               }
   
  -        } catch (Exception e) { getLogger().debug("Exception ignored", e); }
  +        } catch (Exception e) {
  +            getLogger().debug("Exception ignored", e);
  +        }
           super.setDocumentLocator(locator);
       }
   
  @@ -206,82 +211,85 @@
               else
                   getLogger().debug("Base URI: " + current_xmlbase_uri.getSystemId());
           }
  -        Source url;
  -        String suffix;
  -        int index = href.indexOf('#');
  -        if (index < 0) {
  -            if(current_xmlbase_uri == null)
  -                url = this.resolver.resolve(href);
  -            else
  -                url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + 
href);
  -            suffix = "";
  -        } else {
  -            if(current_xmlbase_uri == null)
  -                url = this.resolver.resolve(href.substring(0,index));
  -            else
  -                url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + 
href.substring(0,index));
  -            suffix = href.substring(index+1);
  -        }
  -        if (getLogger().isDebugEnabled()) {
  -            getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
  -        }
   
  -        if (parse.equals("text")) {
  -            getLogger().debug("Parse type is text");
  -            InputStream input = url.getInputStream();
  -            Reader reader = new BufferedReader(new InputStreamReader(input));
  -            int read;
  -            char ary[] = new char[1024];
  -            if (reader != null) {
  -                while ((read = reader.read(ary)) != -1) {
  -                    super.characters(ary,0,read);
  -                }
  -                reader.close();
  +        Source url = null;
  +        String suffix;
  +        try {
  +            int index = href.indexOf('#');
  +            if (index < 0) {
  +                if(current_xmlbase_uri == null)
  +                    url = this.resolver.resolve(href);
  +                else
  +                    url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + 
href);
  +                suffix = "";
  +            } else {
  +                if(current_xmlbase_uri == null)
  +                    url = this.resolver.resolve(href.substring(0,index));
  +                else
  +                    url = this.resolver.resolve(current_xmlbase_uri.getSystemId() + 
href.substring(0,index));
  +                suffix = href.substring(index+1);
               }
  -        } else if (parse.equals("xml")) {
  -            getLogger().debug("Parse type is XML");
  -            Parser parser = null;
  -            try
  -            {
  -                getLogger().debug("Looking up " + Parser.ROLE);
  -                parser = (Parser)manager.lookup(Parser.ROLE);
  -
  -                InputSource input = url.getInputSource();
  -
  -                if (suffix.startsWith("xpointer(") && suffix.endsWith(")")) {
  -                    String xpath = suffix.substring(9,suffix.length()-1);
  -                    getLogger().debug("XPath is "+xpath);
  -                    Document document = parser.parseDocument(input);
  -                    NodeList list = processor.selectNodeList(document,xpath);
  -                    DOMStreamer streamer = new 
DOMStreamer(super.contentHandler,super.lexicalHandler);
  -                    int length = list.getLength();
  -                    for (int i=0; i<length; i++) {
  -                        streamer.stream(list.item(i));
  +            if (getLogger().isDebugEnabled()) {
  +                getLogger().debug("URL: "+url+"\nSuffix: "+suffix);
  +            }
  +        
  +            if (parse.equals("text")) {
  +                getLogger().debug("Parse type is text");
  +                InputStream input = url.getInputStream();
  +                Reader reader = new BufferedReader(new InputStreamReader(input));
  +                int read;
  +                char ary[] = new char[1024];
  +                if (reader != null) {
  +                    while ((read = reader.read(ary)) != -1) {
  +                        super.characters(ary,0,read);
                       }
  -                } else {
  -                    IncludeXMLConsumer xinclude_handler = new 
IncludeXMLConsumer(super.contentHandler,super.lexicalHandler);
  -                    xinclude_handler.setLogger(getLogger());
  -                    parser.setConsumer(xinclude_handler);
  -                    parser.parse(input);
  +                    reader.close();
  +                }
  +            } else if (parse.equals("xml")) {
  +                getLogger().debug("Parse type is XML");
  +                Parser parser = null;
  +                try {
  +                    parser = (Parser)manager.lookup(Parser.ROLE);
  +        
  +                    InputSource input = url.getInputSource();
  +        
  +                    if (suffix.startsWith("xpointer(") && suffix.endsWith(")")) {
  +                        String xpath = suffix.substring(9,suffix.length()-1);
  +                        getLogger().debug("XPath is "+xpath);
  +                        Document document = parser.parseDocument(input);
  +                        NodeList list = processor.selectNodeList(document,xpath);
  +                        DOMStreamer streamer = new 
DOMStreamer(super.contentHandler,super.lexicalHandler);
  +                        int length = list.getLength();
  +                        for (int i=0; i<length; i++) {
  +                            streamer.stream(list.item(i));
  +                        }
  +                    } else {
  +                        IncludeXMLConsumer xinclude_handler = new 
IncludeXMLConsumer(super.contentHandler,super.lexicalHandler);
  +                        xinclude_handler.setLogger(getLogger());
  +                        parser.setConsumer(xinclude_handler);
  +                        parser.parse(input);
  +                    }
  +                } catch(SAXException e) {
  +                    getLogger().error("Error in processXIncludeElement", e);
  +                    throw e;
  +                } catch(ProcessingException e) {
  +                    getLogger().error("Error in processXIncludeElement", e);
  +                    throw e;
  +                } catch(MalformedURLException e) {
  +                    getLogger().error("Error in processXIncludeElement", e);
  +                    throw e;
  +                } catch(IOException e) {
  +                    getLogger().error("Error in processXIncludeElement", e);
  +                    throw e;
  +                } catch(ComponentException e) {
  +                    getLogger().error("Error in processXIncludeElement", e);
  +                    throw new SAXException(e);
  +                } finally {
  +                    if(parser != null) this.manager.release(parser);
                   }
  -            } catch(SAXException e) {
  -                getLogger().error("Error in processXIncludeElement", e);
  -                throw e;
  -            } catch(ProcessingException e) {
  -                getLogger().error("Error in processXIncludeElement", e);
  -                throw e;
  -            } catch(MalformedURLException e) {
  -                getLogger().error("Error in processXIncludeElement", e);
  -                throw e;
  -            } catch(IOException e) {
  -                getLogger().error("Error in processXIncludeElement", e);
  -                throw e;
  -            } catch(ComponentException e) {
  -                getLogger().error("Error in processXIncludeElement", e);
  -                throw new SAXException(e);
  -            } finally {
  -                if(parser != null) this.manager.release(parser);
               }
  +        } finally {
  +            if (url != null) url.recycle();
           }
       }
   
  @@ -289,7 +297,9 @@
       {
           // Reset all variables to initial state.
           this.resolver = null;
  +        if (base_xmlbase_uri != null) base_xmlbase_uri.recycle();
           base_xmlbase_uri = null;
  +        if (current_xmlbase_uri != null) current_xmlbase_uri.recycle();
           current_xmlbase_uri = null;
           xmlbase_stack = new Stack();
           last_xmlbase_element_uri = "";
  
  
  

----------------------------------------------------------------------
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