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]

Reply via email to