View Javadoc
1 package org.apache.turbine.services.cache; 2 3 /* ==================================================================== 4 * The Apache Software License, Version 1.1 5 * 6 * Copyright (c) 2001 The Apache Software Foundation. All rights 7 * reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. The end-user documentation included with the redistribution, 22 * if any, must include the following acknowledgment: 23 * "This product includes software developed by the 24 * Apache Software Foundation (http://www.apache.org/)." 25 * Alternately, this acknowledgment may appear in the software itself, 26 * if and wherever such third-party acknowledgments normally appear. 27 * 28 * 4. The names "Apache" and "Apache Software Foundation" and 29 * "Apache Turbine" must not be used to endorse or promote products 30 * derived from this software without prior written permission. For 31 * written permission, please contact apache@apache.org. 32 * 33 * 5. Products derived from this software may not be called "Apache", 34 * "Apache Turbine", nor may "Apache" appear in their name, without 35 * prior written permission of the Apache Software Foundation. 36 * 37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 48 * SUCH DAMAGE. 49 * ==================================================================== 50 * 51 * This software consists of voluntary contributions made by many 52 * individuals on behalf of the Apache Software Foundation. For more 53 * information on the Apache Software Foundation, please see 54 * <http://www.apache.org/>;. 55 */ 56 57 /*** 58 * The idea of the RefreshableCachedObject is that, rather than 59 * removing items from the cache when they become stale, we'll tell them to 60 * refresh themselves instead. That way they'll always be in the 61 * cache, and the code to refresh them will be run by the background 62 * thread rather than by a user request thread. You can also set a TTL (Time 63 * To Live) for the object. This way, if the object hasn't been touched 64 * for the TTL period, then it will be removed from the cache. 65 * 66 * This extends CachedObject and provides a method for refreshing the 67 * cached object, and resetting its expire time. 68 * 69 * @author <a href="mailto:nissim@nksystems.com">Nissim Karpenstein</a> 70 * @version $Id: RefreshableCachedObject.java,v 1.2 2002/01/30 16:11:21 dlr Exp $ 71 */ 72 public class RefreshableCachedObject 73 extends CachedObject 74 { 75 76 /*** 77 * How long to wait before removing an untouched object from the cache. 78 * Negative numbers mean never remove (the default). 79 */ 80 private long timeToLive = -1; 81 82 /*** 83 * The last time the Object was accessed from the cache. 84 */ 85 private long lastAccess; 86 87 /*** 88 * Constructor; sets the object to expire in the default time (30 89 * minutes). 90 * 91 * @param o The object you want to cache. 92 */ 93 public RefreshableCachedObject(Refreshable o) 94 { 95 super(o); 96 lastAccess = System.currentTimeMillis(); 97 } 98 99 /*** 100 * Constructor. 101 * 102 * @param o The object to cache. 103 * @param expires How long before the object expires, in ms, 104 * e.g. 1000 = 1 second. 105 */ 106 public RefreshableCachedObject(Refreshable o, 107 long expires) 108 { 109 super(o, expires); 110 lastAccess = System.currentTimeMillis(); 111 } 112 113 /*** sets the timeToLive member (in milliseconds) */ 114 public synchronized void setTTL(long l) { timeToLive = l; } 115 116 /*** gets the timeToLive member (in milliseconds) */ 117 public synchronized long getTTL() { return timeToLive; } 118 119 /*** 120 * Sets the last acccess time to the current time. 121 */ 122 public synchronized void touch() 123 { 124 lastAccess = System.currentTimeMillis(); 125 } 126 127 /*** 128 * Returns true if the object hasn't been touched 129 * in the previous TTL period. 130 */ 131 public synchronized boolean isUntouched() 132 { 133 if (timeToLive < 0) 134 return false; 135 136 if (lastAccess + timeToLive < System.currentTimeMillis()) 137 return true; 138 else 139 return false; 140 } 141 142 /*** 143 * Refresh the object and the created time. 144 */ 145 public void refresh() 146 { 147 Refreshable r = (Refreshable)getContents(); 148 synchronized (this) 149 { 150 created = System.currentTimeMillis(); 151 r.refresh(); 152 } 153 } 154 }

This page was automatically generated by Maven