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]