Anonymous avatar Anonymous committed b4d4c3f

WIKI updates for v2.3.1

Comments (0)

Files changed (15)

docs/wiki/API Usage.html

 }</pre>
 </div></div>
 
+<h4><a name="APIUsage-Note"></a>Note</h4>
+
+<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Be Careful</b><br />
+<p>If a NeedsRefreshException is raised you have to invoke admin.putInCache or even admin.cancelUpdate to avoid deadlock situation.</p></td></tr></table>
+
                     			    </td>
 		    </tr>
 	    </table>

docs/wiki/CacheFilter Tutorial.html

 
 <p><b>OSCache</b> comes with a servlet filter that enables you to transparently cache entire pages of your website, and even binary files. Caching of binary files is extremely useful when they are generated dynamically, e.g. PDF files or images. In addition by using the last modified header the transaction overhead and server load is reduced excellently which speed ups the server response time.</p>
 
-<p>How to configure OSCache to cache entire servlet responses is described in the <a href="CacheFilter.html" title="CacheFilter">configuration page of the CacheFilter</a>.</p>
+<p>How to configure OSCache to cache entire servlet responses is described in the <a href="CacheFilter.html" title="CacheFilter">configuration page of the CacheFilter</a>. This short tutorial should demonstrate how to make your web site more responsive, and save load on your server. Using the CacheFilter the user will appreciate a faster loading site and will visit it more often.</p>
 
-<p>Besides bugs being fixed in the 2.2 release, major improvements have been made to the CacheFilter in many ways:</p>
+<h3><a name="CacheFilterTutorial-Improvements"></a>Improvements</h3>
+
+<p>Major improvements have been made to the CacheFilter in the releases 2.2 and 2.3:</p>
 
 <ul>
 	<li>Default initialization of the last modified header which reduces transaction overhead and server load</li>
+	<li>CRON expressions to expire content at specific dates and/or times</li>
 	<li>Preserving more http headers, e.g. the expires header</li>
 	<li>Special handling for fragments of a page</li>
 	<li>Custom cache key generation by subclassing CacheFilter or by implementing a special interface</li>
 	<li>Custom cache groups generation by subclassing CacheFilter or by implementing a special interface</li>
 	<li>Support of GZip filters in the filter chain</li>
 	<li>Avoids session creation for application scope pages</li>
+	<li>Reduced memory consumption</li>
 	<li>Multiple matching cache filters won't dead-lock the response anymore</li>
 	<li>The cache won't be serve the same response twice before the client begins to cache it anymore</li>
 </ul>
 
 
-<p>The upcoming 2.3 release will include further improvements to the CacheFilter:</p>
-
-<ul>
-	<li>CRON expressions to expire content at specific dates and/or times</li>
-	<li>Reduced memory consumption</li>
-</ul>
-
-
 <h3><a name="CacheFilterTutorial-CacheableContent"></a>Cacheable Content</h3>
 
 <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Cacheable content</b><br />

docs/wiki/CacheFilter.html

 
 <p>The scope parameter lets you set the scope to cache content in. Valid values for the scope are <em>application</em> (default) and <em>session</em>.</p>
 
-<h4><a name="CacheFilter-Parameter%3Acron%28Newinupcomingrelease2.3%29"></a><a name="CacheFilter-cron"></a>Parameter: cron (New in upcoming release 2.3)</h4>
+<h4><a name="CacheFilter-Parameter%3Acron%28NEW%5C%21Since2.3%29"></a><a name="CacheFilter-cron"></a>Parameter: cron (NEW&#33; Since 2.3)</h4>
 
 <p>A cron expression that determines when the page content will expire. This allows content to be expired at particular dates and/or times, rather than once a cache entry reaches a certain age. See <a href="Cron Expressions.html" title="Cron Expressions">Cron Expressions</a> to read more about this attribute. Please consider that the (default) time value is still evaluated, hence the time value should be set to indefinite expiry.</p>
 
 
 <p>Defines if the last modified header will be sent in the response. Acceptable values are <em>off</em> for don't sending the header, even it is set in the filter chain, <em>on</em> for sending it if it is set in the filter chain and <em>initial</em> (default) the last modified information will be set based on current time.</p>
 
+<h4><a name="CacheFilter-Parameter%3Amaxage%28NEW%5C%21Since2.3.1%29"></a><a name="CacheFilter-maxage"></a>Parameter: max-age (NEW&#33; Since 2.3.1)</h4>
+
+<p>Specifies the maximum amount of time in seconds that the cache content will be considered new in the browser's cache. The browser will retrieve the content from it's own cache for the amount of time without requesting the web server again. The default max-age time is 60 seconds. Combined with the <a href="#CacheFilter-lastModified" title="lastModified on CacheFilter">last modified header</a> the transaction overhead and server load is reduced excellently which speed ups the server response time. Further parameters are <em>no init</em> for don't initializing the max-age cache control and <em>time</em> to set max-age based on the time parameter and creation time of the content (expiration timestamp minus current timestamp) by each request.</p>
+
 <h4><a name="CacheFilter-Parameter%3Aexpires%28NEW%5C%21Since2.2%29"></a><a name="CacheFilter-expires"></a>Parameter: expires (NEW&#33; Since 2.2)</h4>
 
 <p>Defines if the expires header will be sent in the response. Acceptable values are <em>off</em> for don't sending the header, even it is set in the filter chain, <em>on</em> (default) for sending it if it is set in the filter chain and <em>time</em> the expires information will be intialized based on the time parameter and creation time of the content.<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Value time</b><br /><br/>

docs/wiki/Chain Caching Model.html

+<html>
+    <head>
+        <title>OSCache - 
+        Chain Caching Model
+         </title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <h2><a name="ChainCachingModel-Discussion"></a>Discussion</h2>
+
+<p><u>Lars wrote:</u><br/>
+Would it be possible to use the intercepting filter pattern to support all possible cache models with a lot of combination capabilities? It's possible to define the capacity for each cache etc.</p>
+
+<p>DiskPersistence, SoftReferenceCache etc. would implement the Command interface of Commons Chain or a new interface of OSCache.</p>
+
+<p><a href="http://jakarta.apache.org/commons/chain/" title="Visit page outside Confluence">&#104;ttp://jakarta.apache.org/commons/chain/</a><br/>
+<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html" title="Visit page outside Confluence">&#104;ttp://java.sun.com/blueprints/corej2eepatterns/Patterns/InterceptingFilter.html</a></p>
+
+<p><u>Andres wrote:</u><br/>
+I think that is a good idea but it may be overkill for the most use cases.  Also, not every cache interceptor could have all the capabilities.  In particular, how would you imagine a realistic use case for a cache.get() call.  Should multiple interceptors return values?</p>
+
+<p>I think disk persistence is still in, although I don't think it will be like it is now.  We will be accepting Object keys, so any cache impl will need to accept them.  I have been thinking about a lightweight object db that has persistence built-in but I'm not sure.</p>
+
+<p>This is definitely an interesting topic and I'd like to discuss it more.<br/>
+Now is the time to make these sort of decisions.</p>
+
+<p><u>Lars wrote:</u><br/>
+The cache interceptors are cascaded. If the first interceptor doesn't return a value then the 2nd interceptor will be requested.</p>
+
+<p><u>Andres wrote:</u><br/>
+The scenarios below basically describe a more flexible implementation of the 2 cache (memory and disk) architecture in place.&nbsp; There is no doubt that a chained design can be better.&nbsp; I would be mindful of the abuse that can occur with a inifinitely flexible system.&nbsp; I prefer though to allow people to shoot themselves in the foot but make it extremely easy not to do so by providing very simple out of the box implementations.&nbsp; I have attached a <a href="http://wiki.opensymphony.com/download/attachments/7147/cache+sequences.pdf?version=1" title="cache sequences.pdf attached to Chain Caching Model">simple sequence diagram</a>.&nbsp; I think further documenting the scenarios you have below as well as all the other use cases we intend to provide is the best course of action at this point.&nbsp; All the old code has been torn out.&nbsp; We are at the point where we should be conscious of the new design that we allow to take shape.</p>
+
+<p><u>Lars wrote:</u><br/>
+The interface needed for the Cache Link (which you describe in a <a href="http://wiki.opensymphony.com/download/attachments/7147/cache+sequences.pdf?version=1" title="cache sequences.pdf attached to Chain Caching Model">simple sequence diagram</a>) is exactly the same interface as the EvictionAlgorithm. The Cache Chain has to handle in which Cache Link a cache content should be. Furthermore the Cache Chain has to put an evicted cache content from the memory cache to the disk cache.</p>
+
+<p>1.) How do you want to synchronize the access to the same cache content? In OSCache 2 this is done by the EntryUpdateState based on the key.<br/>
+2.) Should the Cache Chain contain all the cache keys without knowing in which Cache Link the content is? Or should each Cache Link contain it's own cache keys?</p>
+
+<p>Some other points:<br/>
+3.) Please update the java doc of EvictionAlgorithm, because some parameters are wrong.<br/>
+4.) currently you synchronize the cache events, I think there maybe a performance loss, because in my environments a lot of events are fired</p>
+
+<p>I added a <a href="http://wiki.opensymphony.com/download/attachments/7147/CacheChainModel_v1.pdf?version=1" title="CacheChainModel_v1.pdf attached to Chain Caching Model">simple class diagramm</a> and saved the diagramm in the <a href="http://wiki.opensymphony.com/download/attachments/7147/oscache.fpr.gz?version=4" title="oscache.fpr.gz attached to Chain Caching Model">Fujaba format</a>.</p>
+
+<p><u>Andres wrote:</u></p>
+
+<p>The cache chain should have no knowledge of what is in any of the cache links.  However, the issue of eviction is clear.  When a put() is called, the link should return an evicted entry or null if the cache is not full.  The chain will then know if it needs to continue the put into the next link.  To clarify the interfaces, I think a Chain interface should extend Map.  The Link and EvictionAlgorithm should themselves be interfaces.  Link could have implementations such as memory, disk, database.  EvictionAlgorithm could have implementations such as LRU, FIFO, etc....</p>
+
+<p>1.) In my branch, I have synchronized the entire cache on each cache access.  I think this will still be fast enough and will surely be more stable.  basically, get, put, and remove are sync'd.  I do not think we need to achieve a highly concurrent cache in order to provide a solution that is hundreds of times faster than db or disk access.</p>
+
+<p>However, we could add functionality the improves performance but does not cause deadlocks, such as a write behind feature on puts, so that puts get queued and another thread does the work when it has time. </p>
+
+<p>2.) I don't think this would be wise.  I don't think the chain should have knowledge of the keys.  I think all it should have is references to the links and stateless logic.  Either way each link would need to keep its own keys, therefore putting them in the chain would add another map that would have to be accessed and slow performance.</p>
+
+<p>There are 3 places I believe the keys must exist: in the store (duh), in the algorithm (or we could generalize this as any metrics collector), and in the groups map.</p>
+
+<p>Group functionality is a similar issue.  I had wanted to drop this functionality but it seems the people that use cache tags (I never have yet) really depend on them.  This functionality is unique to OSCache as far as I am aware.<br/>
+Maintaining the groups in each link could kill performance.  I think we need a GroupManager that exists outside of the cache links and is referenced from the chain.  This way it is only called once per chain.  One disadvantage would be that when a group is removed each remove would have to be called on each link until it found the correct store. </p>
+
+<p>3./4.) Yeah, that is sort of borrowed code and is not necessary.  However, we need to be mindful of the access to the listener list.  The easiest way is to probably make the list implementation a SynchronizedArrayList or something.</p>
+
+<p>The way I am thinking the current code in my branch could be moved over to a chain model is:</p>
+<ol>
+	<li>most of the BaseCache code gets put into the chain minus the algorithm and group map code.</li>
+	<li>the MemoryCache gets turned into one of the link implementations and gets the algorithm reference</li>
+	<li>the group map code gets refactored into a GroupManager and called from the chain.</li>
+</ol>
+
+
+<p><u>Lars wrote:</u><br/>
+I think the implementations of the CacheChain interface could be a SimplePipeCacheChain and a SizeBasedCacheChain. The SimplePipeCacheChain is comparable to the current architectur. The SizeBasesCacheChain puts the cache objects to the different CacheLinks based on the cache content sizes, e.g. large images a stored to disk and not in memory.</p>
+
+<p><img src="Chain Caching Model_attachments/CacheChainModel_v3.jpg" align="absmiddle" border="0" /></p>
+
+<p>The default CacheChain should be the SimplePipeCacheChain. The SizeBasedCacheChain can be implemented as part of a 3.1 release.</p>
+
+<h2><a name="ChainCachingModel-Scenariostobecheckedandtested"></a>Scenarios to be checked and tested</h2>
+
+<p>Configuration with a LRU algorithm: (1) MemoryCache &#45;<del>&gt; (2) SoftRefCache &#45;</del>&gt; (3) DiskPersistCache</p>
+
+<h3><a name="ChainCachingModel-ScenarioA%3AGetforaobjectinSoftRefCache"></a>Scenario A: Get for a object in SoftRefCache</h3>
+
+<ol>
+	<li>the cache object x1 is in the SoftRefCache</li>
+	<li>the 1st getEntry will return null for the MemoryCache</li>
+	<li>the 2nd getEntry will find the cache object x1 in SoftRefCache</li>
+	<li>cache object x1 has to be removed from the SoftRefCache and has to put into the 1st cache (or maybe in the previous cache &lt;&#45; design decission).</li>
+	<li>the cache object x1 will edge out the cache object xi (LRU) from the MemoryCache and the cache object xi has to me removed from the MemoryCache and to put in the next cache (SoftRefCache).</li>
+</ol>
+
+
+<h3><a name="ChainCachingModel-ScenarioB%3AGetforaobjectinDiskPersistCache"></a>Scenario B: Get for a object in DiskPersistCache</h3>
+
+<ol>
+	<li>the cache object x2 is in the DiskPersistCache</li>
+	<li>the 1st getEntry will return null for the MemoryCache</li>
+	<li>the 2nd getEntry will return null for the SoftRefCache</li>
+	<li>the 3rd getEntry will find the cache object x2 in DiskPersistCache</li>
+	<li>cache object x2 has to be removed from the DiskPersistCache and has to put into the 1st cache. The cache object x2 will edge out xj in MemoryCache, which has to be put in SoftRefCache. Hence xj will edge out xk in SoftRefCache, which has to be put in DiskPersistCache</li>
+</ol>
+
+
+<h3><a name="ChainCachingModel-ScenarioC%3APutanewobject"></a>Scenario C: Put a new object</h3>
+
+<ol>
+	<li>the new cache object x3 should be put into the cache</li>
+	<li>the cache object x3 will be edge out a cache object xa from MemoryCache</li>
+	<li>xa has to be put into SoftRefCache, where xa will edge out xb</li>
+	<li>xb has to be put in DiskPersistCache, where xb will edge out xc</li>
+	<li>until DiskPersistCache is not unlimited the xc cache object has to be removed from cache. Hence the cache key for xc has to be removed from the map.</li>
+</ol>
+
+
+<h3><a name="ChainCachingModel-ScenarioD%3APutastaleobjectorgetastaleobject"></a>Scenario D: Put a stale object or get a stale object</h3>
+
+<p><b>TODO</b></p>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>
Add a comment to this file

docs/wiki/Chain Caching Model_attachments/CacheChainModel_v1.pdf

Binary file added.

Add a comment to this file

docs/wiki/Chain Caching Model_attachments/CacheChainModel_v3.jpg

Added
New image
Add a comment to this file

docs/wiki/Chain Caching Model_attachments/cache sequences.pdf

Binary file added.

Add a comment to this file

docs/wiki/Chain Caching Model_attachments/oscache.fpr.gz

Binary file added.

docs/wiki/Change Log.html

 <ul>
 	<li>2006
 	<ul>
+		<li><a href="OSCache 2.3.1.html" title="OSCache 2.3.1">OSCache 2.3.1</a></li>
 		<li><a href="OSCache 2.3.html" title="OSCache 2.3">OSCache 2.3</a></li>
 	</ul>
 	</li>

docs/wiki/Complete Change Log.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <h2><a name="CompleteChangeLog-OSCache2.3"></a>OSCache 2.3</h2>
+				    <h2><a name="CompleteChangeLog-OSCache2.3.1"></a>OSCache 2.3.1</h2>
+<h3><a name="CompleteChangeLog-ReleaseNotes"></a>Release Notes</h3>
+
+<p><em>TO BE RELEASED</em></p>
+
+<p>(19th June 2006 - by Lars Torunski)</p>
+
+<h4><a name="CompleteChangeLog-Thismaintenancereleaseof2.3hasoneenhancement%3A"></a>This maintenance release of 2.3 has one enhancement:</h4>
+
+<ul>
+	<li>CacheFilter: Default initialization of the Cache-Control max-age</li>
+</ul>
+
+
+<h4><a name="CompleteChangeLog-Bugfixes%3A"></a>Bug fixes:</h4>
+
+<ul>
+	<li>Cache.flushAll(Date flushDate) won't throw NeedsRefreshException when flush date is not yet reached anymore</li>
+	<li>No NoSuchElementException at Cache.putInCache() anymore</li>
+</ul>
+
+
+<h4><a name="CompleteChangeLog-JIRAIssueList"></a>JIRA Issue List</h4>
+
+<p><a name="jiraissues">
+    <table  width="100%" cellspacing="0" class="grid">
+        <tr>
+            <th colspan="4" style="text-align: left;">
+                                    <a href="/spaces/doexportspace.action?key=CACHE&macro.refresh=true#jiraissues"><img src="/images/icons/refresh_16.png" height="16" width="16" border="0" align="right" title="refresh"/></a>
+                                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10001&fixfor=21630&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
+                <span class="smalltext">(3 issues)</span>
+            </th>
+        </tr>
+        <tr>
+                        <th style="text-align: left;">
+                T                                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                Key                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                Summary                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                                                                                Status                                                                            </th>
+                    </tr>
+                                            <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246">CACHE-246</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246">java.util.NoSuchElementException during at com.opensymphony.oscache.base.Cache.putInCache()</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+                                    <tr class="rowAlternate">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241">CACHE-241</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241">Cache.flushAll(Date flushDate) throws NeedsRefreshException when flush date is not yet reached</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+                                    <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240">CACHE-240</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240">Default initialization of the Cache-Control max-age</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+            </table>
+</p>
+
+
+
+
+
+<h2><a name="CompleteChangeLog-OSCache2.3"></a>OSCache 2.3</h2>
 <h3><a name="CompleteChangeLog-ReleaseNotes"></a>Release Notes</h3>
 
 <p>(6th March 2006 - by Lars Torunski)</p>

docs/wiki/Home.html

 
     </div>
 </div>    
-                    <div class="greybox" style="background: #f0f0f0; font-weight: bold; text-decoration:none; color: black;">
-                <img src="/images/icons/blogentry_16.gif" height="16" width="16" border="0" align="absmiddle" />
-                <a href="/display/CACHE/2005/05/01">Sunday, May 1, 2005</a>
-            </div>
-        
-
-<div class="blogpost" style="margin-bottom: 30px">
-    <div class="blogHeading" style="margin-top: 0px; padding-top: 0px"><a style="text-decoration: none; color: black" href="/display/CACHE/2005/05/01/OSCache+2.1.1+Released">OSCache 2.1.1 Released</a></div>
-
-    <div class="pagesubheading">
-                    </div>
-        <div class="wiki-content">
-         <p><a href="/display/CACHE/OSCache+2.1.1" title="OSCache 2.1.1">Version 2.1.1</a> of the popular open-source J2EE cache was released on 1st May 2005. This is a minor update to OSCache.  It fixes some small bugs and some minor concurrency issues.</p>
-        </div>
-            <div class="endsection" align="right" style="color: #666666; margin-top: 10px">
-        <b>Posted at 01 May @ 12:20 AM</b> by
-        <img src="/images/icons/user_16.gif" height="16" width="16" border="0" align="absmiddle" title="User Profile: Andres March">
-            <a href="/display/~dres1011">Andres March</a>        |
-        <img src="/images/icons/comment_16.gif" height="16" width="16" border="0" align="absmiddle">
-                    <a href="/display/CACHE/2005/05/01/OSCache+2.1.1+Released?showComments=true#comments">0 comments</a>
-        
-
-    </div>
-</div>    
-                    <div class="greybox" style="background: #f0f0f0; font-weight: bold; text-decoration:none; color: black;">
-                <img src="/images/icons/blogentry_16.gif" height="16" width="16" border="0" align="absmiddle" />
-                <a href="/display/CACHE/2005/01/23">Sunday, January 23, 2005</a>
-            </div>
-        
-
-<div class="blogpost" style="margin-bottom: 30px">
-    <div class="blogHeading" style="margin-top: 0px; padding-top: 0px"><a style="text-decoration: none; color: black" href="/display/CACHE/2005/01/23/OSCache+2.1+Released">OSCache 2.1 Released</a></div>
-
-    <div class="pagesubheading">
-                    </div>
-        <div class="wiki-content">
-         <p><a href="/display/CACHE/OSCache+2.1" title="OSCache 2.1">Version 2.1</a> of the popular open-source J2EE cache was released on 18th January 2005. Besides many bugs being fixed, major improvements have been made to OSCache in the way data can be persisted. Also, this wiki has been created to expand on the existing documentation.</p>
-        </div>
-            <div class="endsection" align="right" style="color: #666666; margin-top: 10px">
-        <b>Posted at 23 Jan @ 4:26 PM</b> by
-        <img src="/images/icons/user_16.gif" height="16" width="16" border="0" align="absmiddle" title="User Profile: Lars Torunski">
-            <a href="/display/~lars%2Bt">Lars Torunski</a>        |
-        <img src="/images/icons/comment_16.gif" height="16" width="16" border="0" align="absmiddle">
-                    <a href="/display/CACHE/2005/01/23/OSCache+2.1+Released?showComments=true#comments">0 comments</a>
-        
-
-    </div>
-</div>    
 
                     			    </td>
 		    </tr>

docs/wiki/Installation Guide.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <p>This installation guide shows you how to configure OSCache 2.3 for use inside your JSP pages. It assumes you have <a href="https://oscache.dev.java.net/servlets/ProjectDocumentList" title="Visit page outside Confluence">downloaded the latest version</a>, which requires at least <b>Java 1.4</b> and a <b>Servlet 2.3</b> container (part of J2EE 1.3). Read the <a href="Requirements.html" title="Requirements">requirements</a> for more details.</p>
+				    <p>This installation guide shows you how to configure OSCache 2.3 for use inside your JSP pages. It assumes you have <a href="https://oscache.dev.java.net/servlets/ProjectDocumentList" title="Visit page outside Confluence">downloaded the latest version</a>, which requires at least <b>Java 1.4</b> and a <b>Servlet 2.3</b> container (part of J2EE 1.3). Read the <a href="Requirements.html" title="Requirements">Requirements</a> for more details.</p>
 
 <p>For <em>Java 1.3</em> developers we created a <a href="Legacy Installation Guide.html" title="Legacy Installation Guide">Legacy Installation Guide</a>.</p>
 

docs/wiki/OSCache 2.3.1.html

+<html>
+    <head>
+        <title>OSCache - 
+        OSCache 2.3.1
+         </title>
+	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
+        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+
+    <body>
+	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
+		    <tr>
+			    <td valign="top" class="pagebody">
+				    <h3><a name="OSCache2.3.1-ReleaseNotes"></a>Release Notes</h3>
+
+<p><em>TO BE RELEASED</em></p>
+
+<p>(19th June 2006 - by Lars Torunski)</p>
+
+<h4><a name="OSCache2.3.1-Thismaintenancereleaseof2.3hasoneenhancement%3A"></a>This maintenance release of 2.3 has one enhancement:</h4>
+
+<ul>
+	<li>CacheFilter: Default initialization of the Cache-Control max-age</li>
+</ul>
+
+
+<h4><a name="OSCache2.3.1-Bugfixes%3A"></a>Bug fixes:</h4>
+
+<ul>
+	<li>Cache.flushAll(Date flushDate) won't throw NeedsRefreshException when flush date is not yet reached anymore</li>
+	<li>No NoSuchElementException at Cache.putInCache() anymore</li>
+</ul>
+
+
+<h4><a name="OSCache2.3.1-JIRAIssueList"></a>JIRA Issue List</h4>
+
+<p><a name="jiraissues">
+    <table  width="100%" cellspacing="0" class="grid">
+        <tr>
+            <th colspan="4" style="text-align: left;">
+                                    <a href="/spaces/doexportspace.action?key=CACHE&macro.refresh=true#jiraissues"><img src="/images/icons/refresh_16.png" height="16" width="16" border="0" align="right" title="refresh"/></a>
+                                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10001&fixfor=21630&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
+                <span class="smalltext">(3 issues)</span>
+            </th>
+        </tr>
+        <tr>
+                        <th style="text-align: left;">
+                T                                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                Key                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                Summary                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                                                                                Status                                                                            </th>
+                    </tr>
+                                            <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246">CACHE-246</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-246">java.util.NoSuchElementException during at com.opensymphony.oscache.base.Cache.putInCache()</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+                                    <tr class="rowAlternate">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241">CACHE-241</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-241">Cache.flushAll(Date flushDate) throws NeedsRefreshException when flush date is not yet reached</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+                                    <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240">CACHE-240</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-240">Default initialization of the Cache-Control max-age</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                    </td>
+                            </tr>
+            </table>
+</p>
+
+
+
+
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wiki/Roadmap.html

 
 <p>This page and the <a href="https://oscache.dev.java.net/servlets/ProjectMailingListList" title="Visit page outside Confluence">mailing list</a> are provided for discussion purposes about the roadmap of OSCache and discussing new features and improvements. See also the <a href="http://jira.opensymphony.com/browse/CACHE?report=com.atlassian.jira.plugin.system.project:roadmap-panel" title="Visit page outside Confluence">JIRA - Road Map</a> for more details or vote for issues in <a href="http://jira.opensymphony.com/browse/CACHE?report=com.atlassian.jira.plugin.system.project:popularissues-panel" title="Visit page outside Confluence">JIRA - Popular Issues</a> .</p>
 
+<h3><a name="Roadmap-OSCache2.3.2"></a>OSCache 2.3.2</h3>
+
+<p>Cache group fixes:</p>
+
+<p><a name="jiraissues">
+    <table  width="100%" cellspacing="0" class="grid">
+        <tr>
+            <th colspan="4" style="text-align: left;">
+                                    <a href="/spaces/doexportspace.action?key=CACHE&macro.refresh=true#jiraissues"><img src="/images/icons/refresh_16.png" height="16" width="16" border="0" align="right" title="refresh"/></a>
+                                <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10001&fixfor=21651&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
+                <span class="smalltext">(3 issues)</span>
+            </th>
+        </tr>
+        <tr>
+                        <th style="text-align: left;">
+                T                                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                Key                                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                Summary                                                                                                                                            </th>
+                        <th style="text-align: left;">
+                                                                                                                Status                                                                            </th>
+                    </tr>
+                                            <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-244"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-244">CACHE-244</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-244">Memory leak in OSCache 2.2</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
+                                    </td>
+                            </tr>
+                                    <tr class="rowAlternate">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-188"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-188">CACHE-188</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-188">removeEntry should update group mappings</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
+                                    </td>
+                            </tr>
+                                    <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-181"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-181">CACHE-181</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-181">addGroupMappings leads to inconsistent Memory-Cache</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
+                                    </td>
+                            </tr>
+            </table>
+</p>
+
+
 <h3><a name="Roadmap-OSCache3.0"></a>OSCache 3.0</h3>
 
 <p>The primary goal of this release is to make OSCache more reliable and easier to use and maintain.  </p>
 </ul>
 
 
-<p>Furthermore we discuss a Chain Caching Model internal.</p>
+<p>Furthermore we discuss a <a href="Chain Caching Model.html" title="Chain Caching Model">Chain Caching Model</a> internal.</p>
 
 <p><a name="jiraissues">
     <table  width="100%" cellspacing="0" class="grid">

docs/wiki/index.html

                                                    <td><a href="#index-L">L</a> ... 2</td>
                                                                       <td><a href="#index-M">M</a> ... 0</td>
                                                                       <td><a href="#index-N">N</a> ... 0</td>
-                                                                      <td><a href="#index-O">O</a> ... 28</td>
+                                                                      <td><a href="#index-O">O</a> ... 29</td>
                                                                       <td><a href="#index-P">P</a> ... 0</td>
                                                                       <td><a href="#index-Q">Q</a> ... 0</td>
                                                               </tr><tr>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="CacheFilter Tutorial"/>
                          <a href="/display/CACHE/CacheFilter+Tutorial">CacheFilter Tutorial</a>
         <br />
-             <div class="smalltext" style="margin: 0 0 0 36px">Introduction  OSCache comes with a servlet filter that enables you to transparently cache entire pages of your website, and even binary files. Caching of binary files is extremely useful when they are generated dynamically, e.g. PDF files or images. In addition by using ... </div>
+             <div class="smalltext" style="margin: 0 0 0 36px">Introduction   OSCache comes with a servlet filter that enables you to transparently cache entire pages of your website, and even binary files. Caching of binary files is extremely useful when they are generated dynamically, e.g. PDF files or images. In addition by using ... </div>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Chain Caching Model"/>
                          <a href="/display/CACHE/Chain+Caching+Model">Chain Caching Model</a>
         <br />
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Change Log"/>
                          <a href="/display/CACHE/Change+Log">Change Log</a>
         <br />
-             <div class="smalltext" style="margin: 0 0 0 36px">Release Notes  2006  OSCache 2.3  2005  OSCache 2.2  OSCache 2.2 RC  OSCache 2.1.1  OSCache 2.1  2004  OSCache 2.0.2  2003  OSCache 2.0.1  OSCache 2.0  OSCache 2.0 beta 2  OSCache 2.0 beta ... </div>
+             <div class="smalltext" style="margin: 0 0 0 36px">Release Notes  2006  OSCache 2.3.1  OSCache 2.3  2005  OSCache 2.2  OSCache 2.2 RC  OSCache 2.1.1  OSCache 2.1  2004  OSCache 2.0.2  2003  OSCache 2.0.1  OSCache 2.0  OSCache 2.0 beta 2  OSCache ... </div>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Clustering"/>
                          <a href="/display/CACHE/Clustering">Clustering</a>
         <br />
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Complete Change Log"/>
                          <a href="/display/CACHE/Complete+Change+Log">Complete Change Log</a>
         <br />
-             <div class="smalltext" style="margin: 0 0 0 36px">OSCache 2.3     OSCache 2.2 Final     OSCache 2.2 RC     OSCache 2.1.1     OSCache 2.1     OSCache 2.0.2     OSCache 2.0.1     OSCache 2.0     OSCache 2.0 beta 2     OSCache 2.0 beta 1     OSCache 1.7.5      OSCache 1.7.4 ... </div>
+             <div class="smalltext" style="margin: 0 0 0 36px">OSCache 2.3.1     OSCache 2.3     OSCache 2.2 Final     OSCache 2.2 RC     OSCache 2.1.1     OSCache 2.1     OSCache 2.0.2     OSCache 2.0.1     OSCache 2.0     OSCache 2.0 beta 2     OSCache 2.0 beta 1     OSCache 1.7.5 ... </div>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Configuration"/>
                          <a href="/display/CACHE/Configuration">Configuration</a>
         <br />
                                  <img src="/images/icons/home_16.gif" height="16" width="16" border="0" align="absmiddle" title="Home (Space Home Page)"/>
                          <a href="/display/CACHE/Home">Home</a>
         <br />
-             <div class="smalltext" style="margin: 0 0 0 36px">Welcome to the OSCache wiki.  OSCache is a caching solution that includes a JSP tag library and set of classes to perform fine grained dynamic caching of JSP content, servlet responses or arbitrary objects. It provides both in memory and persistent on disk caches, and can ... </div>
+             <div class="smalltext" style="margin: 0 0 0 36px">Welcome to the OSCache wiki.   OSCache is a caching solution that includes a JSP tag library and set of classes to perform fine grained dynamic caching of JSP content, servlet responses or arbitrary objects. It provides both in memory and persistent on disk caches, and can ... </div>
         </td>
                                       <td><h4 style="margin-top: 0px"><a name="index-I"></a>I</h4>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="Index"/>
                          <a href="/display/CACHE/OSCache+2.3">OSCache 2.3</a>
         <br />
              <div class="smalltext" style="margin: 0 0 0 36px">Release Notes  (6th March 2006 by Lars Torunski)   This release includes additional improvements to the CacheFilter:   CRON expressions to expire content at specific dates and/or times  Pluggable EntryRefreshPolicy  Reduced memory consumption   Disk persistence:   Faster disk persistence  Avoid ... </div>
+                                 <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="OSCache 2.3.1"/>
+                         <a href="/display/CACHE/OSCache+2.3.1">OSCache 2.3.1</a>
+        <br />
+             <div class="smalltext" style="margin: 0 0 0 36px">Release Notes  TO BE RELEASED  (19th June 2006 by Lars Torunski)   This maintenance release of 2.3 has one enhancement:   CacheFilter: Default initialization of the CacheControl maxage    Bug fixes:   Cache.flushAll(Date flushDate) won't throw NeedsRefreshException when flush date ... </div>
                                  <img src="/images/icons/docs_16.gif" height="16" width="16" border="0" align="absmiddle" title="OSCache in the Wild"/>
                          <a href="/display/CACHE/OSCache+in+the+Wild">OSCache in the Wild</a>
         <br />
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.