Package org.apache.cocoon.caching

Examples of org.apache.cocoon.caching.CachedResponse


                //
                // Now that we have processed the pipeline,
                // we do the actual caching
                //
                if (this.cacheValidity != null) {
                    cachedResponse = new CachedResponse(this.cacheValidity,
                                                        cachedData);
                    cachedResponse.setContentType(environment.getContentType());
                    this.cache.store(this.cacheKey, cachedResponse);
                }
            }
View Full Code Here


    protected CachedResponse cacheResults(Environment environment, OutputStream osthrows Exception {
        if (this.toCacheKey != null) {
            // See if there is an expires object for this resource.
            Long expiresObj = (Long) environment.getObjectModel().get(ObjectModelHelper.EXPIRES_OBJECT);

            CachedResponse response;
            if (this.cacheCompleteResponse) {
                response = new CachedResponse(this.toCacheSourceValidities,
                                              ((CachingOutputStream) os).getContent(),
                                              expiresObj);
                response.setContentType(environment.getContentType());
            } else {
                response = new CachedResponse(this.toCacheSourceValidities,
                                              (byte[]) this.xmlSerializer.getSAXFragment(),
                                              expiresObj);
            }

            this.cache.store(this.toCacheKey, response);
View Full Code Here

               
                    SourceUtil.toSAX(source, serializer);
               
                    SourceValidity[] validities = new SourceValidity[1];
                    validities[0] = new ExpiresValidity(((Long)object[2]).longValue() * 1000); // milliseconds!
                    CachedResponse response = new CachedResponse(validities,
                                                                 (byte[])serializer.getSAXFragment());
                    ((IncludeCacheStorageProxy)object[0]).put(uri, response);
                    
                } catch (Exception ignore) {
                    // all exceptions are ignored!
View Full Code Here

     * If it is not available <code>null</code> is returned.
     * @param key         the key used by the caching algorithm to identify the
     *                    request
     */
    public CachedResponse get(Serializable key) {
        final CachedResponse r = (CachedResponse) this.store.get(key);
        if (getLogger().isInfoEnabled()) {
            getLogger().info("Cache " + (r == null ? "MISS" : "HIT") + " for " + key);
        }
        return r;
    }
View Full Code Here

            if (this.cacheCompleteResponse) {
                if (this.getLogger().isDebugEnabled()) {
                    this.getLogger().debug("Cached: caching complete response; pSisze"
                                           + this.toCacheKey.size() + " Key " + this.toCacheKey);
                }
                CachedResponse response = new CachedResponse(this.toCacheSourceValidities,
                                          ((CachingOutputStream)os).getContent());
                response.setContentType(environment.getContentType());
                this.cache.store(this.toCacheKey.copy(), response);
                //
                // Scan back along the pipelineCacheKey for
                // for any cachepoint(s)
                //
                this.toCacheKey.removeUntilCachePoint();

                //
                // adjust the validities object
                // to reflect the new length of the pipeline cache key.
                //
                // REVISIT: Is it enough to simply reduce the length of the validities array?
                //
                if (this.toCacheKey.size() > 0) {
                    SourceValidity[] copy = new SourceValidity[this.toCacheKey.size()];
                    System.arraycopy(this.toCacheSourceValidities, 0, copy, 0, copy.length);
                    this.toCacheSourceValidities = copy;
                }
            }

            if (this.toCacheKey.size() > 0) {
                ListIterator itt = this.xmlSerializerArray.listIterator(this.xmlSerializerArray.size());
                while (itt.hasPrevious()) {
                    XMLSerializer serializer = (XMLSerializer) itt.previous();
                    CachedResponse response = new CachedResponse(this.toCacheSourceValidities,
                                              (byte[])serializer.getSAXFragment());
                    this.cache.store(this.toCacheKey.copy(), response);

                    if (this.getLogger().isDebugEnabled()) {
                        this.getLogger().debug("Caching results for the following key: "
View Full Code Here

                //
                // Now that we have processed the pipeline,
                // we do the actual caching
                //
                if (this.cacheValidity != null) {
                    cachedResponse = new CachedResponse(this.cacheValidity,
                                                        cachedData);
                    cachedResponse.setContentType(environment.getContentType());
                    this.cache.store(this.cacheKey, cachedResponse);
                }
            }
View Full Code Here

                //
                // Now that we have processed the pipeline,
                // we do the actual caching
                //
                if (this.cacheValidity != null) {
                    cachedResponse = new CachedResponse(this.cacheValidity,
                                                        cachedData);
                    cachedResponse.setContentType(environment.getContentType());
                    this.cache.store(this.cacheKey, cachedResponse);
                }
            }
View Full Code Here

        boolean finished = false;
        while (this.fromCacheKey != null && !finished) {
            finished = true;

            final CachedResponse response = this.cache.get(this.fromCacheKey);

            // now test validity
            if (response != null) {
                if (getLogger().isDebugEnabled()) {
                    getLogger().debug("Found cached response for '" + environment.getURI() +
                                      "' using key: " + this.fromCacheKey);
                }

                boolean responseIsValid = true;
                boolean responseIsUsable = true;

                // See if we have an explicit "expires" setting. If so,
                // and if it's still fresh, we're done.
                Long responseExpires = response.getExpires();

                if (responseExpires != null) {
                    if (getLogger().isDebugEnabled()) {
                       getLogger().debug("Expires time found for " + environment.getURI());
                    }

                    if (responseExpires.longValue() > System.currentTimeMillis()) {
                        if (getLogger().isDebugEnabled()) {
                            getLogger().debug("Expires time still fresh for " + environment.getURI() +
                                              ", ignoring all other cache settings. This entry expires on "+
                                              new Date(responseExpires.longValue()));
                        }
                        this.cachedResponse = response;
                        return;
                    } else {
                        if (getLogger().isDebugEnabled()) {
                            getLogger().debug("Expires time has expired for " + environment.getURI() +
                                              ", regenerating content.");
                        }

                        // If an expires parameter was provided, use it. If this parameter is not available
                        // it means that the sitemap was modified, and the old expires value is not valid
                        // anymore.
                        if (expires != 0) {
                            if (this.getLogger().isDebugEnabled())
                                this.getLogger().debug("Refreshing expires informations");
                            response.setExpires(new Long(expires + System.currentTimeMillis()));
                        } else {
                            if (this.getLogger().isDebugEnabled())
                                this.getLogger().debug("No expires defined anymore for this object, setting it to no expires");
                            response.setExpires(null);
                        }
                    }
                } else {
                    // The response had no expires informations. See if it needs to be set (i.e. because the configuration has changed)
                    if (expires != 0) {
                        if (this.getLogger().isDebugEnabled())
                            this.getLogger().debug("Setting a new expires object for this resource");
                        response.setExpires(new Long(expires + System.currentTimeMillis()));
                    }
                }

                SourceValidity[] fromCacheValidityObjects = response.getValidityObjects();

                int i = 0;
                while (responseIsValid && i < fromCacheValidityObjects.length) {
                    boolean isValid = false;
View Full Code Here

                            );

                while(!finished) {
                  finished = true;
                  // now we have the key to get the cached object
                  CachedResponse cachedObject = this.cache.get(pcKey);
                  if (cachedObject != null) {
                      if (getLogger().isDebugEnabled()) {
                          getLogger().debug("Found cached response for '" +
                                            environment.getURI() + "' using key: " + pcKey);
                      }
 
                      SourceValidity[] validities = cachedObject.getValidityObjects();
                      if (validities == null || validities.length != 1) {
                          // to avoid getting here again and again, we delete it
                          this.cache.remove(pcKey);
                          if (getLogger().isDebugEnabled()) {
                              getLogger().debug("Cached response for '" + environment.getURI() +
                                                "' using key: " + pcKey + " is invalid.");
                          }
                          this.cachedResponse = null;
                      } else {
                          SourceValidity cachedValidity = validities[0];
                          boolean isValid = false;
                          int valid = cachedValidity.isValid();
                          if (valid == SourceValidity.UNKNOWN) {
                              // 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);
                                  }
                              }
                              if (readerValidity != null) {
                                  valid = cachedValidity.isValid(readerValidity);
                                  if (valid == SourceValidity.UNKNOWN) {
                                      readerValidity = null;
                                  } else {
                                      isValid = (valid == SourceValidity.VALID);
                                  }
                              }
                          } else {
                              isValid = (valid == SourceValidity.VALID);
                          }
 
                          if (isValid) {
                              if (getLogger().isDebugEnabled()) {
                                  getLogger().debug("processReader: using valid cached content for '" +
                                                    environment.getURI() + "'.");
                              }
                              byte[] response = cachedObject.getResponse();
                              if (response.length > 0) {
                                  usedCache = true;
                                  if (cachedObject.getContentType() != null) {
                                      environment.setContentType(cachedObject.getContentType());
                                  } else {
                                      setMimeTypeForReader(environment);
                                  }
                                  outputStream = environment.getOutputStream(0);
                                  environment.setContentLength(response.length);
                                  outputStream.write(response);
                              }
                          } else {
                              if (getLogger().isDebugEnabled()) {
                                  getLogger().debug("processReader: cached content is invalid for '" +
                                                    environment.getURI() + "'.");
                              }
                              // remove invalid cached object
                              this.cache.remove(pcKey);
                          }
                      }
                  } else {
                    // check if something is being generated right now
                    if(!waitForLock(pcKey)) {
                      finished = false;
                      continue;
                    }
                  }
              }
            }

            if (!usedCache) {
              // make sure lock will be released
              try {
                  if (pcKey != null) {
                      if (getLogger().isDebugEnabled()) {
                          getLogger().debug("processReader: caching content for further requests of '" +
                                            environment.getURI() + "'.");
                      }
                      generateLock(pcKey);
                     
                      if (readerValidity == null) {
                          if (isCacheableProcessingComponent) {
                              readerValidity = ((CacheableProcessingComponent)super.reader).getValidity();
                          } else {
                              CacheValidity cv = ((Cacheable)super.reader).generateValidity();
                              if ( cv != null ) {
                                  readerValidity = CacheValidityToSourceValidity.createValidity( cv );
                              }
                          }
                      }
 
                      if (readerValidity != null) {
                          outputStream = environment.getOutputStream(this.outputBufferSize);
                          outputStream = new CachingOutputStream(outputStream);
                      }
                  }
 
                  setMimeTypeForReader(environment);
                  if (this.reader.shouldSetContentLength()) {
                      ByteArrayOutputStream os = new ByteArrayOutputStream();
                      this.reader.setOutputStream(os);
                      this.reader.generate();
                      environment.setContentLength(os.size());
                      if (outputStream == null) {
                          outputStream = environment.getOutputStream(0);
                      }
                      os.writeTo(outputStream);
                  } else {
                      if (outputStream == null) {
                          outputStream = environment.getOutputStream(this.outputBufferSize);
                      }
                      this.reader.setOutputStream(outputStream);
                      this.reader.generate();
                  }
 
                  // store the response
                  if (pcKey != null && readerValidity != null) {
                      final CachedResponse res = new CachedResponse(new SourceValidity[] {readerValidity},
                              ((CachingOutputStream)outputStream).getContent());
                      res.setContentType(environment.getContentType());
                      this.cache.store(pcKey, res);
                  }
               
              } finally {
                if (pcKey != null) {
View Full Code Here

        Object data = null;
        // If caching is enabed and the cache is still valid, then use the cache
        if (cachingEnabled) {
            if ( cacheGlobal ) {
                final String key = this.getCacheKey(coplet, uri);
                CachedResponse response = this.cache.get(key);
                if (response != null ) {
                    data = response.getResponse();
                }
            } else {
                data = coplet.getTemporaryAttribute(CACHE);
            }
        }
        if (data == null) {
            // if caching is permanently or temporary disabled, flush the cache and invoke coplet
            if ( !cachingEnabled || coplet.getTemporaryAttribute(DO_NOT_CACHE) != null ) {
                coplet.removeTemporaryAttribute(DO_NOT_CACHE);
                if ( cacheGlobal ) {
                    final String key = this.getCacheKey(coplet, uri);
                    this.cache.remove(key);
                } else {
                    coplet.removeTemporaryAttribute(CACHE);
                }
                super.streamContent(coplet, uri, contentHandler);               
            } else {

                XMLByteStreamCompiler bc = new XMLByteStreamCompiler();

                super.streamContent(coplet, uri, bc);
                data = bc.getSAXFragment();
                if (coplet.removeTemporaryAttribute(DO_NOT_CACHE) == null) {
                    if ( cacheGlobal ) {
                        CachedResponse response = new CachedResponse((SourceValidity[])null, (byte[])data);
                        try {
                            final String key = this.getCacheKey(coplet, uri);
                            this.cache.store(key, response);
                        } catch (ProcessingException pe) {
                            // we ignore this
View Full Code Here

TOP

Related Classes of org.apache.cocoon.caching.CachedResponse

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.