Anonymous avatar Anonymous committed a14caa2

release 2.3 updates

Comments (0)

Files changed (9)

docs/wiki/CacheFilter Tutorial.html

+<html>
+    <head>
+        <title>OSCache - 
+        CacheFilter Tutorial
+         </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="CacheFilterTutorial-Introduction">Introduction </a></h3>
+
+<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>Besides bugs being fixed in the 2.2 release, major improvements have been made to the CacheFilter in many ways:</p>
+
+<ul>
+	<li>Default initialization of the last modified header which reduces transaction overhead and server load</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>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">Cacheable Content</a></h3>
+
+<div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' 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 />
+<p>Note that the filter will only cache content that has a status of 200 (HttpServletResponse.SC_OK).</p></td></tr></table></div></div>
+
+<h3><a name="CacheFilterTutorial-Configuringthefilter">Configuring the filter</a></h3>
+
+<h4><a name="CacheFilterTutorial-Example1">Example 1</a></h4>
+
+<p>To configure the filter, add something like the following to your <tt>web.xml</tt> file (obviously you will want to set the URL pattern to match only the content you want to cache; this example will cache all JSP pages for 10 minutes in session scope):</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;filter&gt;</span>
+    <span class="code-tag">&lt;filter-name&gt;</span>CacheFilter<span class="code-tag">&lt;/filter-name&gt;</span>
+    <span class="code-tag">&lt;filter-class&gt;</span>com.opensymphony.oscache.web.filter.CacheFilter<span class="code-tag">&lt;/filter-class&gt;</span>
+    <span class="code-tag">&lt;init-param&gt;</span>
+        <span class="code-tag">&lt;param-name&gt;</span>time<span class="code-tag">&lt;/param-name&gt;</span>
+        <span class="code-tag">&lt;param-value&gt;</span>600<span class="code-tag">&lt;/param-value&gt;</span>
+    <span class="code-tag">&lt;/init-param&gt;</span>
+    <span class="code-tag">&lt;init-param&gt;</span>
+        <span class="code-tag">&lt;param-name&gt;</span>scope<span class="code-tag">&lt;/param-name&gt;</span>
+        <span class="code-tag">&lt;param-value&gt;</span>session<span class="code-tag">&lt;/param-value&gt;</span>
+    <span class="code-tag">&lt;/init-param&gt;</span>
+<span class="code-tag">&lt;/filter&gt;</span>
+
+<span class="code-tag">&lt;filter-mapping&gt;</span>
+    <span class="code-tag">&lt;filter-name&gt;</span>CacheFilter<span class="code-tag">&lt;/filter-name&gt;</span>
+    <span class="code-tag">&lt;url-pattern&gt;</span>*.jsp<span class="code-tag">&lt;/url-pattern&gt;</span>
+<span class="code-tag">&lt;/filter-mapping&gt;</span></pre>
+</div></div>
+
+<p>The default duration is one hour and the default scope for the cache is application scope. You can change these settings using <a href="CacheFilter.html" title="CacheFilter">initialization parameters</a>.</p>
+
+<h4><a name="CacheFilterTutorial-Example2">Example 2</a></h4>
+
+<p>The initialization of the last modified header based on the current time reduces transaction overhead and server load, because the browser can ask the server if the cached content in the browser cache was changed on the server since the last request. If the content wasn't changed , the server will response with the status 304 (not modified).</p>
+
+<p>Furthermore if the <a href="CacheFilter.html#CacheFilter-expires" title="expires on CacheFilter">expires parameter</a> is the set to <em>time</em>, the server will send the date and time after which the content is considered stale. Then common browsers won't request the server anymore until the cached content is considered stale. The example will cache the content for one hour by default and the expires date and time will be calculated based on the creation time and the <em>time</em> parameter (default is one hour).</p>
+
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;filter&gt;</span>
+    <span class="code-tag">&lt;filter-name&gt;</span>CacheFilterStaticContent<span class="code-tag">&lt;/filter-name&gt;</span>
+    <span class="code-tag">&lt;filter-class&gt;</span>com.opensymphony.oscache.web.filter.CacheFilter<span class="code-tag">&lt;/filter-class&gt;</span>
+    <span class="code-tag">&lt;init-param&gt;</span>
+        <span class="code-tag">&lt;param-name&gt;</span>expires<span class="code-tag">&lt;/param-name&gt;</span>
+        <span class="code-tag">&lt;param-value&gt;</span>time<span class="code-tag">&lt;/param-value&gt;</span>
+    <span class="code-tag">&lt;/init-param&gt;</span>
+<span class="code-tag">&lt;/filter&gt;</span>
+
+<span class="code-tag">&lt;filter-mapping&gt;</span>
+    <span class="code-tag">&lt;filter-name&gt;</span>CacheFilterStaticContent<span class="code-tag">&lt;/filter-name&gt;</span>
+    <span class="code-tag">&lt;url-pattern&gt;</span>*.jsp<span class="code-tag">&lt;/url-pattern&gt;</span>
+<span class="code-tag">&lt;/filter-mapping&gt;</span></pre>
+</div></div>
+
+                    			    </td>
+		    </tr>
+	    </table>
+    </body>
+</html>

docs/wiki/CacheFilter.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <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><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.</p>
 
-<p>Besides bugs being fixed in the upcoming 2.2 release, major improvements have been made to the CacheFilter in many ways:</p>
-
-<ul>
-	<li>Default initialization of the last modified header which reduces transaction overhead and server load</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>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>A <a href="CacheFilter Tutorial.html" title="CacheFilter Tutorial">tutorial</a> describes how to cache entire pages of your website and what performance improvements can be done with the CacheFilter.</p>
 
 <h4><a name="CacheFilter-CacheableContent">Cacheable Content</a></h4>
 
 </div></div>
 <p>The default duration is one hour and the default scope for the cache is application scope. You can change these settings using initialization parameters. </p>
 
-<h4><a name="CacheFilter-Parameter%3Atime">Parameter: time</a></h4>
+<h4><a name="CacheFilter-Parameter%3Atime"><a name="CacheFilter-time"></a>Parameter: time</a></h4>
 
-<p>The time parameter sets the cache time (in seconds) for the content.</p>
+<p>The time parameter sets the cache time (in seconds) for the content. The default cache time is one hour.</p>
 
-<h4><a name="CacheFilter-Parameter%3Ascope">Parameter: scope</a></h4>
+<p>Specifying <em>-1</em> (indefinite expiry) as the cache time will ensure a content does not become stale until it is either explicitly flushed or the expires refresh policy causes the entry to expire.</p>
+
+<h4><a name="CacheFilter-Parameter%3Ascope"><a name="CacheFilter-scope"></a>Parameter: scope</a></h4>
 
 <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%3Afragment%28NEW%21Since2.2%29">Parameter: fragment (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3Acron%28Newinupcomingrelease2.3%29"><a name="CacheFilter-cron"></a>Parameter: cron (New in upcoming release 2.3)</a></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>
+
+<h4><a name="CacheFilter-Parameter%3Afragment%28NEW%21Since2.2%29"><a name="CacheFilter-fragment"></a>Parameter: fragment (NEW! Since 2.2)</a></h4>
 
 <p>Defines if the filter handles fragments of a page. Acceptable values are <em>auto</em> for auto detect, <em>no</em> for false and <em>yes</em> for true. The default value is auto detect which checks the <em>javax.servlet.include.request_uri</em> request attribute. Fragments of a page shouldn't be gzipped or evaluate the last modified header.</p>
 
-<h4><a name="CacheFilter-Parameter%3Anocache%28NEW%21Since2.2%29">Parameter: nocache (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3Anocache%28NEW%21Since2.2%29"><a name="CacheFilter-nocache"></a>Parameter: nocache (NEW! Since 2.2)</a></h4>
 
 <p>Defines which objects shouldn't be cached. Acceptable values are <em>off</em> (default) for caching all objects and <em>sessionIdInURL</em> for don't cache page if the session id is contained in the URL.</p>
 
-<h4><a name="CacheFilter-Parameter%3AlastModified%28NEW%21Since2.2%29">Parameter: lastModified (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3AlastModified%28NEW%21Since2.2%29"><a name="CacheFilter-lastModified"></a>Parameter: lastModified (NEW! Since 2.2)</a></h4>
 
-<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> the last modified information will be set based on current time.</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%3Aexpires%28NEW%21Since2.2%29">Parameter: expires (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3Aexpires%28NEW%21Since2.2%29"><a name="CacheFilter-expires"></a>Parameter: expires (NEW! Since 2.2)</a></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.</p>
 
 <div class="information-block" align='center'><div class='informationMacroPadding'><table cellpadding='5' width='85%' cellspacing='0' class='noteMacro' border='0'><tr><td width='16' 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 />
 <p>The last parameter time would force the CacheFilter to send the expires header, because the value is set always. The developer must consider that some browsers evaluate the value and will use the cached content in the browsers cache, until the content is expired. Consequently a flush of the cache in the web application won't update a page in the browser cache. Hence different users may see see a different status of page.</p></td></tr></table></div></div>
 
-<h4><a name="CacheFilter-Parameter%3AICacheKeyProvider%28NEW%21Since2.2%29">Parameter: ICacheKeyProvider (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3AICacheKeyProvider%28NEW%21Since2.2%29"><a name="CacheFilter-ICacheKeyProvider"></a>Parameter: ICacheKeyProvider (NEW! Since 2.2)</a></h4>
 
 <p>Specify a class which implements the interface <tt>ICacheKeyProvider</tt>. A developer can implement a class which provides cache keys based on the request, the servlect cache administrator and the cache.</p>
 
-<h4><a name="CacheFilter-Parameter%3AICacheGroupsProvider%28NEW%21Since2.2%29">Parameter: ICacheGroupsProvider (NEW! Since 2.2)</a></h4>
+<h4><a name="CacheFilter-Parameter%3AICacheGroupsProvider%28NEW%21Since2.2%29"><a name="CacheFilter-ICacheGroupsProvider"></a>Parameter: ICacheGroupsProvider (NEW! Since 2.2)</a></h4>
 
 <p>Specify a class which implements the interface <tt>ICacheGroupsProvider</tt>. A developer can implement a class which provides cache groups based on the request, the servlect cache administrator and the cache.</p>
 

docs/wiki/Documentation.html

 <h3><a name="Documentation-3.Tutorial">3. Tutorial</a></h3>
 <ol>
 	<li><a href="Installation Guide.html" title="Installation Guide">Installation Guide</a> - How to install OSCache and where to get it.</li>
-	<li><a href="CacheFilter.html" title="CacheFilter">Caching Content with the CacheFilter</a> - How to configure OSCache to cache entire servlet responses.</li>
+	<li><a href="CacheFilter Tutorial.html" title="CacheFilter Tutorial">CacheFilter Tutorial</a> - How to cache entire pages of your website.</li>
 	<li><a href="Clustering.html" title="Clustering">Clustering OSCache</a> - How to use OSCache in a cluster.</li>
-	<li><a href="Statistics.html" title="Statistics">Statistics</a> - How to implement a cache listener to provide cache hits and misses information</li>
-	<li><a href="API Usage.html" title="API Usage">API Usage</a> - How to use the GeneralCacheAdministrator</li>
-	<li>Taking the load off: <a href="http://www.theserverside.com/articles/article.tss?l=OSCacheHelpsDatabases" title="Visit page outside Confluence">OSCache helps database cope</a> by Andres March</li>
-	<li><a href="CVS and Compiling OSCache.html" title="CVS and Compiling OSCache">CVS and Compiling OSCache</a> - How to access CVS and compile OSCache</li>
+	<li><a href="Statistics.html" title="Statistics">Statistics</a> - How to implement a cache listener to provide cache hits and misses information.</li>
+	<li><a href="API Usage.html" title="API Usage">API Usage</a> - How to use the GeneralCacheAdministrator.</li>
+	<li>Taking the load off: <a href="http://www.theserverside.com/articles/article.tss?l=OSCacheHelpsDatabases" title="Visit page outside Confluence">OSCache helps database cope</a> by Andres March.</li>
+	<li><a href="CVS and Compiling OSCache.html" title="CVS and Compiling OSCache">CVS and Compiling OSCache</a> - How to access CVS and compile OSCache.</li>
 </ol>
 
 
 <ol>
 	<li><a href="Configuration.html" title="Configuration">Configuration</a> - Configuration options for OSCache.</li>
 	<li><a href="JSP Tags.html" title="JSP Tags">JSP Tags</a> - Detailed documentation on OSCache's tags and how to use them.</li>
+	<li><a href="CacheFilter.html" title="CacheFilter">CacheFilter Configuration</a> - How to configure OSCache to cache entire servlet responses.</li>
 	<li><a href="Cron Expressions.html" title="Cron Expressions">Cron Expressions</a> - How to use the cron expression syntax to expire content.</li>
 	<li><a href="http://www.opensymphony.com/oscache/api/" title="Visit page outside Confluence">JavaDoc API</a> - The OSCache API documentation in JavaDoc format.</li>
 </ol>

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 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 (included in J2EE 1.3).</p>
+				    <p>This installation guide shows you how to configure OSCache 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> and/or <em>Servlet 2.2</em> container (included in J2EE 1.2) developers we created a <a href="Legacy Installation Guide.html" title="Legacy Installation Guide">Legacy Installation Guide</a>.</p>
 

docs/wiki/JSP Tags.html

 	<li><a href="#JSPTags-cache" title="cache on JSP Tags">cache</a> - The main caching tag</li>
 	<li><a href="#JSPTags-usecached" title="usecached on JSP Tags">usecached</a> - A nested tag to force using a cached version.</li>
 	<li><a href="#JSPTags-flush" title="flush on JSP Tags">flush</a> - To flush caches programmatically.</li>
-	<li><a href="#JSPTags-addgroup" title="addgroup on JSP Tags">addgroup</a> - This tag must be nested inside &lt;cache:cache/&gt;. It allows groups to be dynamically added to a cached block.</li>
+	<li><a href="#JSPTags-addgroup" title="addgroup on JSP Tags">addgroup</a> - It allows a single group name to be dynamically added to a cached block. This tag must be nested inside &lt;cache:cache/&gt;.</li>
+	<li><a href="#JSPTags-addgroups" title="addgroups on JSP Tags">addgroups</a> - It allows a comma-delimited list of group names to be dynamically added to a cached block. This tag must be nested inside &lt;cache:cache/&gt;.</li>
 </ul>
 
 
 
 <h4><a name="JSPTags-Description%3A">Description:</a></h4>
 
-<p>    This tag must be nested inside a &lt;cache:cache/&gt; tag. It allows groups to be dynamically added to a cached block. It is useful when the group(s) a cached block should belong to are unknown until the block is actually rendered. As each group is 'discovered', this tag can be used to add the group to the block's group list.</p>
+<p>    This tag must be nested inside a &lt;cache:cache/&gt; tag. It allows a single group name to be dynamically added to a cached block. It is useful when the group a cached block should belong to are unknown until the block is actually rendered. As each group is 'discovered', this tag can be used to add the group to the block's group list.</p>
 
 <h4><a name="JSPTags-Attributes%3A">Attributes:</a></h4>
 
     <span class="code-tag">&lt;/cache:cache&gt;</span></pre>
 </div></div>
 
+<h3><a name="JSPTags-%3Caddgroups%2F%3E%28Newinupcomingrelease2.3%29"><a name="JSPTags-addgroups"></a>&lt;addgroups /&gt; (New in upcoming release 2.3)</a></h3>
+
+<h4><a name="JSPTags-Description%3A">Description:</a></h4>
+
+<p>    This tag must be nested inside a &lt;cache:cache/&gt; tag. It allows a comma-delimited list of groups names to be dynamically added to a cached block with a single tag statement. As a group list is 'discovered', this tag can be used to add the groups to the block's group list.</p>
+
+<h4><a name="JSPTags-Attributes%3A">Attributes:</a></h4>
+
+<ul>
+	<li><b>groups</b> - <font color="red">req</font> - The comma-delimited list of groups names to add the enclosing cache block to.</li>
+</ul>
+
+
+<div class="code"><div class="codeHeader"><b>Example</b></div><div class="codeContent">
+<pre class="code-xml">This will add the cache block with the key 'test1' to groups 'group1' and 'group2'.
+
+    <span class="code-tag">&lt;cache:cache key=<span class="code-quote">"test1"</span>&gt;</span>
+         ... some jsp content ...
+         <span class="code-tag">&lt;cache:addgroups groups=<span class="code-quote">"group1,group2"</span> /&gt;</span>
+         ... some jsp content ...
+    <span class="code-tag">&lt;/cache:cache&gt;</span></pre>
+</div></div>
+
                     			    </td>
 		    </tr>
 	    </table>

docs/wiki/Legacy Installation Guide.html

 	<li>Extract the downloaded file to a directory of your choosing.</li>
 	<li>Put the oscache.jar file in the <tt>/WEB-INF/lib</tt> directory</li>
 	<li>Make sure <tt>commons-logging.jar</tt> is on your classpath (normally this also means putting it in <tt>/WEB-INF/lib</tt>).</li>
-	<li>If you are using JDK 1.3.x it is optional, but strongly recommended, to add <tt>commons-collections.jar</tt> to your classpath. OSCache will use this to provide a significant speed increase. (Note that with JDK 1.4 and higher, <tt>commons-collections.jar</tt> will not be used - the 1.4 implementation is faster still).</li>
+	<li>If you are using Java 1.3 it is optional, but strongly recommended, to add <tt>commons-collections.jar</tt> to your classpath. OSCache will use this to provide a significant speed increase. (Note that with Java 1.4 and higher, <tt>commons-collections.jar</tt> will not be used - the 1.4 implementation is faster still).</li>
 	<li>Put the <tt>/etc/oscache.properties</tt> file in the <tt>/WEB-INF/classes</tt> directory and edit the properties contained within it (for example if you want disk caching, configure the persistence listener and edit the <tt>cache.path</tt> property to point to where you want the cache files stored on disk). See the <a href="configuration.html" title="Configuration">Configuration Guide</a> for further details on what options are available.</li>
 	<li>Remember to escape any \ characters in Windows paths - ie if you want cache files to go in c:\cachedir, the <tt>cache.path</tt> property should be set to c:\ \cachedir.</li>
 	<li>Put the <tt>/etc/oscache.tld</tt> file in your <tt>/WEB-INF/classes</tt> directory.</li>

docs/wiki/Requirements.html

 	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
 		    <tr>
 			    <td valign="top" class="pagebody">
-				    <p>OSCache can be used directly to provide caching for any Java application. Using the OSCache tag library requires <b>Servlet 2.3</b> and <b>JSP 1.2</b> support (included in J2EE 1.3) to run properly. There is no dependency on a servlet container if the OSCache API is used directly.</p>
+				    <p>OSCache can be used directly to provide caching for any Java application. Using the <a href="JSP Tags.html" title="JSP Tags">OSCache tag library</a> requires <b>Servlet 2.3</b> and <b>JSP 1.2</b> support (included in J2EE 1.3) to run properly. There is no dependency on a servlet container if the <a href="API Usage.html" title="API Usage">OSCache API</a> is used directly.</p>
 
 <p>So far OSCache has been tested in the following application servers and web containers:</p>
 
 
 <p>This does not mean it will not run on other servers! It should run on any specification compliant container. If you have run OSCache successfully in other servers, please let us know and we'll add to this list.</p>
 
-<p>The <a href="CacheFilter.html" title="CacheFilter">Caching Filter</a> (for caching entire pages, and binary content such as GIFs and PDFs) requires Servlet 2.3 support. It is known to work on Orion, WebLogic and Tomcat 4.0.</p>
+<p>The <a href="CacheFilter.html" title="CacheFilter">Caching Filter</a> (for caching entire pages, and binary content such as GIFs and PDFs) requires Servlet 2.3 support. It is known to work on Orion, BEA WebLogic Server and Tomcat 4.0.</p>
 
-<p>OSCache is compatible with Java 1.3 and higher. For best performance, Java 1.4.x or higher should be used.</p>
+<p>OSCache requires at least <b>Java 1.4</b> for the <a href="Installation Guide.html" title="Installation Guide">installation</a>.</p>
 
 
                     			    </td>

docs/wiki/Roadmap.html

 
 <h3><a name="Roadmap-OSCache2.3">OSCache 2.3</a></h3>
 
-<p>Improvements to CacheFilter and disk persistence :</p>
+<p>The release 2.3 will include additional 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>
+
+
+<p>Disk persistence:</p>
+
+<ul>
+	<li>Faster disk persistence</li>
+	<li>Avoid DiskPersistenceListener deadlocks if process has no rights to delete cache file</li>
+</ul>
+
+
+<p>Further changes are:</p>
+
+<ul>
+	<li>new JSP tag <em>addgroups</em></li>
+	<li>interface to get a list of the cache event listeners</li>
+	<li>commons collection dependency removed</li>
+	<li>Java 1.3 support dropped</li>
+</ul>
+
 
 <p>
     <table  width="100%" cellspacing="0" class="grid">
         <tr>
             <th colspan="4" style="text-align: left;">
                 <a href="http://jira.opensymphony.com/secure/IssueNavigator.jspa?&pid=10001&fixfor=21570&sorter/field=issuekey&sorter/order=DESC&tempMax=25&reset=true&">OpenSymphony JIRA</a>
-                <span class="smalltext">(7 issues)</span>
+                <span class="smalltext">(13 issues)</span>
             </th>
         </tr>
         <tr>
                     </tr>
                                             <tr class="rowNormal">
                                                             <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-230"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-230">CACHE-230</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-230">CacheFilter Tutorial</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-229"><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-229">CACHE-229</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-229">Tomcat 5.5.12 throws IllegalStateException on getId() / fixed Servlet Spec 2.4</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-228"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-228">CACHE-228</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-228">Add CRON expressions to CacheFilter to expire content at specific dates and/or times.</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-227"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-227">CACHE-227</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-227">Remove commons collections from distribution</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
+                                    </td>
+                            </tr>
+                                    <tr class="rowNormal">
+                                                            <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-226"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-226">CACHE-226</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-226">Drop Java 1.3 support</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
+                                    </td>
+                            </tr>
+                                    <tr class="rowAlternate">
+                                                            <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-222"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
                                     </td>
                                 <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-222">Add new JSP tag addGroups</a>
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-217"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-216"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
                                     </td>
                                             <a href="http://jira.opensymphony.com/browse/CACHE-216">Review CacheFilter against Servlet 2.4 spec.</a>
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-214"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-200"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
                                     </td>
                                             <a href="http://jira.opensymphony.com/browse/CACHE-200">add 'getCacheEventListenerList()' to Cache class</a>
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-197"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <a href="http://jira.opensymphony.com/browse/CACHE-197">Speed up disk persistence</a>
                                     </td>
                                 <td nowrap="true">
-                                            <img src="http://jira.opensymphony.com/images/icons/status_resolved.gif" alt="Resolved" border="0" />Resolved
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-140"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <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-136"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-136">CACHE-136</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-136">SequencedHashMap is deprecated in commons collections 3.1</a>
+                                    </td>
+                                <td nowrap="true">
+                                            <img src="http://jira.opensymphony.com/images/icons/status_closed.gif" alt="Closed" border="0" />Closed
+                                    </td>
+                            </tr>
             </table>
 </p>
 
                     </tr>
                                             <tr class="rowNormal">
                                                             <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-225"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
+                                    </td>
+                                <td nowrap="true">
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-225">CACHE-225</a>
+                                    </td>
+                                <td >
+                                            <a href="http://jira.opensymphony.com/browse/CACHE-225">Update to JGroups 2.2.9.1</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-220"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></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">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-172"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-158"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_inprogress.gif" alt="In Progress" border="0" />In Progress
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-151"><img src="http://jira.opensymphony.com/images/icons/bug.gif" alt="Bug" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-149"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
                                     </td>
                             </tr>
-                                    <tr class="rowAlternate">
+                                    <tr class="rowNormal">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-145"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <img src="http://jira.opensymphony.com/images/icons/status_open.gif" alt="Open" border="0" />Open
                                     </td>
                             </tr>
-                                    <tr class="rowNormal">
+                                    <tr class="rowAlternate">
                                                             <td nowrap="true">
                                             <a href="http://jira.opensymphony.com/browse/CACHE-142"><img src="http://jira.opensymphony.com/images/icons/improvement.gif" alt="Improvement" border="0" /></a>
                                     </td>
                                             <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-136"><img src="http://jira.opensymphony.com/images/icons/task.gif" alt="Task" border="0" /></a>
-                                    </td>
-                                <td nowrap="true">
-                                            <a href="http://jira.opensymphony.com/browse/CACHE-136">CACHE-136</a>
-                                    </td>
-                                <td >
-                                            <a href="http://jira.opensymphony.com/browse/CACHE-136">SequencedHashMap is deprecated in commons collections 3.1</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-123"><img src="http://jira.opensymphony.com/images/icons/newfeature.gif" alt="New Feature" border="0" /></a>

docs/wiki/index.html

            <tr>                <td><a href="#index-0-9">0-9</a> ... 0</td>
                                                                       <td><a href="#index-A">A</a> ... 1</td>
                                                                       <td><a href="#index-B">B</a> ... 0</td>
-                                                                      <td><a href="#index-C">C</a> ... 7</td>
+                                                                      <td><a href="#index-C">C</a> ... 8</td>
                                                                       <td><a href="#index-D">D</a> ... 1</td>
                                                                       <td><a href="#index-E">E</a> ... 0</td>
                                                               </tr><tr>
                                   <a href="/display/CACHE/CacheFilter">CacheFilter</a>
     <br />
              <div class="smalltext" style="margin: 0 0 0 36px">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....</div>
+                                  <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....</div>
                                   <a href="/display/CACHE/Change+Log">Change Log</a>
     <br />
              <div class="smalltext" style="margin: 0 0 0 36px">Release Notes  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 1  2002  OSCache 1.7.5  2001  OSCache 1.7.4  OSCache 1.7.3  OSCache 1.7....</div>
                            <td><h4 style="margin-top: 0px"><a name="index-R"></a>R</h4>
                                   <a href="/display/CACHE/Requirements">Requirements</a>
     <br />
-             <div class="smalltext" style="margin: 0 0 0 36px">OSCache can be used directly to provide caching for any Java application. Using the OSCache tag library requires Servlet 2.3 and JSP 1.2 support (included in J2EE 1.3) to run properly....</div>
+             <div class="smalltext" style="margin: 0 0 0 36px">OSCache can be used directly to provide caching for any Java application. Using the OSCache tag library JSP Tags requires Servlet 2.3 and JSP 1.2 support (included in J2EE 1.3) to run properly....</div>
                                   <a href="/display/CACHE/Roadmap">Roadmap</a>
     <br />
              <div class="smalltext" style="margin: 0 0 0 36px">Scope  This page and the mailing list https://oscache.dev.java.net/servlets/ProjectMailingListList are provided for discussion purposes about the roadmap of OSCache and discussing new features and improvements. See also the JIRA Road Map</div>
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.