Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/EHCacheService.java.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/EHCacheService.java.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/EHCacheService.java.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1,353 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>EHCacheService.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.source.html" class="el_package">org.apache.fulcrum.cache.impl</a> > <span class="el_source">EHCac heService.java</span></div><h1>EHCacheService.java</h1><pre class="source lang-java linenums">package org.apache.fulcrum.cache.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.activity.Initializable; +import org.apache.avalon.framework.configuration.Configurable; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.thread.ThreadSafe; +import org.apache.fulcrum.cache.CachedObject; +import org.apache.fulcrum.cache.GlobalCacheService; +import org.apache.fulcrum.cache.ObjectExpiredException; +import org.apache.fulcrum.cache.RefreshableCachedObject; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Element; + +/** + * Default implementation of EHCacheService (Ehcache 2) + * + * @author <a href="mailto:[email protected]">Eric Pugh</a> + * @author <a href="mailto:[email protected]">Thomas Vandahl</a> + * + */ +public class EHCacheService extends AbstractLogEnabled implements + GlobalCacheService, Runnable, Configurable, Disposable, Initializable, ThreadSafe +{ + /** + * Cache check frequency in Millis (1000 Millis = 1 second). Value must be &gt; + * 0. Default = 5 seconds + */ + public static final long DEFAULT_CACHE_CHECK_FREQUENCY = 5000; // 5 seconds + + /** + * cacheCheckFrequency (default - 5 seconds) + */ + private long cacheCheckFrequency; + + /** + * Path name of the Ehcache configuration file + */ + private String configFile; + + /** + * Constant value which provides a cache name + */ + private static final String DEFAULT_CACHE_NAME = "fulcrum"; + + /** + * A cache name + */ + private String cacheName; + + /** thread for refreshing stale items in the cache */ + private Thread refreshing; + + /** flag to stop the housekeeping thread when the component is disposed. */ + private boolean continueThread; + + /** The EHCache manager instance */ + private CacheManager cacheManager; + + /** A cache instance */ + private Cache cache; + + public EHCacheService() +<span class="fc" id="L91"> {</span> + +<span class="fc" id="L93"> }</span> + // ---------------- Avalon Lifecycle Methods --------------------- + + /** + * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) + */ + @Override + public void configure(Configuration config) throws ConfigurationException + { +<span class="fc" id="L102"> this.cacheCheckFrequency = config.getChild("cacheCheckFrequency")</span> +<span class="fc" id="L103"> .getValueAsLong(DEFAULT_CACHE_CHECK_FREQUENCY);</span> +<span class="fc" id="L104"> this.cacheName = config.getChild("cacheName").getValue(DEFAULT_CACHE_NAME);</span> +<span class="fc" id="L105"> this.configFile = config.getChild("configurationFile").getValue(null);</span> +<span class="fc" id="L106"> }</span> + + /** + * @see org.apache.avalon.framework.activity.Initializable#initialize() + */ + @Override + public void initialize() throws Exception + { +<span class="pc bpc" id="L114" title="1 of 2 branches missed."> if (this.configFile == null)</span> + { +<span class="fc" id="L116"> this.cacheManager = new CacheManager();</span> +<span class="fc" id="L117"> this.cacheManager.addCache(this.cacheName);</span> + } + else + { +<span class="nc" id="L121"> this.cacheManager = new CacheManager(this.configFile);</span> + } + +<span class="fc" id="L124"> this.cache = this.cacheManager.getCache(this.cacheName);</span> + + // Start housekeeping thread. +<span class="fc" id="L127"> this.continueThread = true;</span> +<span class="fc" id="L128"> this.refreshing = new Thread(this);</span> + + // Indicate that this is a system thread. JVM will quit only when + // there are no more active user threads. Settings threads spawned + // internally by Turbine as daemons allows commandline applications + // using Turbine to terminate in an orderly manner. +<span class="fc" id="L134"> this.refreshing.setDaemon(true);</span> +<span class="fc" id="L135"> this.refreshing.setName("EHCacheService Refreshing");</span> +<span class="fc" id="L136"> this.refreshing.start();</span> + +<span class="fc" id="L138"> getLogger().debug("EHCacheService started!");</span> +<span class="fc" id="L139"> }</span> + + /** + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + @Override + public void dispose() + { +<span class="fc" id="L147"> this.continueThread = false;</span> +<span class="fc" id="L148"> this.refreshing.interrupt();</span> + +<span class="fc" id="L150"> this.cacheManager.shutdown();</span> +<span class="fc" id="L151"> this.cacheManager = null;</span> +<span class="fc" id="L152"> this.cache = null;</span> +<span class="fc" id="L153"> getLogger().debug("EHCacheService stopped!");</span> +<span class="fc" id="L154"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#addObject(java.lang.String, org.apache.fulcrum.cache.CachedObject) + */ + @Override + public <T> void addObject(String objectId, CachedObject<T> object) + { +<span class="fc" id="L162"> Element cacheElement = new Element(objectId, object);</span> + +<span class="pc bpc" id="L164" title="1 of 2 branches missed."> if (object instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L166"> cacheElement.setEternal(true);</span> + } + else + { +<span class="fc" id="L170"> cacheElement.setEternal(false);</span> +<span class="fc" id="L171"> cacheElement.setTimeToLive((int)(object.getExpires() + 500) / 1000);</span> + } + +<span class="fc" id="L174"> this.cache.put(cacheElement);</span> +<span class="fc" id="L175"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#flushCache() + */ + @Override + public void flushCache() + { +<span class="fc" id="L183"> this.cache.removeAll();</span> +<span class="fc" id="L184"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getCachedObjects() + */ + @Override + public List<CachedObject<?>> getCachedObjects() + { +<span class="fc" id="L192"> ArrayList<CachedObject<?>> values = new ArrayList<CachedObject<?>>();</span> + +<span class="fc bfc" id="L194" title="All 2 branches covered."> for (String key : getKeys())</span> + { +<span class="fc" id="L196"> Element cachedElement = this.cache.get(key);</span> + +<span class="pc bpc" id="L198" title="1 of 2 branches missed."> if (cachedElement != null)</span> + { +<span class="fc" id="L200"> values.add((CachedObject<?>)cachedElement.getObjectValue());</span> + } +<span class="fc" id="L202"> }</span> + +<span class="fc" id="L204"> return values;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getCacheSize() + */ + @SuppressWarnings("deprecation") + @Override + public int getCacheSize() throws IOException + { +<span class="nc" id="L214"> return (int)this.cache.calculateInMemorySize();</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getKeys() + */ + @Override + public List<String> getKeys() + { + @SuppressWarnings("unchecked") +<span class="fc" id="L224"> List<String> keysWithExpiryCheck = this.cache.getKeysWithExpiryCheck();</span> +<span class="fc" id="L225"> return keysWithExpiryCheck;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getNumberOfObjects() + */ + @Override + public int getNumberOfObjects() + { +<span class="fc" id="L234"> return getKeys().size();</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getObject(java.lang.String) + */ + @Override + public <T> CachedObject<T> getObject(String objectId) throws ObjectExpiredException + { +<span class="fc" id="L243"> Element cachedElement = this.cache.get(objectId);</span> + +<span class="fc bfc" id="L245" title="All 2 branches covered."> if (cachedElement == null)</span> + { + // Not in the cache. +<span class="fc" id="L248"> throw new ObjectExpiredException();</span> + } + + @SuppressWarnings("unchecked") +<span class="fc" id="L252"> CachedObject<T> cachedObject = (CachedObject<T>)cachedElement.getObjectValue();</span> + +<span class="pc bpc" id="L254" title="1 of 2 branches missed."> if (cachedObject.isStale())</span> + { +<span class="nc bnc" id="L256" title="All 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L258"> RefreshableCachedObject<?> refreshableCachedObject = (RefreshableCachedObject<?>) cachedObject;</span> +<span class="nc bnc" id="L259" title="All 2 branches missed."> if (refreshableCachedObject.isUntouched())</span> + { + // Do not refresh an object that has exceeded TimeToLive +<span class="nc" id="L262"> removeObject(objectId);</span> +<span class="nc" id="L263"> throw new ObjectExpiredException();</span> + } + + // Refresh Object +<span class="nc" id="L267"> refreshableCachedObject.refresh();</span> +<span class="nc bnc" id="L268" title="All 2 branches missed."> if (refreshableCachedObject.isStale())</span> + { + // Object is Expired, remove it from cache. +<span class="nc" id="L271"> removeObject(objectId);</span> +<span class="nc" id="L272"> throw new ObjectExpiredException();</span> + } +<span class="nc" id="L274"> }</span> + else + { + // Expired. +<span class="nc" id="L278"> removeObject(objectId);</span> +<span class="nc" id="L279"> throw new ObjectExpiredException();</span> + } + } + +<span class="pc bpc" id="L283" title="1 of 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { + // notify it that it's being accessed. +<span class="nc" id="L286"> RefreshableCachedObject<?> refreshableCachedObject = (RefreshableCachedObject<?>) cachedObject;</span> +<span class="nc" id="L287"> refreshableCachedObject.touch();</span> + } + +<span class="fc" id="L290"> return cachedObject;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#removeObject(java.lang.String) + */ + @Override + public void removeObject(String objectId) + { +<span class="fc" id="L299"> this.cache.remove(objectId);</span> +<span class="fc" id="L300"> }</span> + + /** + * Circle through the cache and refresh stale objects. Frequency is + * determined by the cacheCheckFrequency property. + */ + @Override + public void run() + { +<span class="pc bpc" id="L309" title="1 of 2 branches missed."> while (this.continueThread)</span> + { + // Sleep for amount of time set in cacheCheckFrequency - + // default = 5 seconds. + try + { +<span class="fc" id="L315"> Thread.sleep(this.cacheCheckFrequency);</span> + } +<span class="fc" id="L317"> catch (InterruptedException exc)</span> + { +<span class="pc bpc" id="L319" title="1 of 2 branches missed."> if (!this.continueThread)</span> + { +<span class="fc" id="L321"> return;</span> + } +<span class="fc" id="L323"> }</span> + +<span class="fc bfc" id="L325" title="All 2 branches covered."> for (String key : getKeys())</span> + { +<span class="fc" id="L327"> Element cachedElement = this.cache.get(key);</span> + +<span class="pc bpc" id="L329" title="1 of 2 branches missed."> if (cachedElement == null)</span> + { +<span class="nc" id="L331"> this.cache.remove(key);</span> +<span class="nc" id="L332"> continue;</span> + } + +<span class="fc" id="L335"> Object object = cachedElement.getObjectValue();</span> + +<span class="pc bpc" id="L337" title="1 of 2 branches missed."> if (object instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L339"> RefreshableCachedObject<?> refreshableObject = (RefreshableCachedObject<?>) object;</span> +<span class="nc bnc" id="L340" title="All 2 branches missed."> if (refreshableObject.isUntouched())</span> + { +<span class="nc" id="L342"> this.cache.remove(key);</span> + } +<span class="nc bnc" id="L344" title="All 2 branches missed."> else if (refreshableObject.isStale())</span> + { +<span class="nc" id="L346"> refreshableObject.refresh();</span> + } + } +<span class="fc" id="L349"> }</span> + } +<span class="nc" id="L351"> }</span> +} +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file
Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>JCSCacheService</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.html" class="el_package">org.apache.fulcrum.cache.impl</a> > <span class="el_class">JCSCacheService</span></div><h1>JCSCacheService</h1><table class="coverage" cellspacing="0" id="coveragetable">< thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">139 of 425</td><td class="ctr2">67%</td><td class="bar">21 of 42</td><td class="ctr2">50%</td><td class="ctr1">16</td><td class="ctr2">35 </td><td class="ctr1">33</td><td class="ctr2">108</td><td class="ctr1">1</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a5"><a href="JCSCacheService.java.html#L348" class="el_method">getCacheSize()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="43" alt="43"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="JCSCacheService.java.html#L161" class="el_method">getObject(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="41" alt="41"/><img src="../jacoco-resources/greenbar.gif" width="25" height="10" title="21" alt=" 21"/></td><td class="ctr2" id="c12">33%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="8" alt="8"/><img src="../jacoco-resources/greenbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">33%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">20</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="JCSCacheService.java.html#L217" class="el_method">addObject(String, CachedObject)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="38" alt="38"/><img src="../jacoco-resources/greenbar.gif" width="72" height="10" title="59" alt="59"/></td><td class="ctr2" id="c11">60%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="25" height="10" t itle="3" alt="3"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">6</td><td class="ctr2" id="i1">18</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="JCSCacheService.java.html#L299" class="el_method">run()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="17" alt="17"/><img src="../jacoco-resources/greenbar.gif" width="54" height="10" title="44" alt="44"/></td><td class="ctr2" id="c10">72%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">57%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h3">5</td><td class="ctr2" id="i2">18</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></t r><tr><td id="a9"><a href="JCSCacheService.java.html#L120" class="el_method">initialize()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="33" alt="33"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i3">9</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="JCSCacheService.java.html#L279" class="el_method">getCachedObjects()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="33" alt="33"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="25" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1 " id="f4">1</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="JCSCacheService.java.html#L373" class="el_method">getNumberOfObjects()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="25" alt="25"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="25" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="JCSCacheService.java.html#L107" class="el_method">configure(Configuration)</a></td><td class="bar" id="b7"><img src=".. /jacoco-resources/greenbar.gif" width="27" height="10" title="22" alt="22"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i8">5</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="JCSCacheService.java.html#L144" class="el_method">dispose()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="23" height="10" title="19" alt="19"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i6">7</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a6"><a href="JCSCacheService.java.html#L268" class="el_method">getKeys()</a></td><td class="bar" id="b9"><img src="../jacoco-res ources/greenbar.gif" width="16" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">3</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a11"><a href="JCSCacheService.java.html#L259" class="el_method">removeObject(String)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a3"><a href="JCSCacheService.java.html#L392" class="el_method">flushCache()</a></td><td class="bar" id="b11"><img src=".. /jacoco-resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="JCSCacheService.java.html#L95" class="el_method">JCSCacheService()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a13"><a href="JCSCacheService.java.html#L86" class="el_method">static {...}</a></td><td class="bar" id="b13"> <img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.java.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.java.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/JCSCacheService.java.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1,395 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>JCSCacheService.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.source.html" class="el_package">org.apache.fulcrum.cache.impl</a> > <span class="el_source">JCSC acheService.java</span></div><h1>JCSCacheService.java</h1><pre class="source lang-java linenums">package org.apache.fulcrum.cache.impl; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.apache.avalon.framework.activity.Disposable; +import org.apache.avalon.framework.activity.Initializable; +import org.apache.avalon.framework.configuration.Configurable; +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.framework.logger.AbstractLogEnabled; +import org.apache.avalon.framework.thread.ThreadSafe; +import org.apache.commons.jcs3.JCS; +import org.apache.commons.jcs3.access.GroupCacheAccess; +import org.apache.commons.jcs3.access.exception.CacheException; +import org.apache.commons.jcs3.engine.ElementAttributes; +import org.apache.commons.jcs3.engine.control.CompositeCacheManager; +import org.apache.fulcrum.cache.CachedObject; +import org.apache.fulcrum.cache.GlobalCacheService; +import org.apache.fulcrum.cache.ObjectExpiredException; +import org.apache.fulcrum.cache.RefreshableCachedObject; + +/** + * Default implementation of JCSCacheService + * + * @author <a href="mailto:[email protected]">Thomas Vandahl</a> + * @version $Id: JCSCacheService.java 1890338 2021-05-31 10:31:19Z gk $ + */ +public class JCSCacheService extends AbstractLogEnabled implements + GlobalCacheService, Runnable, Configurable, Disposable, Initializable, + ThreadSafe +{ + /** + * Cache check frequency in Millis (1000 Millis = 1 second). Value must be &gt; + * 0. Default = 5 seconds + */ + public static final long DEFAULT_CACHE_CHECK_FREQUENCY = 5000; // 5 seconds + + /** + * cacheCheckFrequency (default - 5 seconds) + */ + private long cacheCheckFrequency; + + /** + * Instance of the JCS cache + */ + private GroupCacheAccess<String, CachedObject<?>> cacheManager; + + /** + * JCS region to use + */ + private String region; + + /** + * Path name of the JCS configuration file + */ + private String configFile; + + /** + * Constant value which provides a group name + */ +<span class="fc" id="L86"> private static String group = "default_group";</span> + + /** thread for refreshing stale items in the cache */ + private Thread refreshing; + + /** flag to stop the housekeeping thread when the component is disposed. */ + private boolean continueThread; + + public JCSCacheService() +<span class="fc" id="L95"> {</span> + +<span class="fc" id="L97"> }</span> + + // ---------------- Avalon Lifecycle Methods --------------------- + + /** + * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration) + */ + @Override + public void configure(Configuration config) throws ConfigurationException + { +<span class="fc" id="L107"> this.cacheCheckFrequency = config.getChild("cacheCheckFrequency")</span> +<span class="fc" id="L108"> .getValueAsLong(DEFAULT_CACHE_CHECK_FREQUENCY);</span> +<span class="fc" id="L109"> this.region = config.getChild("region").getValue("fulcrum");</span> +<span class="fc" id="L110"> this.configFile = config.getChild("configurationFile").getValue(</span> + "/cache.ccf"); +<span class="fc" id="L112"> }</span> + + /** + * @see org.apache.avalon.framework.activity.Initializable#initialize() + */ + @Override + public void initialize() throws Exception + { +<span class="fc" id="L120"> JCS.setConfigFilename(this.configFile);</span> +<span class="fc" id="L121"> this.cacheManager = JCS.getGroupCacheInstance(this.region);</span> + + // Start housekeeping thread. +<span class="fc" id="L124"> this.continueThread = true;</span> +<span class="fc" id="L125"> this.refreshing = new Thread(this);</span> + + // Indicate that this is a system thread. JVM will quit only when + // there are no more active user threads. Settings threads spawned + // internally by Turbine as daemons allows commandline applications + // using Turbine to terminate in an orderly manner. +<span class="fc" id="L131"> this.refreshing.setDaemon(true);</span> +<span class="fc" id="L132"> this.refreshing.setName("JCSCacheService Refreshing");</span> +<span class="fc" id="L133"> this.refreshing.start();</span> + +<span class="fc" id="L135"> getLogger().debug("JCSCacheService started.");</span> +<span class="fc" id="L136"> }</span> + + /** + * @see org.apache.avalon.framework.activity.Disposable#dispose() + */ + @Override + public void dispose() + { +<span class="fc" id="L144"> this.continueThread = false;</span> +<span class="fc" id="L145"> this.refreshing.interrupt();</span> + +<span class="fc" id="L147"> this.cacheManager.dispose();</span> +<span class="fc" id="L148"> this.cacheManager = null;</span> +<span class="fc" id="L149"> CompositeCacheManager.getInstance().shutDown();</span> + +<span class="fc" id="L151"> getLogger().debug("JCSCacheService stopped.");</span> +<span class="fc" id="L152"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getObject(java.lang.String) + */ + @Override + public <T> CachedObject<T> getObject(final String objectId) throws ObjectExpiredException + { + @SuppressWarnings("unchecked") +<span class="fc" id="L161"> CachedObject<T> cachedObject = (CachedObject<T>)this.cacheManager.getFromGroup(objectId, group);</span> + +<span class="fc bfc" id="L163" title="All 2 branches covered."> if (cachedObject == null)</span> + { + // Not in the cache. +<span class="fc" id="L166"> throw new ObjectExpiredException();</span> + } + +<span class="pc bpc" id="L169" title="1 of 2 branches missed."> if (cachedObject.isStale())</span> + { +<span class="nc bnc" id="L171" title="All 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L173"> RefreshableCachedObject<?> refreshableObject = (RefreshableCachedObject<?>) cachedObject;</span> +<span class="nc bnc" id="L174" title="All 2 branches missed."> if (refreshableObject.isUntouched())</span> + { + // Do not refresh an object that has exceeded TimeToLive +<span class="nc" id="L177"> removeObject(objectId);</span> +<span class="nc" id="L178"> throw new ObjectExpiredException();</span> + } + + // Refresh Object +<span class="nc" id="L182"> refreshableObject.refresh();</span> +<span class="nc bnc" id="L183" title="All 2 branches missed."> if (refreshableObject.isStale())</span> + { + // Object is Expired, remove it from cache. +<span class="nc" id="L186"> removeObject(objectId);</span> +<span class="nc" id="L187"> throw new ObjectExpiredException();</span> + } +<span class="nc" id="L189"> }</span> + else + { + // Expired. +<span class="nc" id="L193"> removeObject(objectId);</span> +<span class="nc" id="L194"> throw new ObjectExpiredException();</span> + } + } + +<span class="pc bpc" id="L198" title="1 of 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { + // notify it that it's being accessed. +<span class="nc" id="L201"> RefreshableCachedObject<?> refreshableCachedObject = (RefreshableCachedObject<?>) cachedObject;</span> +<span class="nc" id="L202"> refreshableCachedObject.touch();</span> + } + +<span class="fc" id="L205"> return cachedObject;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#addObject(java.lang.String, + * org.apache.fulcrum.cache.CachedObject) + */ + @Override + public <T> void addObject(String objectId, CachedObject<T> cachedObject) + { + try + { +<span class="pc bpc" id="L217" title="1 of 2 branches missed."> if (!(cachedObject.getContents() instanceof Serializable))</span> + { +<span class="nc" id="L219"> getLogger()</span> +<span class="nc" id="L220"> .warn(</span> + "Object (contents) with id [" + + objectId + + "] is not serializable. Expect problems with auxiliary caches: " + +<span class="nc" id="L224"> cachedObject.getContents().getClass().getSimpleName());</span> + } + +<span class="fc" id="L227"> ElementAttributes attrib = (ElementAttributes) this.cacheManager.getDefaultElementAttributes();</span> + +<span class="pc bpc" id="L229" title="1 of 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L231"> attrib.setIsEternal(true);</span> + } + else + { +<span class="fc" id="L235"> attrib.setIsEternal(false);</span> + // expires in millis, maxlife in seconds +<span class="fc" id="L237"> double tmp0 = ((double) (cachedObject.getExpires() + 500)) / 1000;</span> +<span class="fc" id="L238"> getLogger().debug( "setting maxlife seconds (minimum 1sec) from expiry + 0.5s: " + (int)tmp0 );</span> +<span class="pc bpc" id="L239" title="1 of 2 branches missed."> attrib.setMaxLife( tmp0 > 0 ? (int) Math.floor( tmp0 ) : 1 );</span> + } + +<span class="fc" id="L242"> attrib.setLastAccessTimeNow();</span> +<span class="fc" id="L243"> attrib.setCreateTime();</span> + +<span class="fc" id="L245"> this.cacheManager.putInGroup(objectId, group, cachedObject, attrib);</span> + } +<span class="nc" id="L247"> catch (CacheException e)</span> + { +<span class="nc" id="L249"> getLogger().error("Could not add object " + objectId + " to cache", e);</span> +<span class="fc" id="L250"> }</span> +<span class="fc" id="L251"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#removeObject(java.lang.String) + */ + @Override + public void removeObject(String objectId) + { +<span class="fc" id="L259"> this.cacheManager.removeFromGroup(objectId, group);</span> +<span class="fc" id="L260"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getKeys() + */ + @Override + public List<String> getKeys() + { +<span class="fc" id="L268"> ArrayList<String> keys = new ArrayList<>();</span> +<span class="fc" id="L269"> keys.addAll(this.cacheManager.getGroupKeys(group));</span> +<span class="fc" id="L270"> return keys;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getCachedObjects() + */ + @Override + public List<CachedObject<?>> getCachedObjects() + { +<span class="fc" id="L279"> ArrayList<CachedObject<?>> values = new ArrayList<>();</span> +<span class="fc bfc" id="L280" title="All 2 branches covered."> for (String key : this.cacheManager.getGroupKeys(group))</span> + { +<span class="fc" id="L282"> CachedObject<?> cachedObject = this.cacheManager.getFromGroup(key, group);</span> +<span class="pc bpc" id="L283" title="1 of 2 branches missed."> if (cachedObject != null)</span> + { +<span class="fc" id="L285"> values.add(cachedObject);</span> + } +<span class="fc" id="L287"> }</span> + +<span class="fc" id="L289"> return values;</span> + } + + /** + * Circle through the cache and refresh stale objects. Frequency is + * determined by the cacheCheckFrequency property. + */ + @Override + public void run() + { +<span class="fc bfc" id="L299" title="All 2 branches covered."> while (this.continueThread)</span> + { + // Sleep for amount of time set in cacheCheckFrequency - + // default = 5 seconds. + try + { +<span class="fc" id="L305"> Thread.sleep(this.cacheCheckFrequency);</span> + } +<span class="fc" id="L307"> catch (InterruptedException exc)</span> + { +<span class="pc bpc" id="L309" title="1 of 2 branches missed."> if (!this.continueThread)</span> + { +<span class="fc" id="L311"> return;</span> + } +<span class="fc" id="L313"> }</span> + +<span class="fc bfc" id="L315" title="All 2 branches covered."> for (String key : this.cacheManager.getGroupKeys(group))</span> + { +<span class="fc" id="L317"> CachedObject<?> cachedObject = this.cacheManager.getFromGroup(key, group);</span> +<span class="fc bfc" id="L318" title="All 2 branches covered."> if (cachedObject == null)</span> + { +<span class="fc" id="L320"> removeObject(key);</span> + } + else + { +<span class="pc bpc" id="L324" title="1 of 2 branches missed."> if (cachedObject instanceof RefreshableCachedObject)</span> + { +<span class="nc" id="L326"> RefreshableCachedObject<?> refreshableObject = (RefreshableCachedObject<?>) cachedObject;</span> +<span class="nc bnc" id="L327" title="All 2 branches missed."> if (refreshableObject.isUntouched())</span> + { +<span class="nc" id="L329"> this.cacheManager.removeFromGroup(key, group);</span> + } +<span class="nc bnc" id="L331" title="All 2 branches missed."> else if (refreshableObject.isStale())</span> + { +<span class="nc" id="L333"> refreshableObject.refresh();</span> + } + } + } +<span class="fc" id="L337"> }</span> + } +<span class="fc" id="L339"> }</span> + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getCacheSize() + */ + @Override + public int getCacheSize() throws IOException + { + // This is evil! +<span class="nc" id="L348"> ByteArrayOutputStream baos = new ByteArrayOutputStream();</span> +<span class="nc" id="L349"> ObjectOutputStream out = new ObjectOutputStream(baos);</span> +<span class="nc" id="L350"> Set<String> keys = this.cacheManager.getGroupKeys(group);</span> + +<span class="nc bnc" id="L352" title="All 2 branches missed."> for (String key : keys)</span> + { +<span class="nc" id="L354"> out.writeObject(this.cacheManager.getFromGroup(key, group));</span> +<span class="nc" id="L355"> }</span> + +<span class="nc" id="L357"> out.flush();</span> + + // + // Subtract 4 bytes from the length, because the serialization + // magic number (2 bytes) and version number (2 bytes) are + // both written to the stream before the object + // +<span class="nc" id="L364"> return baos.toByteArray().length - 4 * keys.size();</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#getNumberOfObjects() + */ + @Override + public int getNumberOfObjects() + { +<span class="fc" id="L373"> int count = 0;</span> + +<span class="fc bfc" id="L375" title="All 2 branches covered."> for (String key : this.cacheManager.getGroupKeys(group))</span> + { +<span class="pc bpc" id="L377" title="1 of 2 branches missed."> if (this.cacheManager.getFromGroup(key, group) != null)</span> + { +<span class="fc" id="L379"> count++;</span> + } +<span class="fc" id="L381"> }</span> + +<span class="fc" id="L383"> return count;</span> + } + + /** + * @see org.apache.fulcrum.cache.GlobalCacheService#flushCache() + */ + @Override + public void flushCache() + { +<span class="fc" id="L392"> this.cacheManager.invalidateGroup(group);</span> +<span class="fc" id="L393"> }</span> +} +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>org.apache.fulcrum.cache.impl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <span class="el_package">org.apache.fulcrum.cache.impl</span></div><h1>org.apache.fulcrum.cache.impl</h1><table class="co verage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr ></thead><tfoot><tr><td>Total</td><td class="bar">307 of 1,066</td><td >class="ctr2">71%</td><td class="bar">53 of 110</td><td >class="ctr2">51%</td><td class="ctr1">41</td><td class="ctr2">97</td><td >class="ctr1">87</td><td class="ctr2">293</td><td class="ctr1">3</td><td >class="ctr2">42</td><td class="ctr1">0</td><td >class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a >href="JCSCacheService.html" class="el_class">JCSCacheService</a></td><td >class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="39" >height="10" title="139" alt="139"/><img >src="../jacoco-resources/greenbar.gif" width="80" height="10" title="286" >alt="286"/></td><td class="ctr2" id="c2">67%</td><td class="bar" id="d0"><img >src="../jacoco-resources/redbar.gif" width="60" height="10" title="21" >alt="21"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" >title="21" alt="21"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" >id="f0">16</td><td class="ctr2" id="g0">35</td><td class="c tr1" id="h0">33</td><td class="ctr2" id="i0">108</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">14</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DefaultGlobalCacheService.html" class="el_class">DefaultGlobalCacheService</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="87" alt="87"/><img src="../jacoco-resources/greenbar.gif" width="68" height="10" title="244" alt="244"/></td><td class="ctr2" id="c1">73%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="37" height="10" title="13" alt="13"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="21" alt="21"/></td><td class="ctr2" id="e0">61%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h1">29</td><td class="ctr2" id="i1">96</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k0">15</td><td class="ctr1" id="l1">0</td><td class= "ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="EHCacheService.html" class="el_class">EHCacheService</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="81" alt="81"/><img src="../jacoco-resources/greenbar.gif" width="64" height="10" title="229" alt="229"/></td><td class="ctr2" id="c0">73%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="19" alt="19"/><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="15" alt="15"/></td><td class="ctr2" id="e2">44%</td><td class="ctr1" id="f1">15</td><td class="ctr2" id="g2">30</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">89</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">13</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></b ody></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.source.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.source.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache.impl/index.source.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>org.apache.fulcrum.cache.impl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <span class="el_package">org.apache.fulcrum.cache.impl</span></div><h1>org.apache.fulcrum.cache.impl</h1><table class="coverage" cells pacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfo ot><tr><td>Total</td><td class="bar">307 of 1,066</td><td class="ctr2">71%</td><td class="bar">53 of 110</td><td class="ctr2">51%</td><td class="ctr1">41</td><td class="ctr2">97</td><td class="ctr1">87</td><td class="ctr2">293</td><td class="ctr1">3</td><td class="ctr2">42</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="JCSCacheService.java.html" class="el_source">JCSCacheService.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="39" height="10" title="139" alt="139"/><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="286" alt="286"/></td><td class="ctr2" id="c2">67%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="21" alt="21"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="21" alt="21"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">35</td><td class="ctr 1" id="h0">33</td><td class="ctr2" id="i0">108</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">14</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="DefaultGlobalCacheService.java.html" class="el_source">DefaultGlobalCacheService.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="87" alt="87"/><img src="../jacoco-resources/greenbar.gif" width="68" height="10" title="244" alt="244"/></td><td class="ctr2" id="c1">73%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="37" height="10" title="13" alt="13"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="21" alt="21"/></td><td class="ctr2" id="e0">61%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h1">29</td><td class="ctr2" id="i1">96</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k0">15</td><td class="ctr1" id="l1">0</td>< td class="ctr2" id="m1">1</td></tr><tr><td id="a1"><a href="EHCacheService.java.html" class="el_source">EHCacheService.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="81" alt="81"/><img src="../jacoco-resources/greenbar.gif" width="64" height="10" title="229" alt="229"/></td><td class="ctr2" id="c0">73%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="19" alt="19"/><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="15" alt="15"/></td><td class="ctr2" id="e2">44%</td><td class="ctr1" id="f1">15</td><td class="ctr2" id="g2">30</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">89</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">13</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.20200915 0832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CachedObject</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_class">CachedObject</span></div><h1>CachedObject</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">37 of 109</td><td class="ctr2">66%</td><td class="bar">7 of 12</td><td class="ctr2">41%</td><td class="ctr1">6</td><td class="ctr2">14</td><td class="c tr1">8</td><td class="ctr2">28</td><td class="ctr1">2</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a6"><a href="CachedObject.java.html#L140" class="el_method">setExpires(long)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="34" alt="34"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="CachedObject.java.html#L119" class="el_method">getCreated()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" i d="f1">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="CachedObject.java.html#L54" class="el_method">CachedObject(Object, long)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="105" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"><img src="../jacoco-resources/greenbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="CachedObject.java.html#L177" class="el_method">isStale()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="91" height="10" title="26" alt="26"/></td><td class="ctr2" id ="c1">100%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="CachedObject.java.html#L76" class="el_method">CachedObject(Object)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a7"><a href="CachedObject.java.html#L166" class=" el_method">setStale(boolean)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a2"><a href="CachedObject.java.html#L109" class="el_method">getContents()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="CachedObject.java.html#L129" class="el_method ">getExpires()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.java.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.java.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/CachedObject.java.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1,186 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CachedObject.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.source.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_source">CachedObject .java</span></div><h1>CachedObject.java</h1><pre class="source lang-java linenums">package org.apache.fulcrum.cache; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.Serializable; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Wrapper for an object you want to store in a cache for a period of time. + * + * @author <a href="mailto:[email protected]">Dave Bryson</a> + * @author <a href="mailto:[email protected]">Henning P. Schmiedehausen</a> + * @author <a href="mailto:[email protected]">Eric Pugh</a> + * @version $Id: CachedObject.java 1890338 2021-05-31 10:31:19Z gk $ + */ + +public class CachedObject<T> implements Serializable +{ + /* + * TODO: The old Turbine version you could set the default age from Turbine. + * What we need is a CachedObjectFactory that would generate CachedObject's + * that could then have their default age set. + */ + + /** + * Serialization key + */ + private static final long serialVersionUID = -9107764093769042092L; + + /** Cache the object with the Default TTL */ + public static final int DEFAULT = 0; + + /** Do not expire the object */ + public static final int FOREVER = -1; + + /** The object to be cached. */ +<span class="fc" id="L54"> private T contents = null;</span> + + /** Default age (30 minutes). */ + private static final long DEFAULT_AGE = 1_800_000; + + /** When the object is created. */ + protected long created; + + /** When the object should expire. */ + private long expires; + + /** Is this object stale/expired? */ +<span class="fc" id="L66"> private final AtomicBoolean stale = new AtomicBoolean();</span> + + /** + * Constructor; sets the object to expire in the default time (30 minutes). + * + * @param object + * The object you want to cache. + */ + public CachedObject(final T object) + { +<span class="fc" id="L76"> this(object, DEFAULT);</span> +<span class="fc" id="L77"> }</span> + + /** + * Constructor. + * + * @param object + * The object to cache. + * @param expires + * How long before the object expires, in ms, e.g. 1000 = 1 + * second. + */ + public CachedObject(final T object, final long expires) +<span class="fc" id="L89"> {</span> +<span class="fc bfc" id="L90" title="All 2 branches covered."> if (expires == DEFAULT)</span> + { +<span class="fc" id="L92"> this.expires = this.DEFAULT_AGE;</span> + } else { +<span class="fc" id="L94"> this.expires = expires;</span> + } + +<span class="fc" id="L97"> this.contents = object;</span> + +<span class="fc" id="L99"> this.created = System.currentTimeMillis();</span> +<span class="fc" id="L100"> }</span> + + /** + * Returns the cached object. + * + * @return The cached object. + */ + public T getContents() + { +<span class="fc" id="L109"> return this.contents;</span> + } + + /** + * Returns the creation time for the object. + * + * @return When the object was created. + */ + public long getCreated() + { +<span class="nc" id="L119"> return this.created;</span> + } + + /** + * Returns the expiration time for the object. + * + * @return When the object expires. + */ + public long getExpires() + { +<span class="fc" id="L129"> return this.expires;</span> + } + + /** + * Set the expiration interval for the object. + * + * @param expires + * Expiration interval in millis ( 1 second = 1000 millis) + */ + public void setExpires(final long expires) + { +<span class="nc bnc" id="L140" title="All 2 branches missed."> if (expires == DEFAULT)</span> + { +<span class="nc" id="L142"> this.expires = this.DEFAULT_AGE;</span> + } + else + { +<span class="nc" id="L146"> this.expires = expires;</span> + } +<span class="nc bnc" id="L148" title="All 2 branches missed."> if (expires == FOREVER)</span> + { +<span class="nc" id="L150"> setStale(false);</span> + } + else + { +<span class="nc bnc" id="L154" title="All 2 branches missed."> setStale((System.currentTimeMillis() - this.created) > expires);</span> + } +<span class="nc" id="L156"> }</span> + + /** + * Set the stale status for the object. + * + * @param stale + * Whether the object is stale or not. + */ + public void setStale(final boolean stale) + { +<span class="fc" id="L166"> this.stale.set( stale );</span> +<span class="fc" id="L167"> }</span> + + + /** + * Is the object stale? + * + * @return True if the object is stale. + */ + public boolean isStale() + { +<span class="fc" id="L177"> boolean currentState = false;</span> +<span class="pc bpc" id="L178" title="1 of 2 branches missed."> if (this.expires != FOREVER)</span> + { +<span class="fc bfc" id="L180" title="All 2 branches covered."> setStale((System.currentTimeMillis() - this.created) > this.expires);</span> +<span class="fc" id="L181"> currentState = this.stale.get();</span> + } +<span class="fc" id="L183"> return currentState;</span> + } +} +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GlobalCacheService</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_class">GlobalCacheService</span></div><h1>GlobalCacheService</h1><table class="coverage" cellspacing="0" id="coveragetabl e"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</t d><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="GlobalCacheService.java.html#L35" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.java.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.java.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/GlobalCacheService.java.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GlobalCacheService.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.source.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_source">Global CacheService.java</span></div><h1>GlobalCacheService.java</h1><pre class="source lang-java linenums">package org.apache.fulcrum.cache; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.util.List; + +/** + * GlobalCacheService interface. + * + * @author <a href="mailto:[email protected]">Dave Bryson</a> + * @author <a href="mailto:[email protected]">Peter CourefreshableCachedObjectux</a> + * @version $Id: GlobalCacheService.java 1890075 2021-05-21 15:04:52Z painter $ + */ +public interface GlobalCacheService +{ + /** Avalon role - used to id the component within the manager */ +<span class="fc" id="L35"> String ROLE = GlobalCacheService.class.getName();</span> + + /** + * Gets a cached object given its id (a String). + * + * @param <T> type of object to return + * @param objectId + * The String id for the object. + * @return A CachedObject. + * @throws ObjectExpiredException + * if the object has expired in the cache. + */ + <T> CachedObject<T> getObject(String objectId) throws ObjectExpiredException; + + /** + * Adds an object to the cache. + * + * @param <T> type of object to add + * @param objectId + * The String id for the object. + * @param object + * The object to add to the cache. + */ + <T> void addObject(String objectId, CachedObject<T> object); + + /** + * Removes an object from the cache. + * + * @param objectId + * The String id for the object. + */ + void removeObject(String objectId); + + /** + * Returns a copy of keys to objects in the cache as a list. + * + * Note that keys to expired objects are not returned. + * + * @return A List of <code>String</code>'s representing the keys to + * objects in the cache. + */ + List<String> getKeys(); + + /** + * Returns a copy of the non-expired CachedObjects in the cache as a list. + * + * @return A List of <code>CachedObject</code> objects held in the cache + */ + List<CachedObject<?>> getCachedObjects(); + + /** + * Returns the current size of the cache. + * + * @return int representing current cache size in number of bytes + * @throws IOException if unable to return cache size + */ + int getCacheSize() throws IOException; + + /** + * Returns the number of objects in the cache. + * + * @return int The current number of objects in the cache. + */ + int getNumberOfObjects(); + + /** + * Flush the cache of all objects. + */ + void flushCache(); +} +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ObjectExpiredException</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_class">ObjectExpiredException</span></div><h1>ObjectExpiredException</h1><table class="coverage" cellspacing="0" id=" coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 3</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class ="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="ObjectExpiredException.java.html#L29" class="el_method">ObjectExpiredException()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="3" alt="3"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file Added: websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.java.html ============================================================================== --- websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.java.html (added) +++ websites/production/turbine/content/fulcrum/fulcrum-cache/jacoco/org.apache.fulcrum.cache/ObjectExpiredException.java.html Wed Aug 4 06:41:15 2021 @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ObjectExpiredException.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">Fulcrum Cache</a> > <a href="index.source.html" class="el_package">org.apache.fulcrum.cache</a> > <span class="el_source">Ob jectExpiredException.java</span></div><h1>ObjectExpiredException.java</h1><pre class="source lang-java linenums">package org.apache.fulcrum.cache; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * Exception thrown when an item either does not exist or has expired from the + * GlobalCache. + * + * @author <a href="mailto:[email protected]">Dave Bryson</a> + * @version $Id: ObjectExpiredException.java 670326 2008-06-22 09:31:47Z tv $ + */ +<span class="fc" id="L29">public class ObjectExpiredException extends Exception</span> +{ + + /** + * Serial version id + */ + private static final long serialVersionUID = -4331535517388875678L; +} +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.6.202009150832</span></div></body></html> \ No newline at end of file
