Return-Path: Delivered-To: apmail-xml-cocoon-cvs-archive@xml.apache.org Received: (qmail 48262 invoked by uid 500); 15 May 2001 07:51:52 -0000 Mailing-List: contact cocoon-cvs-help@xml.apache.org; run by ezmlm Precedence: bulk Reply-To: cocoon-dev@xml.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list cocoon-cvs@xml.apache.org Received: (qmail 48046 invoked by uid 500); 15 May 2001 07:51:39 -0000 Delivered-To: apmail-xml-cocoon2-cvs@apache.org Date: 15 May 2001 07:51:36 -0000 Message-ID: <20010515075136.47828.qmail@apache.org> From: cziegeler@apache.org To: xml-cocoon2-cvs@apache.org Subject: cvs commit: xml-cocoon2/src/org/apache/cocoon/components/pipeline CacheableEventPipeline.java CachingEventPipeline.java CachingStreamPipeline.java cziegeler 01/05/15 00:51:35 Modified: src/org/apache/cocoon/components/pipeline CacheableEventPipeline.java CachingEventPipeline.java CachingStreamPipeline.java Log: Update caching logic for a later implementation of cacheable content aggregation Revision Changes Path 1.2 +7 -1 xml-cocoon2/src/org/apache/cocoon/components/pipeline/CacheableEventPipeline.java Index: CacheableEventPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/pipeline/CacheableEventPipeline.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CacheableEventPipeline.java 2001/05/09 20:49:46 1.1 +++ CacheableEventPipeline.java 2001/05/15 07:51:23 1.2 @@ -16,7 +16,7 @@ * * * @author Carsten Ziegeler - * @version CVS $Revision: 1.1 $ $Date: 2001/05/09 20:49:46 $ + * @version CVS $Revision: 1.2 $ $Date: 2001/05/15 07:51:23 $ */ public interface CacheableEventPipeline { @@ -42,4 +42,10 @@ * not cacheable. */ Map generateValidity(Environment environment) throws Exception; + + /** + * The stream pipeline (or the content aggregator) calls this + * method to tell the event pipeline if it must not cache the result + */ + void setStreamPipelineCaches(boolean flag); } 1.4 +13 -4 xml-cocoon2/src/org/apache/cocoon/components/pipeline/CachingEventPipeline.java Index: CachingEventPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/pipeline/CachingEventPipeline.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- CachingEventPipeline.java 2001/05/14 09:16:19 1.3 +++ CachingEventPipeline.java 2001/05/15 07:51:26 1.4 @@ -53,7 +53,7 @@ * does not cache! (If it would cache, the response would be cached twice!) * * @author Carsten Ziegeler - * @version CVS $Revision: 1.3 $ $Date: 2001/05/14 09:16:19 $ + * @version CVS $Revision: 1.4 $ $Date: 2001/05/15 07:51:26 $ */ public final class CachingEventPipeline extends AbstractEventPipeline @@ -124,13 +124,22 @@ */ public Map generateValidity(Environment environment) throws Exception { - // if we are cacheable and this method is called - // reset the pipeline cache key to avoid duplicate caching if (this.cacheable == true) { - this.pipelineCacheKey = null; return this.validityObjects; } return null; + } + + /** + * The stream pipeline (or the content aggregator) calls this + * method to tell the event pipeline if it must not cache the result + */ + public void setStreamPipelineCaches(boolean flag) { + // if we are cacheable and this method is called + // reset the pipeline cache key to avoid duplicate caching + if (flag == true) { + this.pipelineCacheKey = null; + } } public boolean process(Environment environment) throws Exception { 1.2 +59 -52 xml-cocoon2/src/org/apache/cocoon/components/pipeline/CachingStreamPipeline.java Index: CachingStreamPipeline.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/pipeline/CachingStreamPipeline.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CachingStreamPipeline.java 2001/05/09 20:49:48 1.1 +++ CachingStreamPipeline.java 2001/05/15 07:51:28 1.2 @@ -46,7 +46,7 @@ * * * @author Carsten Ziegeler - * @version CVS $Revision: 1.1 $ $Date: 2001/05/09 20:49:48 $ + * @version CVS $Revision: 1.2 $ $Date: 2001/05/15 07:51:28 $ */ public class CachingStreamPipeline extends AbstractStreamPipeline { @@ -267,66 +267,72 @@ PipelineCacheKey eventPipelineKey = null; CacheValidity serializerValidity = null; Map eventPipelineValidity = null; - if (this.serializer instanceof Cacheable - && this.eventPipeline instanceof CacheableEventPipeline - && (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) { - - // response is cacheable, build the key - validityObjects = eventPipelineValidity; - ComponentCacheKey ccKey; - pcKey = new PipelineCacheKey(); - ccKey = new ComponentCacheKey(ComponentCacheKey.ComponentType_Serializer, + 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() == true && valid == true) { - validityKey = (ComponentCacheKey)validityIterator.next(); - valid = cachedObject.isValid(validityKey, (CacheValidity)validityObjects.get(validityKey)); - if (getLogger().isDebugEnabled() == true) { - CacheValidity cachedValidity = cachedObject.getCacheValidity(validityKey); - getLogger().debug("Compared cached validity '" + cachedValidity + - "' with new validity '" + validityObjects.get(validityKey) + - "' : " + (valid == true ? "valid" : "changed")); + 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() == true && valid == true) { + validityKey = (ComponentCacheKey)validityIterator.next(); + valid = cachedObject.isValid(validityKey, (CacheValidity)validityObjects.get(validityKey)); + if (getLogger().isDebugEnabled() == true) { + CacheValidity cachedValidity = cachedObject.getCacheValidity(validityKey); + getLogger().debug("Compared cached validity '" + cachedValidity + + "' with new validity '" + validityObjects.get(validityKey) + + "' : " + (valid == true ? "valid" : "changed")); + } } - } - if (valid == true) { + if (valid == true) { - 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); + 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 == false) { + if (usedCache == false) { - getLogger().debug("Cached content is invalid for '" + environment.getURI() + "'."); + getLogger().debug("Cached content is invalid for '" + environment.getURI() + "'."); - // remove invalid cached object - this.streamCache.remove(pcKey); - cachedObject = null; + // 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); + if (cachedObject == null) { + getLogger().debug("Caching content for further requests of '" + environment.getURI() + "'."); + outputStream = new CachingOutputStream(outputStream); + } + } else { + ((CacheableEventPipeline)this.eventPipeline).setStreamPipelineCaches(false); } } @@ -346,6 +352,7 @@ this.streamCache.store(pcKey, new CachedStreamObject(validityObjects, bytes)); } + } } catch ( Exception e ) { ---------------------------------------------------------------------- In case of troubles, e-mail: webmaster@xml.apache.org To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org For additional commands, e-mail: cocoon-cvs-help@xml.apache.org