cziegeler 02/05/27 02:57:19 Modified: src/java/org/apache/cocoon/caching Cache.java src/java/org/apache/cocoon/caching/impl CacheImpl.java src/java/org/apache/cocoon/components/pipeline AbstractProcessingPipeline.java src/java/org/apache/cocoon/components/pipeline/impl CachingProcessingPipeline.java Log: Minor update of the caching algorithm Revision Changes Path 1.2 +4 -4 xml-cocoon2/src/java/org/apache/cocoon/caching/Cache.java Index: Cache.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/caching/Cache.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Cache.java 6 May 2002 13:22:31 -0000 1.1 +++ Cache.java 27 May 2002 09:57:18 -0000 1.2 @@ -62,7 +62,7 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: Cache.java,v 1.1 2002/05/06 13:22:31 cziegeler Exp $ + * @version CVS $Id: Cache.java,v 1.2 2002/05/27 09:57:18 cziegeler Exp $ */ public interface Cache extends Component { @@ -78,7 +78,7 @@ * @param response the cached response */ void store(Map objectModel, - String key, + Object key, CachedResponse response) throws ProcessingException; @@ -88,7 +88,7 @@ * @param key the key used by the caching algorithm to identify the * request */ - CachedResponse get(String key); + CachedResponse get(Object key); /** * Remove a cached response. @@ -96,5 +96,5 @@ * @param key the key used by the caching algorithm to identify the * request */ - void remove(String key); + void remove(Object key); } 1.2 +4 -4 xml-cocoon2/src/java/org/apache/cocoon/caching/impl/CacheImpl.java Index: CacheImpl.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/caching/impl/CacheImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CacheImpl.java 6 May 2002 13:22:31 -0000 1.1 +++ CacheImpl.java 27 May 2002 09:57:18 -0000 1.2 @@ -71,7 +71,7 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: CacheImpl.java,v 1.1 2002/05/06 13:22:31 cziegeler Exp $ + * @version CVS $Id: CacheImpl.java,v 1.2 2002/05/27 09:57:18 cziegeler Exp $ */ public class CacheImpl extends AbstractLogEnabled @@ -109,7 +109,7 @@ * @param response the cached response */ public void store(Map objectModel, - String key, + Object key, CachedResponse response) throws ProcessingException { try { @@ -125,7 +125,7 @@ * @param key the key used by the caching algorithm to identify the * request */ - public CachedResponse get(String key) { + public CachedResponse get(Object key) { return (CachedResponse)this.store.get(key); } @@ -135,7 +135,7 @@ * @param key the key used by the caching algorithm to identify the * request */ - public void remove(String key) { + public void remove(Object key) { this.store.remove(key); } 1.9 +32 -47 xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java Index: AbstractProcessingPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- AbstractProcessingPipeline.java 21 May 2002 10:16:20 -0000 1.8 +++ AbstractProcessingPipeline.java 27 May 2002 09:57:19 -0000 1.9 @@ -81,7 +81,7 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: AbstractProcessingPipeline.java,v 1.8 2002/05/21 10:16:20 cziegeler Exp $ + * @version CVS $Id: AbstractProcessingPipeline.java,v 1.9 2002/05/27 09:57:19 cziegeler Exp $ */ public abstract class AbstractProcessingPipeline extends AbstractLogEnabled @@ -360,60 +360,49 @@ } /** - * Connect the XML pipeline. + * Connect the next component */ - protected void connectPipeline(Environment environment) + protected void connect(Environment environment, + XMLProducer producer, + XMLConsumer consumer) throws ProcessingException { - XMLProducer prev = (XMLProducer)this.generator; - XMLConsumer next; - try { - Iterator itt = this.transformers.iterator(); - while ( itt.hasNext() ) { - if (this.configuredSAXConnector) { - // connect SAXConnector - SAXConnector connect = (SAXConnector) this.manager.lookup(SAXConnector.ROLE); - connect.setup(environment,environment.getObjectModel(), null, null); - this.connectors.add(connect); - next = connect; - prev.setConsumer(next); - prev = connect; - } - // Connect next component. - Transformer trans = (Transformer) itt.next(); - next = trans; - prev.setConsumer(next); - prev = trans; - } - + XMLProducer next = producer; if (this.configuredSAXConnector) { - // insert SAXConnector + // connect SAXConnector SAXConnector connect = (SAXConnector) this.manager.lookup(SAXConnector.ROLE); - connect.setup(environment,environment.getObjectModel(), null, null); this.connectors.add(connect); + connect.setup(environment, environment.getObjectModel(), null, null); + next.setConsumer( connect ); next = connect; - prev.setConsumer(next); - prev = connect; } - // insert the serializer - prev.setConsumer(this.lastConsumer); + // Connect next component. + next.setConsumer(consumer); } catch ( IOException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); + throw new ProcessingException("Could not connect pipeline.", e); } catch ( SAXException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); + throw new ProcessingException("Could not connect pipeline.", e); } catch ( ComponentException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); + throw new ProcessingException("Could not connect pipeline.", e); + } + } + + /** + * Connect the XML pipeline. + */ + protected void connectPipeline(Environment environment) + throws ProcessingException { + XMLProducer prev = (XMLProducer)this.generator; + + Iterator itt = this.transformers.iterator(); + while ( itt.hasNext() ) { + Transformer trans = (Transformer) itt.next(); + this.connect( environment, prev, trans ); + prev = trans; } + // insert the serializer + this.connect( environment, prev, this.lastConsumer); } /** @@ -475,11 +464,7 @@ } catch ( ProcessingException e ) { throw e; } catch ( Exception e ) { - getLogger().debug("Exception in process", e); - throw new ProcessingException( - "Failed to execute pipeline.", - e - ); + throw new ProcessingException("Failed to execute pipeline.", e); } return true; } 1.10 +160 -316 xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java Index: CachingProcessingPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/impl/CachingProcessingPipeline.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- CachingProcessingPipeline.java 24 May 2002 08:52:33 -0000 1.9 +++ CachingProcessingPipeline.java 27 May 2002 09:57:19 -0000 1.10 @@ -75,7 +75,7 @@ import org.apache.cocoon.xml.XMLProducer; import org.apache.excalibur.source.SourceValidity; import org.xml.sax.SAXException; - +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.SocketException; @@ -89,32 +89,42 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: CachingProcessingPipeline.java,v 1.9 2002/05/24 08:52:33 cziegeler Exp $ + * @version CVS $Id: CachingProcessingPipeline.java,v 1.10 2002/05/27 09:57:19 cziegeler Exp $ */ public class CachingProcessingPipeline extends AbstractProcessingPipeline implements Disposable { /** The Cache storing the cached response (or part of the response) */ - private Cache cache; + protected Cache cache; /** The role name of the generator */ - private String generatorRole; + protected String generatorRole; /** The role names of the transfomrers */ - private ArrayList transformerRoles = new ArrayList(); + protected ArrayList transformerRoles = new ArrayList(); /** The role name of the serializer */ - private String serializerRole; + protected String serializerRole; /** The role name of the reader */ - private String readerRole; + protected String readerRole; - private ArrayList notCacheableTransformers = new ArrayList(); - private Map validityObjects; - private StringBuffer pipelineCacheKey; + /** A cached response which is used as input for the pipeline */ + protected CachedResponse cachedResponse; + /** The key to store the cached response */ + protected StringBuffer pipelineCacheKey; + /** The index indicating to the first transformer which is not cacheable */ + protected int firstNotCacheableTransformerIndex; + /** The deserializer */ + protected XMLDeserializer xmlDeserializer; + /** Complete response is cached */ + protected boolean completeResponseIsCached; + /** The serializer */ + protected XMLSerializer xmlSerializer; - private int firstNotCacheableTransformerIndex; + /** The validity objects */ + protected SourceValidity[] validityObjects; /** * Composable Interface @@ -163,95 +173,78 @@ /** * Process the given <code>Environment</code>, producing the output. + */ protected boolean processXMLPipeline(Environment environment) throws ProcessingException { - - // we cache if the pipelinecachekey is available - XMLSerializer xmlSerializer = null; - - try { - if (this.pipelineCacheKey != null) { - // now we have the key to get the cached object - CachedEventObject cachedObject = (CachedEventObject)this.cache.get(this.pipelineCacheKey); - - if (cachedObject != null) { - getLogger().debug("Found cached content for '" + environment.getURI() + "'."); - Iterator validityIterator = validityObjects.keySet().iterator(); - ComponentCacheKey validityKey; - boolean valid = true; - while (validityIterator.hasNext() && valid) { - validityKey = (ComponentCacheKey)validityIterator.next(); - valid = cachedObject.isValid(validityKey, (CacheValidity)validityObjects.get(validityKey)); - if (getLogger().isDebugEnabled()) { - CacheValidity cachedValidity = cachedObject.getCacheValidity(validityKey); - getLogger().debug("Compared cached validity '" + cachedValidity + - "' with new validity '" + validityObjects.get(validityKey) + - "' : " + (valid ? "valid" : "changed")); - } + if (this.pipelineCacheKey == null) { + return super.processXMLPipeline( environment ); + } else if (this.completeResponseIsCached) { + try { + final OutputStream outputStream = environment.getOutputStream(); + byte[] response = this.cachedResponse.getResponse(); + if (response.length > 0) { + environment.setContentLength(response.length); + outputStream.write(response); + } + } catch ( SocketException se ) { + if (se.getMessage().indexOf("reset") > 0 + || se.getMessage().indexOf("aborted") > 0) { + throw new ConnectionResetException("Connection reset by peer", se); + } else { + throw new ProcessingException("Failed to execute reader pipeline.", se); + } + } catch ( Exception e ) { + throw new ProcessingException("Error executing reader pipeline.",e); + } + } else { + try { + if (this.serializer.shouldSetContentLength()) { + // set the output stream + ByteArrayOutputStream os = new ByteArrayOutputStream(); + this.serializer.setOutputStream(os); + + // execute the pipeline: + if ( this.xmlDeserializer != null ) { + this.xmlDeserializer.deserialize(this.cachedResponse.getResponse()); + } else { + this.generator.generate(); } - if (valid) { - getLogger().debug("Using valid cached content for '" + environment.getURI() + "'."); - // get all transformers which are not cacheable - int transformerSize = this.transformers.size(); - while (this.firstNotCacheableTransformerIndex < transformerSize) { - this.notCacheableTransformers.add(this.transformers.get(this.firstNotCacheableTransformerIndex)); - this.firstNotCacheableTransformerIndex++; - } - - XMLDeserializer deserializer = null; - try { - deserializer = (XMLDeserializer)this.manager.lookup(XMLDeserializer.ROLE); - // connect the pipeline: - this.producer = deserializer; - this.connectPipeline(environment, - notCacheableTransformers, - null); - // execute the pipeline: - deserializer.deserialize(cachedObject.getSAXFragment()); - } catch ( ProcessingException e ) { - throw e; - } catch ( Exception e ) { - throw new ProcessingException( - "Failed to execute pipeline.", - e - ); - } finally { - this.manager.release(deserializer); - } + byte[] data = os.toByteArray(); + environment.setContentLength(data.length); + environment.getOutputStream().write(data); + } else { + // set the output stream + this.serializer.setOutputStream(environment.getOutputStream()); + // execute the pipeline: + if ( this.xmlDeserializer != null ) { + this.xmlDeserializer.deserialize(this.cachedResponse.getResponse()); } else { - getLogger().debug("Cached content is invalid for '" + environment.getURI() + "'."); - // remove invalid cached object - this.eventCache.remove(this.pipelineCacheKey); - cachedObject = null; + this.generator.generate(); } } - if (cachedObject == null) { - getLogger().debug("Caching content for further requests of '" + environment.getURI() + "'."); - xmlSerializer = (XMLSerializer)this.manager.lookup(XMLSerializer.ROLE); - } - } - - if (this.producer == null) { - // the content was not cached/or is invalid - this.producer = this.generator; - this.connectPipeline(environment, - this.transformers, - xmlSerializer); - // execute the pipeline: - this.generator.generate(); - // did we have cacheable components? - if (xmlSerializer != null) { - this.eventCache.store(this.pipelineCacheKey, - new CachedEventObject(this.validityObjects, - xmlSerializer.getSAXFragment())); + if (this.xmlSerializer != null) { + CachedResponse response = new CachedResponse(this.validityObjects, + (byte[])this.xmlSerializer.getSAXFragment()); + this.cache.store(environment.getObjectModel(), + this.pipelineCacheKey, + response); + } + } catch ( SocketException se ) { + if (se.getMessage().indexOf("reset") > 0 + || se.getMessage().indexOf("aborted") > 0) { + throw new ConnectionResetException("Connection reset by peer", se); + } else { + throw new ProcessingException("Failed to execute reader pipeline.", se); } + } catch ( ProcessingException e ) { + throw e; + } catch ( Exception e ) { + throw new ProcessingException("Failed to execute pipeline.", e); } - } finally { - this.manager.release(xmlSerializer); + return true; } return true; } - */ /** * Setup the evenet pipeline. @@ -263,6 +256,7 @@ super.setupPipeline( environment ); this.firstNotCacheableTransformerIndex = 0; + this.completeResponseIsCached = false; // first step is to generate the key: // All pipeline components starting with the generator @@ -329,7 +323,7 @@ .append(this.serializerRole) .append('-') .append(key); - // FIXME - WE ARE CACHEABLE + this.completeResponseIsCached = true; } } } @@ -387,7 +381,10 @@ // FIXME if ( responseIsValid ) { // we are valid, ok that's it + this.cachedResponse = response; + this.validityObjects = validities; } else { + this.cachedResponse = null; // we are not valid! this.cache.remove(this.pipelineCacheKey.toString()); if (!responseIsUsable) { @@ -477,82 +474,74 @@ }*/ } - /** Connect the pipeline. - private void connectPipeline(Environment environment, - ArrayList usedTransformers, - XMLSerializer xmlSerializer) + /** + * Connect the pipeline. + */ + protected void connectPipeline(Environment environment) throws ProcessingException { - XMLProducer prev = this.producer; - XMLConsumer next; - - boolean configuredSAXConnector = this.manager.hasComponent(SAXConnector.ROLE); - - try { - int cacheableTransformerCount = this.firstNotCacheableTransformerIndex; - - Iterator itt = usedTransformers.iterator(); - while ( itt.hasNext() ) { - if (configuredSAXConnector) { - // connect SAXConnector - SAXConnector connect = (SAXConnector) this.manager.lookup(SAXConnector.ROLE); - connect.setup(environment,environment.getObjectModel(),null,null); - this.connectors.add(connect); - next = connect; - prev.setConsumer(next); - prev = connect; - } - - // Connect next component. - next = (XMLConsumer) itt.next(); - if (xmlSerializer != null) { - if (cacheableTransformerCount == 0) { - next = new XMLTeePipe(next, xmlSerializer); - xmlSerializer = null; - } else { - cacheableTransformerCount--; + if ( this.pipelineCacheKey == null ) { + super.connectPipeline( environment ); + } else if (this.completeResponseIsCached) { + // do nothing + return; + } else { + try { + this.xmlSerializer = (XMLSerializer)this.manager.lookup( XMLSerializer.ROLE ); + XMLSerializer localXMLSerializer = this.xmlSerializer; + if ( this.cachedResponse == null ) { + XMLProducer prev = super.generator; + XMLConsumer next; + + int cacheableTransformerCount = this.firstNotCacheableTransformerIndex; + + Iterator itt = this.transformers.iterator(); + while ( itt.hasNext() ) { + next = (XMLConsumer) itt.next(); + if (localXMLSerializer != null) { + if (cacheableTransformerCount == 0) { + next = new XMLTeePipe(next, localXMLSerializer); + localXMLSerializer = null; + } else { + cacheableTransformerCount--; + } + } + this.connect(environment, prev, next); + prev = (XMLProducer) next; } + next = super.lastConsumer; + if (localXMLSerializer != null) { + next = new XMLTeePipe(next, localXMLSerializer); + localXMLSerializer = null; + } + this.connect(environment, prev, next); + } else { + this.xmlDeserializer = (XMLDeserializer)this.manager.lookup(XMLDeserializer.ROLE); + // connect the pipeline: + XMLProducer prev = xmlDeserializer; + XMLConsumer next; + int cacheableTransformerCount = 0; + Iterator itt = this.transformers.iterator(); + while ( itt.hasNext() ) { + next = (XMLConsumer) itt.next(); + if (cacheableTransformerCount >= this.firstNotCacheableTransformerIndex) { + this.connect(environment, prev, next); + prev = (XMLProducer)next; + } + } + next = super.lastConsumer; + if (localXMLSerializer != null) { + next = new XMLTeePipe(next, localXMLSerializer); + localXMLSerializer = null; + } + this.connect(environment, prev, next); } - prev.setConsumer(next); - prev = (XMLProducer) next; - } - if (configuredSAXConnector) { - // insert SAXConnector - SAXConnector connect = (SAXConnector) this.manager.lookup(SAXConnector.ROLE); - connect.setup(environment,environment.getObjectModel(),null,null); - this.connectors.add(connect); - next = connect; - prev.setConsumer(next); - prev = connect; - } - - // insert this consumer - next = super.xmlConsumer; - if (xmlSerializer != null) { - next = new XMLTeePipe(next, xmlSerializer); - xmlSerializer = null; - } - prev.setConsumer(next); - - } catch ( IOException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); - } catch ( SAXException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); - } catch ( ComponentException e ) { - throw new ProcessingException( - "Could not connect pipeline.", - e - ); + } catch ( ComponentException e ) { + throw new ProcessingException("Could not connect pipeline.", e); + } } - } - */ + /** Process the pipeline using a reader. * @throws ProcessingException if an error occurs @@ -561,7 +550,7 @@ throws ProcessingException { try { boolean usedCache = false; - OutputStream outputStream = environment.getOutputStream();; + OutputStream outputStream = environment.getOutputStream(); SourceValidity readerValidity = null; StringBuffer pcKey = null; @@ -670,182 +659,37 @@ || se.getMessage().indexOf("aborted") > 0) { throw new ConnectionResetException("Connection reset by peer", se); } else { - getLogger().debug("SocketException in ProcessReader", se); - - throw new ProcessingException( - "Failed to execute pipeline.", - se - ); + throw new ProcessingException("Failed to execute pipeline.", se); } } catch ( ProcessingException e ) { throw e; } catch ( Exception e ) { - getLogger().debug("Exception in ProcessReader", e); - - throw new ProcessingException( - "Failed to execute pipeline.", - e - ); + throw new ProcessingException("Failed to execute pipeline.", e); } return true; } - protected boolean processXMLPipeline(Environment environment) - throws ProcessingException { - return super.processXMLPipeline( environment ); - } - /** - * Process the request. - public boolean process(Environment environment) - throws ProcessingException { - if ( super.reader != null ) { - return super.process(environment); - } else { - if ( !this.checkPipeline() ) { - throw new ProcessingException("Attempted to process incomplete pipeline."); - } - - try { - - boolean usedCache = false; - OutputStream outputStream; - PipelineCacheKey pcKey = null; - Map validityObjects = null; - - outputStream = environment.getOutputStream(); - - this.setupPipeline(environment); - this.connectPipeline(); - - // test if serializer and event pipeline are cacheable - long serializerKey = 0; - PipelineCacheKey eventPipelineKey = null; - CacheValidity serializerValidity = null; - Map eventPipelineValidity = null; - if (this.eventPipeline instanceof CacheableEventPipeline) { - if (this.serializer instanceof Cacheable - && (serializerKey = ((Cacheable)this.serializer).generateKey()) != 0 - && (serializerValidity = ((Cacheable)this.serializer).generateValidity()) != null - && (eventPipelineKey = ((CacheableEventPipeline)this.eventPipeline).generateKey(environment)) != null - && (eventPipelineValidity = ((CacheableEventPipeline)this.eventPipeline).generateValidity(environment)) != null) { - - // tell the event pipeline that it must not cache - ((CacheableEventPipeline)this.eventPipeline).setStreamPipelineCaches(true); - - // response is cacheable, build the key - validityObjects = eventPipelineValidity; - ComponentCacheKey ccKey; - pcKey = new PipelineCacheKey(); - ccKey = new ComponentCacheKey(ComponentCacheKey.ComponentType_Serializer, - this.serializerRole, - serializerKey); - validityObjects.put(ccKey, serializerValidity); - pcKey.addKey(ccKey); - pcKey.addKey(eventPipelineKey); - - // now we have the key to get the cached object - CachedStreamObject cachedObject = (CachedStreamObject)this.streamCache.get(pcKey); - - if (cachedObject != null) { - getLogger().debug("Found cached response for '" + environment.getURI() + "'."); - - Iterator validityIterator = validityObjects.keySet().iterator(); - ComponentCacheKey validityKey; - boolean valid = true; - while (validityIterator.hasNext() && valid) { - validityKey = (ComponentCacheKey)validityIterator.next(); - valid = cachedObject.isValid(validityKey, (CacheValidity)validityObjects.get(validityKey)); - if (getLogger().isDebugEnabled()) { - CacheValidity cachedValidity = cachedObject.getCacheValidity(validityKey); - getLogger().debug("Compared cached validity '" + cachedValidity + - "' with new validity '" + validityObjects.get(validityKey) + - "' : " + (valid ? "valid" : "changed")); - } - } - if (valid) { - getLogger().debug("Using valid cached content for '" + environment.getURI() + "'."); - byte[] bytes = cachedObject.getResponse(); - if(bytes.length > 0) { - usedCache = true; - environment.setContentLength(bytes.length); - outputStream.write(bytes); - } - } - - if (!usedCache) { - getLogger().debug("Cached content is invalid for '" + environment.getURI() + "'."); - - // remove invalid cached object - this.streamCache.remove(pcKey); - cachedObject = null; - } - } - if (cachedObject == null) { - getLogger().debug("Caching content for further requests of '" + environment.getURI() + "'."); - outputStream = new CachingOutputStream(outputStream); - } - } else { - ((CacheableEventPipeline)this.eventPipeline).setStreamPipelineCaches(false); - } - } - - if (!usedCache) { - if (this.serializer.shouldSetContentLength()) { - // set the output stream - ByteArrayOutputStream os = new ByteArrayOutputStream(); - this.serializer.setOutputStream(os); - - // execute the pipeline: - this.eventPipeline.process(environment); - byte[] data = os.toByteArray(); - environment.setContentLength(data.length); - outputStream.write(data); - } else { - // set the output stream - this.serializer.setOutputStream(outputStream); - - // execute the pipeline: - this.eventPipeline.process(environment); - } - - // store the response - if (pcKey != null) { - byte[] bytes = ((CachingOutputStream)outputStream).getContent(); - this.streamCache.store(pcKey, - new CachedStreamObject(validityObjects, bytes)); - } - } - - } catch ( ProcessingException e ) { - throw e; - } catch ( Exception e ) { - getLogger().debug("Exception in process", e); - throw new ProcessingException( - "Failed to execute pipeline.", - e - ); - } - - return true; - } - } - */ - /** * Recyclable Interface */ public void recycle() { super.recycle(); + this.manager.release( this.xmlDeserializer ); + this.xmlDeserializer = null; + + this.manager.release( this.xmlSerializer ); + this.xmlSerializer = null; + this.generatorRole = null; this.transformerRoles.clear(); this.serializerRole = null; this.readerRole = null; - this.notCacheableTransformers.clear(); - this.validityObjects = null; this.pipelineCacheKey = null; + this.cachedResponse = null; + this.validityObjects = null; } /**
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]