cziegeler    2003/08/20 01:34:16

  Modified:    src/java/org/apache/cocoon/components/pipeline/impl
                        AbstractCachingProcessingPipeline.java
  Log:
  Don't throw an exception if the cached content is not correct. Just don't use it
  
  Revision  Changes    Path
  1.13      +48 -39    
cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java
  
  Index: AbstractCachingProcessingPipeline.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- AbstractCachingProcessingPipeline.java    11 Aug 2003 07:33:08 -0000      1.12
  +++ AbstractCachingProcessingPipeline.java    20 Aug 2003 08:34:16 -0000      1.13
  @@ -719,50 +719,59 @@
                       }
                       SourceValidity[] validities = cachedObject.getValidityObjects();
                       if (validities == null || validities.length != 1) {
  -                        throw new ProcessingException("Cached response is not 
correct.");
  -                    }
  -                    SourceValidity cachedValidity = validities[0];
  -                    int result = cachedValidity.isValid();
  -                    boolean valid = false;
  -                    if ( result == 0 ) {
  -                        // get reader validity and compare
  -                        if (isCacheableProcessingComponent) {
  -                            readerValidity = 
((CacheableProcessingComponent)super.reader).getValidity();
  -                        } else {
  -                            CacheValidity cv = 
((Cacheable)super.reader).generateValidity();
  -                            if ( cv != null ) {
  -                                readerValidity = 
CacheValidityToSourceValidity.createValidity( cv );
  -                            }
  +                        // to avoid getting here again and again, we delete it
  +                        this.cache.remove( pcKey );
  +                        if (this.getLogger().isDebugEnabled()) {
  +                            this.getLogger().debug(
  +                                "Cached response for '" + environment.getURI() +
  +                                "' using key: " + pcKey + " is invalid."
  +                            );
                           }
  -                        if (readerValidity != null) {
  -                            result = cachedValidity.isValid(readerValidity);
  -                            if ( result == 0 ) {
  -                                readerValidity = null;
  +                        cachedResponse = null;
  +                    } else {
  +                        SourceValidity cachedValidity = validities[0];
  +                        int result = cachedValidity.isValid();
  +                        boolean valid = false;
  +                        if ( result == 0 ) {
  +                            // get reader validity and compare
  +                            if (isCacheableProcessingComponent) {
  +                                readerValidity = 
((CacheableProcessingComponent)super.reader).getValidity();
                               } else {
  -                                valid = (result == 1);
  +                                CacheValidity cv = 
((Cacheable)super.reader).generateValidity();
  +                                if ( cv != null ) {
  +                                    readerValidity = 
CacheValidityToSourceValidity.createValidity( cv );
  +                                }
                               }
  +                            if (readerValidity != null) {
  +                                result = cachedValidity.isValid(readerValidity);
  +                                if ( result == 0 ) {
  +                                    readerValidity = null;
  +                                } else {
  +                                    valid = (result == 1);
  +                                }
  +                            }
  +                        } else {
  +                            valid = (result > 0);
                           }
  -                    } else {
  -                        valid = (result > 0);
  -                    }
   
  -                    if (valid) {
  -                        if (this.getLogger().isDebugEnabled()) {
  -                            this.getLogger().debug("processReader: using valid 
cached content for '" + environment.getURI() + "'.");
  -                        }
  -                        byte[] response = cachedObject.getResponse();
  -                        if (response.length > 0) {
  -                            usedCache = true;
  -                            outputStream = environment.getOutputStream(0);
  -                            environment.setContentLength(response.length);
  -                            outputStream.write(response);
  -                        }
  -                    } else {
  -                        if (this.getLogger().isDebugEnabled()) {
  -                            this.getLogger().debug("processReader: cached content 
is invalid for '" + environment.getURI() + "'.");
  +                        if (valid) {
  +                            if (this.getLogger().isDebugEnabled()) {
  +                                this.getLogger().debug("processReader: using valid 
cached content for '" + environment.getURI() + "'.");
  +                            }
  +                            byte[] response = cachedObject.getResponse();
  +                            if (response.length > 0) {
  +                                usedCache = true;
  +                                outputStream = environment.getOutputStream(0);
  +                                environment.setContentLength(response.length);
  +                                outputStream.write(response);
  +                            }
  +                        } else {
  +                            if (this.getLogger().isDebugEnabled()) {
  +                                this.getLogger().debug("processReader: cached 
content is invalid for '" + environment.getURI() + "'.");
  +                            }
  +                            // remove invalid cached object
  +                            this.cache.remove(pcKey);
                           }
  -                        // remove invalid cached object
  -                        this.cache.remove(pcKey);
                       }
                   }
               }
  
  
  

Reply via email to