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]