01: /**
02: * Sequoia: Database clustering technology.
03: * Copyright (C) 2002-2004 French National Institute For Research In Computer
04: * Science And Control (INRIA).
05: * Copyright (C) 2005 AmicoSoft, Inc. dba Emic Networks
06: * Contact: sequoia@continuent.org
07: *
08: * Licensed under the Apache License, Version 2.0 (the "License");
09: * you may not use this file except in compliance with the License.
10: * You may obtain a copy of the License at
11: *
12: * http://www.apache.org/licenses/LICENSE-2.0
13: *
14: * Unless required by applicable law or agreed to in writing, software
15: * distributed under the License is distributed on an "AS IS" BASIS,
16: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17: * See the License for the specific language governing permissions and
18: * limitations under the License.
19: *
20: * Initial developer(s): Nicolas Modrzyk
21: * Contributor(s): Emmanuel Cecchet.
22: */package org.continuent.sequoia.controller.cache.result.rules;
23:
24: import org.continuent.sequoia.common.xml.DatabasesXmlTags;
25: import org.continuent.sequoia.controller.backend.result.ControllerResultSet;
26: import org.continuent.sequoia.controller.cache.result.AbstractResultCache;
27: import org.continuent.sequoia.controller.cache.result.CacheBehavior;
28: import org.continuent.sequoia.controller.cache.result.entries.AbstractResultCacheEntry;
29: import org.continuent.sequoia.controller.cache.result.entries.ResultCacheEntryRelaxed;
30: import org.continuent.sequoia.controller.requests.SelectRequest;
31:
32: /**
33: * RelaxedCaching means we set a timeout value for this entry, and when expired
34: * we keep in the cache if no write has modified the corresponding result, we
35: * wait for the same amount of time again. RelaxedCaching may provide stale
36: * data. The timeout defines the maximum staleness of a cache entry. It means
37: * that the cache may return an entry that is out of date. timeout: is a value
38: * in seconds and 0 means no timeout (always in the cache) keepIfNotDirty: if
39: * true the entry is kept in the cache and the timeout is reset, if false, the
40: * entry is removed from the cache after the timeout has expired even if the
41: * entry was not affected by a write.
42: *
43: * @author <a href="mailto:Nicolas.Modrzyk@inrialpes.fr">Nicolas Modrzyk </a>
44: * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a>
45: * @version 1.0
46: */
47: public class RelaxedCaching extends CacheBehavior {
48: private long timeout;
49: private boolean keepIfNotDirty;
50:
51: /**
52: * Create new RelaxedCaching action
53: *
54: * @param timeout before we check the validity of an entry
55: * @param keepIfNotDirty true if non-dirty entries must be kept in the cache
56: */
57: public RelaxedCaching(boolean keepIfNotDirty, long timeout) {
58: this .keepIfNotDirty = keepIfNotDirty;
59: this .timeout = timeout;
60: }
61:
62: /**
63: * @see org.continuent.sequoia.controller.cache.result.CacheBehavior#getCacheEntry(SelectRequest,
64: * ControllerResultSet, AbstractResultCache)
65: */
66: public AbstractResultCacheEntry getCacheEntry(
67: SelectRequest sqlQuery, ControllerResultSet result,
68: AbstractResultCache cache) {
69: return new ResultCacheEntryRelaxed(sqlQuery, result, timeout,
70: keepIfNotDirty);
71: }
72:
73: /**
74: * @see org.continuent.sequoia.common.xml.XmlComponent#getXml()
75: */
76: public String getXml() {
77: return "<" + DatabasesXmlTags.ELT_RelaxedCaching + " "
78: + DatabasesXmlTags.ATT_timeout + "=\"" + timeout / 1000
79: + "\" " + DatabasesXmlTags.ATT_keepIfNotDirty + "=\""
80: + keepIfNotDirty + "\"/>";
81: }
82:
83: }
|