cziegeler 02/05/28 03:51:31 Modified: src/java/org/apache/cocoon/caching ComponentCacheKey.java PipelineCacheKey.java src/java/org/apache/cocoon/components/pipeline/impl CachingProcessingPipeline.java Log: Minor updates Revision Changes Path 1.8 +20 -1 xml-cocoon2/src/java/org/apache/cocoon/caching/ComponentCacheKey.java Index: ComponentCacheKey.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/caching/ComponentCacheKey.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ComponentCacheKey.java 28 May 2002 07:11:43 -0000 1.7 +++ ComponentCacheKey.java 28 May 2002 10:51:31 -0000 1.8 @@ -61,7 +61,7 @@ * is unique inside the components space. * * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: ComponentCacheKey.java,v 1.7 2002/05/28 07:11:43 cziegeler Exp $ + * @version CVS $Id: ComponentCacheKey.java,v 1.8 2002/05/28 10:51:31 cziegeler Exp $ */ public final class ComponentCacheKey implements Serializable { @@ -77,7 +77,12 @@ private String identifier; /** The unique key */ private Serializable key; + /** the hash code */ + private int hashCode = 0; + /** + * Constructor + */ public ComponentCacheKey(int componentType, String componentIdentifier, Serializable cacheKey) { @@ -87,6 +92,9 @@ } + /** + * Compare + */ public boolean equals(Object object) { if (object instanceof ComponentCacheKey) { ComponentCacheKey ccp = (ComponentCacheKey)object; @@ -99,4 +107,15 @@ return false; } + /** + * HashCode + */ + public int hashCode() { + if (this.hashCode == 0) { + this.hashCode = this.type + + (this.identifier.length() << 2) + + (this.key.hashCode() << 6); + } + return this.hashCode; + } } 1.10 +16 -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.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- PipelineCacheKey.java 28 May 2002 08:42:12 -0000 1.9 +++ PipelineCacheKey.java 28 May 2002 10:51:31 -0000 1.10 @@ -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.9 2002/05/28 08:42:12 cziegeler Exp $ + * @version CVS $Id: PipelineCacheKey.java,v 1.10 2002/05/28 10:51:31 cziegeler Exp $ */ public final class PipelineCacheKey implements java.io.Serializable { @@ -66,6 +66,9 @@ /** The keys */ private List keys; + /** the hash code */ + private int hashCode = 0; + /** * Constructor */ @@ -78,6 +81,7 @@ */ public void addKey(ComponentCacheKey key) { this.keys.add(key); + this.hashCode = 0; } /** @@ -85,6 +89,7 @@ */ public void removeLastKey() { this.keys.remove(this.keys.size()-1); + this.hashCode = 0; } /** @@ -102,7 +107,7 @@ PipelineCacheKey pck = (PipelineCacheKey)object; final int len = this.keys.size(); if (pck.keys.size() == len) { - boolean cont = false; + boolean cont = true; int i = 0; while (i < len && cont) { cont = this.keys.get(i).equals(pck.keys.get(i)); @@ -118,10 +123,17 @@ * Generate a hash code */ public int hashCode() { - // FIXME (CZ) we need a good one here... - return this.keys.hashCode(); + if (this.hashCode == 0) { + for(int i=0; i < this.keys.size(); i++) { + this.hashCode = this.keys.get(i).hashCode(); + } + } + return this.hashCode; } + /** + * Clone the object (but not the component keys) + */ public PipelineCacheKey copy() { PipelineCacheKey pck = new PipelineCacheKey(); final int len = this.keys.size(); 1.18 +43 -12 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.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- CachingProcessingPipeline.java 28 May 2002 09:06:33 -0000 1.17 +++ CachingProcessingPipeline.java 28 May 2002 10:51:31 -0000 1.18 @@ -92,7 +92,7 @@ * * @since @next-version@ * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> - * @version CVS $Id: CachingProcessingPipeline.java,v 1.17 2002/05/28 09:06:33 cziegeler Exp $ + * @version CVS $Id: CachingProcessingPipeline.java,v 1.18 2002/05/28 10:51:31 cziegeler Exp $ */ public class CachingProcessingPipeline extends AbstractProcessingPipeline @@ -206,6 +206,10 @@ } } else { + if (this.getLogger().isDebugEnabled()) { + this.getLogger().debug("Caching content for further requests of '" + environment.getURI() + "'."); + System.out.println("Caching content for further requests of '" + environment.getURI() + "'."); + } try { OutputStream os = environment.getOutputStream(); if ( this.completeResponseIsCached ) { @@ -235,20 +239,18 @@ this.generator.generate(); } } - if (this.xmlSerializer != null) { - if ( this.completeResponseIsCached ) { - CachedResponse response = new CachedResponse(this.pipelineValidityObjects, + if ( this.completeResponseIsCached ) { + CachedResponse response = new CachedResponse(this.pipelineValidityObjects, ((CachingOutputStream)os).getContent()); - this.cache.store(environment.getObjectModel(), + this.cache.store(environment.getObjectModel(), this.pipelineCacheKey, response); - } else { - CachedResponse response = new CachedResponse(this.pipelineValidityObjects, + } else { + CachedResponse response = new CachedResponse(this.pipelineValidityObjects, (byte[])this.xmlSerializer.getSAXFragment()); - this.cache.store(environment.getObjectModel(), + this.cache.store(environment.getObjectModel(), this.pipelineCacheKey, response); - } } } catch ( SocketException se ) { if (se.getMessage().indexOf("reset") > 0 @@ -288,6 +290,7 @@ this.firstProcessedTransformerIndex = 0; this.completeResponseIsCached = false; + System.out.println("Generating key."); // first step is to generate the key: // All pipeline components starting with the generator // are tested if they are either a CacheableProcessingComponent @@ -355,6 +358,7 @@ } } + System.out.println("Generated key:"+processingPipelineKey); // now, we have a key representing all cacheable components up to the // first non cacheable if (processingPipelineKey != null) { @@ -369,9 +373,13 @@ // now test validity if (response != null) { - this.cachedResponse = response.getResponse(); boolean responseIsValid = true; boolean responseIsUsable = true; + if (this.getLogger().isDebugEnabled()) { + this.getLogger().debug("Found cached response for '" + environment.getURI() + "'."); + System.out.println("Found cached response for '" + environment.getURI() + "'."); + } + this.cachedResponse = response.getResponse(); SourceValidity[] validities = response.getValidityObjects(); int i = 0; while (responseIsValid && i < validities.length) { @@ -385,7 +393,7 @@ } else { validity = new CacheValidityToSourceValidity(((Cacheable)super.generator).generateValidity()); } - } else if (i <= this.firstProcessedTransformerIndex + 1) { + } else if (i <= this.firstProcessedTransformerIndex) { // test transformer final Transformer trans = (Transformer)super.transformers.get(i-1); @@ -418,7 +426,15 @@ if ( responseIsValid ) { // we are valid, ok that's it cachedValidityObjects = validities; + if (this.getLogger().isDebugEnabled()) { + this.getLogger().debug("Using valid cached content for '" + environment.getURI() + "'."); + System.out.println("Using valid cached content for '" + environment.getURI() + "'."); + } } else { + if (this.getLogger().isDebugEnabled()) { + this.getLogger().debug("Cached content is invalid for '" + environment.getURI() + "'."); + System.out.println("Cached content is invalid for '" + environment.getURI() + "'."); + } // we are not valid! this.completeResponseIsCached = false; finished = false; @@ -451,6 +467,21 @@ cachedPipelineKey = null; } } + } else { + if (this.getLogger().isDebugEnabled()) { + this.getLogger().debug("Cached response not found for '" + environment.getURI() + "'."); + System.out.println("Cached response not found for '" + environment.getURI() + "'."); + } + finished = false; + this.completeResponseIsCached = false; + // try a shorter key + // FIXME (CZ) calculation of PPK + if (cachedPipelineKey.size() > 1) { + cachedPipelineKey.removeLastKey(); + this.firstProcessedTransformerIndex--; + } else { + cachedPipelineKey = null; + } } } @@ -476,7 +507,7 @@ } else { validity = new CacheValidityToSourceValidity(((Cacheable)super.generator).generateValidity()); } - } else if (i <= firstNotCacheableTransformerIndex + 1) { + } else if (i <= firstNotCacheableTransformerIndex) { // test transformer final Transformer trans = (Transformer)super.transformers.get(i-1);
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]