cziegeler 02/05/28 01:42:12 Modified: src/java/org/apache/cocoon/caching PipelineCacheKey.java src/java/org/apache/cocoon/components/pipeline/impl CachingProcessingPipeline.java Log: Changed key from String to long Revision Changes Path 1.9 +20 -4 xml-cocoon2/src/java/org/apache/cocoon/caching/PipelineCacheKey.java Index: PipelineCacheKey.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/caching/PipelineCacheKey.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- PipelineCacheKey.java 28 May 2002 08:25:00 -0000 1.8 +++ PipelineCacheKey.java 28 May 2002 08:42:12 -0000 1.9 @@ -58,7 +58,7 @@ * or more {@link ComponentCacheKey}s. * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: PipelineCacheKey.java,v 1.8 2002/05/28 08:25:00 cziegeler Exp $ + * @version CVS $Id: PipelineCacheKey.java,v 1.9 2002/05/28 08:42:12 cziegeler Exp $ */ public final class PipelineCacheKey implements java.io.Serializable { @@ -73,17 +73,30 @@ this.keys = new ArrayList(4); } - private StringBuffer value; - private String toStringValue; - + /** + * Add a key + */ public void addKey(ComponentCacheKey key) { this.keys.add(key); } + /** + * Remove the last key + */ public void removeLastKey() { this.keys.remove(this.keys.size()-1); } + /** + * Return the number of keys + */ + public int size() { + return this.keys.size(); + } + + /** + * Compare + */ public boolean equals(Object object) { if (object instanceof PipelineCacheKey) { PipelineCacheKey pck = (PipelineCacheKey)object; @@ -101,6 +114,9 @@ return false; } + /** + * Generate a hash code + */ public int hashCode() { // FIXME (CZ) we need a good one here... return this.keys.hashCode(); 1.15 +59 -9 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.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- CachingProcessingPipeline.java 28 May 2002 08:25:00 -0000 1.14 +++ CachingProcessingPipeline.java 28 May 2002 08:42:12 -0000 1.15 @@ -92,7 +92,7 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: CachingProcessingPipeline.java,v 1.14 2002/05/28 08:25:00 cziegeler Exp $ + * @version CVS $Id: CachingProcessingPipeline.java,v 1.15 2002/05/28 08:42:12 cziegeler Exp $ */ public class CachingProcessingPipeline extends AbstractProcessingPipeline @@ -113,8 +113,6 @@ /** The role name of the reader */ protected String readerRole; - /** The key to store the cached response */ - protected PipelineCacheKey pipelineCacheKey; /** The index indicating to the first transformer which is not cacheable */ protected int firstNotCacheableTransformerIndex; /** The deserializer */ @@ -129,6 +127,12 @@ /** The cached byte stream */ protected byte[] cachedResponse; + /** The key to store the generated response */ + protected PipelineCacheKey pipelineCacheKey; + /** The validity objects of the generated response */ + protected SourceValidity[] pipelineValidityObjects; + + /** * Composable Interface */ @@ -405,18 +409,19 @@ } if ( isValid ) i++; } - // FIXME + if ( responseIsValid ) { // we are valid, ok that's it this.cachedValidityObjects = validities; } else { + // we are not valid! + this.completeResponseIsCached = false; finished = false; this.cachedResponse = null; if (!responseIsUsable) { - // FIXME (CZ) : check this - // we can try a shorter key now... - // but we don't invalidate the current entry! + // we could compare, because we got no + // validity object, so shorten pipeline key if (i > 0) { int deleteCount = validities.length - i; if (i > 0 && i <= firstNotCacheableTransformerIndex + 1) { @@ -430,10 +435,10 @@ processingPipelineKey = null; } } else { - // invalidate entry + // the entry is invalid, remove it this.cache.remove( cachedPipelineKey ); - // FIXME(CZ) let's get the rest of the validities now } + // try a shorter key if (i > 0) { cachedPipelineKey.removeLastKey(); } else { @@ -442,6 +447,50 @@ } } } + + // now generate validity objects for the new response + if (processingPipelineKey != null) { + if (cachedPipelineKey == null || + cachedPipelineKey.size() < processingPipelineKey.size()) { + this.pipelineCacheKey = processingPipelineKey; + this.pipelineValidityObjects = new SourceValidity[processingPipelineKey.size()]; + int start = 0; + if (cachedPipelineKey != null) { + start = cachedPipelineKey.size(); + for(int i=0; i<start;i++) { + this.pipelineValidityObjects[i] = this.cachedValidityObjects[i]; + } + } + for(int i=start; i < this.pipelineValidityObjects.length; i++) { + final SourceValidity validity; + if (i == 0) { + // test generator + if (generatorIsCacheableProcessingComponent) { + validity = ((CacheableProcessingComponent)super.generator).generateValidity(); + } else { + validity = new CacheValidityToSourceValidity(((Cacheable)super.generator).generateValidity()); + } + } else if (i <= firstNotCacheableTransformerIndex + 1) { + // test transformer + final Transformer trans = + (Transformer)super.transformers.get(i-1); + if (transformerIsCacheableProcessingComponent[i-1]) { + validity = ((CacheableProcessingComponent)trans).generateValidity(); + } else { + validity = new CacheValidityToSourceValidity(((Cacheable)trans).generateValidity()); + } + } else { + // test serializer + if (serializerIsCacheableProcessingComponent) { + validity = ((CacheableProcessingComponent)super.serializer).generateValidity(); + } else { + validity = new CacheValidityToSourceValidity(((Cacheable)super.serializer).generateValidity()); + } + } + this.pipelineValidityObjects[i] = validity; + } + } + } } /** @@ -670,6 +719,7 @@ this.readerRole = null; this.pipelineCacheKey = null; + this.pipelineValidityObjects = null; this.cachedResponse = null; this.cachedValidityObjects = null; }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]