cache.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 220 行

JAVA
220
字号
/* * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement: *       "This product includes software developed by the *        Caucho Technology (http://www.caucho.com/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "Hessian", "Resin", and "Caucho" must not be used to *    endorse or promote products derived from this software without prior *    written permission. For written permission, please contact *    info@caucho.com. * * 5. Products derived from this software may not be called "Resin" *    nor may "Resin" appear in their names without prior written *    permission of Caucho Technology. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL CAUCHO TECHNOLOGY OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * @author Sam */package com.caucho.portal.generic;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import java.io.IOException;import java.io.OutputStream;import java.io.Writer;import java.util.Map;import java.util.logging.Logger;abstract public class Cache{  protected static final Logger log =     Logger.getLogger(Cache.class.getName());  /**   * Send a response from the cache, or return false if there is no   * response from the cache.   *    * The passed cacheKey can be manipulated by the cache without side-effects,   * but the cache cannot take ownership of the cacheKey because it may be    * pooled by the caller.   *   * Binary responses should be sent to the OutputStream obtained with   * response.getOutputStream().   *     * Textual response should be sent to the PrintWriter obtained with   * response.getWriter().   * response.setCharacterEncoding() should be used before getWriter()   * to set the character encoding to the character encoding that was in   * use when the response was cached.   *   * If isPrivate is true, then cacheKey.getRequestedSessionId() will have a   * non-null value.    *   * A cache should first perform a lookup with the CacheKey as provided.   * If that fails, it should call cacheKey.setLocale(null) and try again.   *    * The cache should also check the value of cacheKey.getContentType().   * If the contentType is null, the cache can respond if it has an entry   * that matches for one contentType.  If a match is found, the cache   * sets the contentType with connection.setContentType().   *   * @return 0 if no response was written from the cache, otherwise the number    * of seconds that a response written from the cache is good for or -1   * if the cached reponse is good forever   */  abstract public int respondFromCache(CacheKey cacheKey,                                       RenderRequest request,                                       RenderResponse response);  /**   * Called to give the Cache an opportunity to cache the response.   *   * If the response can be cached, the implementation returns a Writer   * that receives the response.   *    * When the response is completed, finishCaching(Writer) will be called.   *   * If the response cannot be cached, the implementation returns null.   *   * At this point, the expirationCache is a best guess and the real value   * passed to finishCaching() may be different.   *   * @param  window the portlet configuration for the portlet about to   * be rendered   *   * @param namespace the namespace for the portlet about to be rendered   *   * @param expirationCache a best guess at the expiration period in seconds,    * -1 if unlimited   *   * @return a Writer that intercepts the content and then writes to   * response.getWriter(), or null if the response cannot be cached.    */  abstract public Writer getCachingWriter(String namespace,                                          int expirationCache,                                          boolean isPrivate)    throws IOException;  /**   * Called immediately before a Portlet is rendered to give the Cache   * an opportunity to cache the response.   *   * If the response can be cached, the implementation returns an OutputStream   * that receives the response.   *    * When the response is completed, finishCaching(OutputStream) will be called.   *   * If the response cannot be cached, the implementation returns null.   *   * At this point, the expirationCache is a best guess and the real value   * passed to finishCaching() may be different.   *   * @param  window the portlet window for the portlet about to   * be rendered   *   * @param namespace the namespace for the portlet about to be rendered   *   * @param expirationCache a best guess at the expiration period in seconds,    * -1 if unlimited   *   * @return an OutputStream that intercepts the content and then writes to   * response.getOutputStream(), or null if the response cannot be cached.    */  abstract public OutputStream getCachingOutputStream(String namespace,                                                      int expirationCache,                                                      boolean isPrivate)    throws IOException;  /**   * Finish with a Writer previously returned by    * {@link #startCachingWriter}. If the expirationCache is 0 or the cacheKey is   * null, the cached response must be discarded.   *   * @param writer the writer returned from {@link #startCachingWriter}   *   * @param expirationCache the updated expirationCache, this may the same   * value received in {@link  #startWriter}, a new value set by   * the portlet while it rendered itself, or 0 if the cache must be   * discarded.   *   * @param cacheKey the {@link CacheKey} that uniquely differentiates this    * response from other responses   *   * @param encoding the encoding for the Writer, the cache needs to call   * response.setEncoding(encoding) if it later responds in respondFromCache().   *   * @param cachePropertiesMap a map of properties that begin with "Cache-",   * these may be directives to the cache or may be keys and values that should   * distinguish the uniqueness of the Cached value beyond the uniqueness   * established by CacheKey, depending on the portal implementation.    * These properties should be recreated during respondFromCache().   * If the value is a String, setProperty is used.  If the value is   * an ArrayList<String>, add property is used.    *   * @param propertiesMap a map of properties that the Cache must recreate   * when the cached response is used in a susbsequent call to respondFromCache   * If the value is a String, setProperty is used.  If the value is   * an ArrayList<String>, add property is used.    *   * @param requestAttributesMap a map of request attributes that the Cache   * must recreate when the cached response is used in a susbsequent call to   * respondFromCache   */   abstract public void finishCaching(       Writer writer,       int expirationCache,      CacheKey cacheKey,      String encoding,      Map<String, Object> cachePropertiesMap,      Map<String, Object> propertiesMap,      Map<String, String> requestAttributeMap );  /**   * Finish with an OutputStream previously returned by    * {@link #startCachingOutputStream}. If the cacheKey is null or   * the expirationCache is 0, the cached response must be discarded.   */   abstract public void finishCaching(      OutputStream outputStream,      int expirationCache,      CacheKey cacheKey,      Map<String, Object> cachePropertiesMap,      Map<String, Object> propertiesMap,      Map<String, String> requestAttributeMap );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?