From bd8f23d7d66279d1659db0fa075ebca59235b2fc Mon Sep 17 00:00:00 2001
From: "Erik C. Thauvin"
Date: Sun, 21 May 2017 00:05:57 -0700
Subject: [PATCH] Initial import from
https://bitbucket.org/opensymphony/oscache/
---
.cvsignore | 9 +
.gitignore | 38 +
.hg_archival.txt | 6 +
.hgtags | 22 +
LICENSE.txt | 50 +
build.xml | 390 +++
docs/api.css | 93 +
docs/index.html | 38 +
docs/meta.xml | 220 ++
docs/navpanel.jsp | 41 +
docs/wiki/7147/CacheChainModel_v3.jpg | Bin 0 -> 77694 bytes
docs/wiki/API Usage.html | 76 +
docs/wiki/CacheFilter Tutorial.html | 180 +
docs/wiki/CacheFilter.html | 118 +
docs/wiki/Chain Caching Model.html | 127 +
.../CacheChainModel_v1.pdf | Bin 0 -> 6285 bytes
.../CacheChainModel_v3.jpg | Bin 0 -> 77694 bytes
.../cache sequences.pdf | Bin 0 -> 77990 bytes
.../oscache.fpr.gz | Bin 0 -> 6557 bytes
docs/wiki/Change Log.html | 122 +
docs/wiki/Clustering.html | 79 +
docs/wiki/Complete Change Log.html | 2959 +++++++++++++++++
docs/wiki/Configuration.html | 134 +
docs/wiki/Cron Expressions.html | 85 +
docs/wiki/Documentation.html | 81 +
docs/wiki/FAQ.html | 174 +
docs/wiki/Feature List.html | 133 +
docs/wiki/Hibernate 2.1 Cache Adapter.html | 119 +
docs/wiki/Hibernate 2.1 Cache Provider.html | 96 +
...rnate 2.1 and pre OSCache 2.4 support.html | 68 +
docs/wiki/Hibernate 3 Cache Adaptor.html | 146 +
docs/wiki/Hibernate 3 Cache Provider.html | 94 +
docs/wiki/Hibernate.html | 144 +
docs/wiki/Home.html | 72 +
docs/wiki/Installation Guide.html | 145 +
docs/wiki/JMX Monitoring.html | 68 +
docs/wiki/JSP Tags.html | 230 ++
docs/wiki/License.html | 20 +
docs/wiki/OSCache 1.0 beta 0.html | 29 +
docs/wiki/OSCache 1.0 beta 1.html | 30 +
docs/wiki/OSCache 1.0 beta 2.html | 29 +
docs/wiki/OSCache 1.1.html | 31 +
docs/wiki/OSCache 1.2.1.html | 29 +
docs/wiki/OSCache 1.2.5.html | 28 +
docs/wiki/OSCache 1.2.html | 27 +
docs/wiki/OSCache 1.3.html | 30 +
docs/wiki/OSCache 1.5.html | 34 +
docs/wiki/OSCache 1.6.1.html | 32 +
docs/wiki/OSCache 1.6.html | 31 +
docs/wiki/OSCache 1.7.0.html | 56 +
docs/wiki/OSCache 1.7.1.html | 38 +
docs/wiki/OSCache 1.7.2.html | 30 +
docs/wiki/OSCache 1.7.3.html | 29 +
docs/wiki/OSCache 1.7.4.html | 28 +
docs/wiki/OSCache 1.7.5.html | 28 +
docs/wiki/OSCache 2.0 beta 1.html | 96 +
docs/wiki/OSCache 2.0 beta 2.html | 44 +
docs/wiki/OSCache 2.0.1.html | 46 +
docs/wiki/OSCache 2.0.2.html | 41 +
docs/wiki/OSCache 2.0.html | 41 +
docs/wiki/OSCache 2.1.1.html | 289 ++
docs/wiki/OSCache 2.1.html | 312 ++
docs/wiki/OSCache 2.2 RC.html | 368 ++
docs/wiki/OSCache 2.2.html | 226 ++
docs/wiki/OSCache 2.3.1.html | 107 +
docs/wiki/OSCache 2.3.2.html | 104 +
docs/wiki/OSCache 2.3.html | 270 ++
docs/wiki/OSCache 2.4.1.html | 97 +
docs/wiki/OSCache 2.4.html | 496 +++
docs/wiki/OSCache in the Wild.html | 37 +
docs/wiki/Requirements.html | 41 +
docs/wiki/Roadmap.html | 372 +++
docs/wiki/SVN and Compiling OSCache.html | 37 +
docs/wiki/Spring.html | 60 +
docs/wiki/Statistics.html | 249 ++
.../StatisticListenerImpl.java | 222 ++
docs/wiki/What is OSCache.html | 55 +
docs/wiki/border/border_bottom.gif | Bin 0 -> 117 bytes
docs/wiki/border/spacer.gif | Bin 0 -> 43 bytes
docs/wiki/icons/blogentry_16.gif | Bin 0 -> 268 bytes
docs/wiki/icons/bullet_blue.gif | Bin 0 -> 60 bytes
docs/wiki/icons/comment_16.gif | Bin 0 -> 178 bytes
docs/wiki/icons/emoticons/add.gif | Bin 0 -> 599 bytes
docs/wiki/icons/emoticons/biggrin.gif | Bin 0 -> 696 bytes
docs/wiki/icons/emoticons/check.gif | Bin 0 -> 604 bytes
docs/wiki/icons/emoticons/error.gif | Bin 0 -> 633 bytes
docs/wiki/icons/emoticons/forbidden.gif | Bin 0 -> 613 bytes
docs/wiki/icons/emoticons/help_16.gif | Bin 0 -> 634 bytes
docs/wiki/icons/emoticons/information.gif | Bin 0 -> 1005 bytes
docs/wiki/icons/emoticons/lightbulb.gif | Bin 0 -> 350 bytes
docs/wiki/icons/emoticons/lightbulb_on.gif | Bin 0 -> 551 bytes
docs/wiki/icons/emoticons/sad.gif | Bin 0 -> 698 bytes
docs/wiki/icons/emoticons/smile.gif | Bin 0 -> 699 bytes
docs/wiki/icons/emoticons/star_blue.gif | Bin 0 -> 569 bytes
docs/wiki/icons/emoticons/star_green.gif | Bin 0 -> 569 bytes
docs/wiki/icons/emoticons/star_red.gif | Bin 0 -> 567 bytes
docs/wiki/icons/emoticons/star_yellow.gif | Bin 0 -> 567 bytes
docs/wiki/icons/emoticons/thumbs_down.gif | Bin 0 -> 283 bytes
docs/wiki/icons/emoticons/thumbs_up.gif | Bin 0 -> 280 bytes
docs/wiki/icons/emoticons/tongue.gif | Bin 0 -> 698 bytes
docs/wiki/icons/emoticons/warning.gif | Bin 0 -> 569 bytes
docs/wiki/icons/emoticons/wink.gif | Bin 0 -> 698 bytes
docs/wiki/icons/home_16.gif | Bin 0 -> 594 bytes
docs/wiki/icons/linkext7.gif | Bin 0 -> 166 bytes
docs/wiki/icons/mail_16.gif | Bin 0 -> 381 bytes
docs/wiki/icons/mail_small.gif | Bin 0 -> 202 bytes
docs/wiki/icons/user_12.gif | Bin 0 -> 528 bytes
docs/wiki/icons/user_16.gif | Bin 0 -> 1008 bytes
docs/wiki/index.html | 733 ++++
docs/wiki/navpanel.jsp | 1 +
docs/wiki/styles/site.css | 1511 +++++++++
ivy.xml | 51 +
ivyconf.properties | 2 +
ivyconf.xml | 36 +
lib/.cvsignore | 1 +
pom.xml | 312 ++
readme.txt | 62 +
src/etc/META-INF/taglib.tld | 152 +
src/etc/findBugsExcludeFilter.xml | 5 +
src/etc/jalopy.xml | 378 +++
src/etc/oscache.properties | 140 +
.../base/AbstractCacheAdministrator.java | 411 +++
.../com/opensymphony/oscache/base/Cache.java | 1014 ++++++
.../opensymphony/oscache/base/CacheEntry.java | 311 ++
.../com/opensymphony/oscache/base/Config.java | 189 ++
.../oscache/base/EntryRefreshPolicy.java | 31 +
.../oscache/base/EntryUpdateState.java | 157 +
.../oscache/base/FinalizationException.java | 23 +
.../oscache/base/InitializationException.java | 23 +
.../oscache/base/LifecycleAware.java | 42 +
.../oscache/base/NeedsRefreshException.java | 51 +
.../AbstractConcurrentReadCache.java | 2161 ++++++++++++
.../oscache/base/algorithm/FIFOCache.java | 92 +
.../oscache/base/algorithm/LRUCache.java | 156 +
.../base/algorithm/UnlimitedCache.java | 71 +
.../oscache/base/algorithm/package.html | 37 +
.../oscache/base/events/CacheEntryEvent.java | 76 +
.../base/events/CacheEntryEventListener.java | 55 +
.../base/events/CacheEntryEventType.java | 54 +
.../oscache/base/events/CacheEvent.java | 48 +
.../base/events/CacheEventListener.java | 16 +
.../oscache/base/events/CacheGroupEvent.java | 71 +
.../base/events/CacheMapAccessEvent.java | 71 +
.../events/CacheMapAccessEventListener.java | 21 +
.../base/events/CacheMapAccessEventType.java | 37 +
.../base/events/CachePatternEvent.java | 69 +
.../oscache/base/events/CachewideEvent.java | 59 +
.../base/events/CachewideEventType.java | 26 +
.../oscache/base/events/ScopeEvent.java | 78 +
.../base/events/ScopeEventListener.java | 21 +
.../oscache/base/events/ScopeEventType.java | 33 +
.../oscache/base/events/package.html | 32 +
.../opensymphony/oscache/base/package.html | 31 +
.../CachePersistenceException.java | 33 +
.../base/persistence/PersistenceListener.java | 96 +
.../oscache/base/persistence/package.html | 31 +
.../extra/CacheEntryEventListenerImpl.java | 195 ++
.../CacheMapAccessEventListenerImpl.java | 111 +
.../oscache/extra/ScopeEventListenerImpl.java | 147 +
.../oscache/extra/StatisticListenerImpl.java | 295 ++
.../opensymphony/oscache/extra/package.html | 32 +
.../general/GeneralCacheAdministrator.java | 307 ++
.../opensymphony/oscache/general/package.html | 31 +
.../oscache/hibernate/OSCache.java | 161 +
.../oscache/hibernate/OSCacheProvider.java | 123 +
.../oscache/hibernate/package.html | 31 +
.../AbstractBroadcastingListener.java | 177 +
.../clustersupport/ClusterNotification.java | 86 +
.../JMS10BroadcastingListener.java | 180 +
.../JMSBroadcastingListener.java | 191 ++
.../JavaGroupsBroadcastingListener.java | 204 ++
.../plugins/clustersupport/package.html | 34 +
.../AbstractDiskPersistenceListener.java | 529 +++
.../DiskPersistenceListener.java | 53 +
.../HashDiskPersistenceListener.java | 118 +
.../plugins/diskpersistence/package.html | 31 +
.../oscache/util/ClassLoaderUtil.java | 50 +
.../oscache/util/FastCronParser.java | 1042 ++++++
.../opensymphony/oscache/util/StringUtil.java | 67 +
.../opensymphony/oscache/util/package.html | 33 +
.../oscache/web/CacheContextListener.java | 40 +
.../oscache/web/ServletCache.java | 118 +
.../web/ServletCacheAdministrator.java | 794 +++++
.../oscache/web/WebEntryRefreshPolicy.java | 35 +
.../oscache/web/filter/CacheFilter.java | 823 +++++
.../CacheHttpServletResponseWrapper.java | 439 +++
.../web/filter/ExpiresRefreshPolicy.java | 75 +
.../web/filter/ICacheGroupsProvider.java | 33 +
.../oscache/web/filter/ICacheKeyProvider.java | 33 +
.../oscache/web/filter/ResponseContent.java | 265 ++
.../web/filter/SplitServletOutputStream.java | 94 +
.../oscache/web/filter/package.html | 33 +
.../com/opensymphony/oscache/web/package.html | 31 +
.../oscache/web/tag/CacheTag.java | 824 +++++
.../oscache/web/tag/FlushTag.java | 171 +
.../oscache/web/tag/GroupTag.java | 32 +
.../oscache/web/tag/GroupsTag.java | 33 +
.../oscache/web/tag/UseCachedTag.java | 60 +
.../opensymphony/oscache/web/tag/package.html | 33 +
src/java/overview.html | 6 +
.../base/DummyAlwayRefreshEntryPolicy.java | 30 +
.../base/GroupConcurrencyProblemTestCase.java | 59 +
.../base/TestAbstractCacheAdministrator.java | 95 +
.../opensymphony/oscache/base/TestCache.java | 275 ++
.../oscache/base/TestCacheEntry.java | 136 +
.../oscache/base/TestCompleteBase.java | 63 +
.../oscache/base/TestConcurrency.java | 489 +++
.../oscache/base/TestConcurrency2.java | 480 +++
.../base/algorithm/TestAbstractCache.java | 251 ++
.../base/algorithm/TestCompleteAlgorithm.java | 56 +
.../oscache/base/algorithm/TestFIFOCache.java | 73 +
.../oscache/base/algorithm/TestLRUCache.java | 80 +
.../base/algorithm/TestQueueCache.java | 229 ++
.../base/algorithm/TestUnlimitedCache.java | 92 +
.../base/events/TestCacheEntryEvent.java | 75 +
.../base/events/TestCacheGroupEvent.java | 71 +
.../base/events/TestCacheMapAccessEvent.java | 53 +
.../base/events/TestCachePatternEvent.java | 71 +
.../base/events/TestCachewideEvent.java | 57 +
.../base/events/TestCompleteEvents.java | 58 +
.../oscache/base/events/TestScopeEvent.java | 59 +
.../TestCacheEntryEventListenerImpl.java | 90 +
.../TestCacheMapAccessEventListenerImpl.java | 71 +
.../oscache/extra/TestCompleteExtra.java | 56 +
.../extra/TestScopeEventListenerImpl.java | 62 +
.../extra/TestStatisticListenerImpl.java | 98 +
.../oscache/general/TestCompleteGeneral.java | 54 +
.../oscache/general/TestConcurrent.java | 126 +
.../TestGeneralCacheAdministrator.java | 400 +++
.../BaseTestBroadcastingListener.java | 117 +
.../clustersupport/ListenForClusterTests.java | 115 +
.../TestCompleteClustering.java | 53 +
.../TestJMS10BroadcastingListener.java | 58 +
.../TestJMSBroadcastingListener.java | 58 +
.../TestJavaGroupsBroadcastingListener.java | 52 +
.../TestCompleteDiskPersistence.java | 55 +
.../TestDiskPersistenceListener.java | 223 ++
.../TestHashDiskPersistenceListener.java | 220 ++
.../diskpersistence/TestUnSerializable.java | 89 +
.../oscache/util/TestFastCronParser.java | 314 ++
.../oscache/web/CheckDeployment.java | 46 +
.../oscache/web/TestCompleteWeb.java | 55 +
.../oscache/web/TestLoadCompleteWeb.java | 79 +
.../oscache/web/TestOscacheFilter.java | 215 ++
.../oscache/web/TestOscacheJsp.java | 208 ++
.../oscache/web/TestOscacheServlet.java | 194 ++
src/test/java/oscacheDiskAndMemory.properties | 11 +
src/test/java/oscacheDiskOnly.properties | 8 +
src/test/java/oscacheDiskOnlyHash.properties | 8 +
.../oscacheMemoryAndOverflowToDisk.properties | 11 +
src/test/java/oscacheMemoryOnly.properties | 8 +
.../oscache/web/OscacheServlet.java | 130 +
...chefilter-disableCacheOnMethods.properties | 8 +
src/webapp/WEB-INF/classes/oscache.properties | 140 +
src/webapp/WEB-INF/web.xml | 60 +
src/webapp/cachetest.jsp | 65 +
src/webapp/cronTest.jsp | 172 +
src/webapp/filter/filterETagTest.jsp | 17 +
src/webapp/filter/filterTest.jsp | 14 +
.../filterTestDisableCacheOnMethods.jsp | 23 +
src/webapp/groupTest.jsp | 42 +
src/webapp/index.html | 21 +
src/webapp/oscache.txt | 1 +
src/webapp/oscacheTest.jsp | 52 +
src/webapp/oscacheTestMultipleTagNoKey.jsp | 265 ++
src/webapp/silentTest.jsp | 26 +
www/index.html | 6 +
www/project_tools.html | 23 +
268 files changed, 34908 insertions(+)
create mode 100644 .cvsignore
create mode 100644 .gitignore
create mode 100644 .hg_archival.txt
create mode 100644 .hgtags
create mode 100644 LICENSE.txt
create mode 100644 build.xml
create mode 100644 docs/api.css
create mode 100644 docs/index.html
create mode 100644 docs/meta.xml
create mode 100644 docs/navpanel.jsp
create mode 100644 docs/wiki/7147/CacheChainModel_v3.jpg
create mode 100644 docs/wiki/API Usage.html
create mode 100644 docs/wiki/CacheFilter Tutorial.html
create mode 100644 docs/wiki/CacheFilter.html
create mode 100644 docs/wiki/Chain Caching Model.html
create mode 100644 docs/wiki/Chain Caching Model_attachments/CacheChainModel_v1.pdf
create mode 100644 docs/wiki/Chain Caching Model_attachments/CacheChainModel_v3.jpg
create mode 100644 docs/wiki/Chain Caching Model_attachments/cache sequences.pdf
create mode 100644 docs/wiki/Chain Caching Model_attachments/oscache.fpr.gz
create mode 100644 docs/wiki/Change Log.html
create mode 100644 docs/wiki/Clustering.html
create mode 100644 docs/wiki/Complete Change Log.html
create mode 100644 docs/wiki/Configuration.html
create mode 100644 docs/wiki/Cron Expressions.html
create mode 100644 docs/wiki/Documentation.html
create mode 100644 docs/wiki/FAQ.html
create mode 100644 docs/wiki/Feature List.html
create mode 100644 docs/wiki/Hibernate 2.1 Cache Adapter.html
create mode 100644 docs/wiki/Hibernate 2.1 Cache Provider.html
create mode 100644 docs/wiki/Hibernate 2.1 and pre OSCache 2.4 support.html
create mode 100644 docs/wiki/Hibernate 3 Cache Adaptor.html
create mode 100644 docs/wiki/Hibernate 3 Cache Provider.html
create mode 100644 docs/wiki/Hibernate.html
create mode 100644 docs/wiki/Home.html
create mode 100644 docs/wiki/Installation Guide.html
create mode 100644 docs/wiki/JMX Monitoring.html
create mode 100644 docs/wiki/JSP Tags.html
create mode 100644 docs/wiki/License.html
create mode 100644 docs/wiki/OSCache 1.0 beta 0.html
create mode 100644 docs/wiki/OSCache 1.0 beta 1.html
create mode 100644 docs/wiki/OSCache 1.0 beta 2.html
create mode 100644 docs/wiki/OSCache 1.1.html
create mode 100644 docs/wiki/OSCache 1.2.1.html
create mode 100644 docs/wiki/OSCache 1.2.5.html
create mode 100644 docs/wiki/OSCache 1.2.html
create mode 100644 docs/wiki/OSCache 1.3.html
create mode 100644 docs/wiki/OSCache 1.5.html
create mode 100644 docs/wiki/OSCache 1.6.1.html
create mode 100644 docs/wiki/OSCache 1.6.html
create mode 100644 docs/wiki/OSCache 1.7.0.html
create mode 100644 docs/wiki/OSCache 1.7.1.html
create mode 100644 docs/wiki/OSCache 1.7.2.html
create mode 100644 docs/wiki/OSCache 1.7.3.html
create mode 100644 docs/wiki/OSCache 1.7.4.html
create mode 100644 docs/wiki/OSCache 1.7.5.html
create mode 100644 docs/wiki/OSCache 2.0 beta 1.html
create mode 100644 docs/wiki/OSCache 2.0 beta 2.html
create mode 100644 docs/wiki/OSCache 2.0.1.html
create mode 100644 docs/wiki/OSCache 2.0.2.html
create mode 100644 docs/wiki/OSCache 2.0.html
create mode 100644 docs/wiki/OSCache 2.1.1.html
create mode 100644 docs/wiki/OSCache 2.1.html
create mode 100644 docs/wiki/OSCache 2.2 RC.html
create mode 100644 docs/wiki/OSCache 2.2.html
create mode 100644 docs/wiki/OSCache 2.3.1.html
create mode 100644 docs/wiki/OSCache 2.3.2.html
create mode 100644 docs/wiki/OSCache 2.3.html
create mode 100644 docs/wiki/OSCache 2.4.1.html
create mode 100644 docs/wiki/OSCache 2.4.html
create mode 100644 docs/wiki/OSCache in the Wild.html
create mode 100644 docs/wiki/Requirements.html
create mode 100644 docs/wiki/Roadmap.html
create mode 100644 docs/wiki/SVN and Compiling OSCache.html
create mode 100644 docs/wiki/Spring.html
create mode 100644 docs/wiki/Statistics.html
create mode 100644 docs/wiki/Statistics_attachments/StatisticListenerImpl.java
create mode 100644 docs/wiki/What is OSCache.html
create mode 100644 docs/wiki/border/border_bottom.gif
create mode 100644 docs/wiki/border/spacer.gif
create mode 100644 docs/wiki/icons/blogentry_16.gif
create mode 100644 docs/wiki/icons/bullet_blue.gif
create mode 100644 docs/wiki/icons/comment_16.gif
create mode 100644 docs/wiki/icons/emoticons/add.gif
create mode 100644 docs/wiki/icons/emoticons/biggrin.gif
create mode 100644 docs/wiki/icons/emoticons/check.gif
create mode 100644 docs/wiki/icons/emoticons/error.gif
create mode 100644 docs/wiki/icons/emoticons/forbidden.gif
create mode 100644 docs/wiki/icons/emoticons/help_16.gif
create mode 100644 docs/wiki/icons/emoticons/information.gif
create mode 100644 docs/wiki/icons/emoticons/lightbulb.gif
create mode 100644 docs/wiki/icons/emoticons/lightbulb_on.gif
create mode 100644 docs/wiki/icons/emoticons/sad.gif
create mode 100644 docs/wiki/icons/emoticons/smile.gif
create mode 100644 docs/wiki/icons/emoticons/star_blue.gif
create mode 100644 docs/wiki/icons/emoticons/star_green.gif
create mode 100644 docs/wiki/icons/emoticons/star_red.gif
create mode 100644 docs/wiki/icons/emoticons/star_yellow.gif
create mode 100644 docs/wiki/icons/emoticons/thumbs_down.gif
create mode 100644 docs/wiki/icons/emoticons/thumbs_up.gif
create mode 100644 docs/wiki/icons/emoticons/tongue.gif
create mode 100644 docs/wiki/icons/emoticons/warning.gif
create mode 100644 docs/wiki/icons/emoticons/wink.gif
create mode 100644 docs/wiki/icons/home_16.gif
create mode 100644 docs/wiki/icons/linkext7.gif
create mode 100644 docs/wiki/icons/mail_16.gif
create mode 100644 docs/wiki/icons/mail_small.gif
create mode 100644 docs/wiki/icons/user_12.gif
create mode 100644 docs/wiki/icons/user_16.gif
create mode 100644 docs/wiki/index.html
create mode 100644 docs/wiki/navpanel.jsp
create mode 100644 docs/wiki/styles/site.css
create mode 100644 ivy.xml
create mode 100644 ivyconf.properties
create mode 100644 ivyconf.xml
create mode 100644 lib/.cvsignore
create mode 100644 pom.xml
create mode 100644 readme.txt
create mode 100644 src/etc/META-INF/taglib.tld
create mode 100644 src/etc/findBugsExcludeFilter.xml
create mode 100644 src/etc/jalopy.xml
create mode 100644 src/etc/oscache.properties
create mode 100644 src/java/com/opensymphony/oscache/base/AbstractCacheAdministrator.java
create mode 100644 src/java/com/opensymphony/oscache/base/Cache.java
create mode 100644 src/java/com/opensymphony/oscache/base/CacheEntry.java
create mode 100644 src/java/com/opensymphony/oscache/base/Config.java
create mode 100644 src/java/com/opensymphony/oscache/base/EntryRefreshPolicy.java
create mode 100644 src/java/com/opensymphony/oscache/base/EntryUpdateState.java
create mode 100644 src/java/com/opensymphony/oscache/base/FinalizationException.java
create mode 100644 src/java/com/opensymphony/oscache/base/InitializationException.java
create mode 100644 src/java/com/opensymphony/oscache/base/LifecycleAware.java
create mode 100644 src/java/com/opensymphony/oscache/base/NeedsRefreshException.java
create mode 100644 src/java/com/opensymphony/oscache/base/algorithm/AbstractConcurrentReadCache.java
create mode 100644 src/java/com/opensymphony/oscache/base/algorithm/FIFOCache.java
create mode 100644 src/java/com/opensymphony/oscache/base/algorithm/LRUCache.java
create mode 100644 src/java/com/opensymphony/oscache/base/algorithm/UnlimitedCache.java
create mode 100644 src/java/com/opensymphony/oscache/base/algorithm/package.html
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheEntryEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheEntryEventListener.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheEntryEventType.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheEventListener.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheGroupEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheMapAccessEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheMapAccessEventListener.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CacheMapAccessEventType.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CachePatternEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CachewideEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/CachewideEventType.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/ScopeEvent.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/ScopeEventListener.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/ScopeEventType.java
create mode 100644 src/java/com/opensymphony/oscache/base/events/package.html
create mode 100644 src/java/com/opensymphony/oscache/base/package.html
create mode 100644 src/java/com/opensymphony/oscache/base/persistence/CachePersistenceException.java
create mode 100644 src/java/com/opensymphony/oscache/base/persistence/PersistenceListener.java
create mode 100644 src/java/com/opensymphony/oscache/base/persistence/package.html
create mode 100644 src/java/com/opensymphony/oscache/extra/CacheEntryEventListenerImpl.java
create mode 100644 src/java/com/opensymphony/oscache/extra/CacheMapAccessEventListenerImpl.java
create mode 100644 src/java/com/opensymphony/oscache/extra/ScopeEventListenerImpl.java
create mode 100644 src/java/com/opensymphony/oscache/extra/StatisticListenerImpl.java
create mode 100644 src/java/com/opensymphony/oscache/extra/package.html
create mode 100644 src/java/com/opensymphony/oscache/general/GeneralCacheAdministrator.java
create mode 100644 src/java/com/opensymphony/oscache/general/package.html
create mode 100644 src/java/com/opensymphony/oscache/hibernate/OSCache.java
create mode 100644 src/java/com/opensymphony/oscache/hibernate/OSCacheProvider.java
create mode 100644 src/java/com/opensymphony/oscache/hibernate/package.html
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/AbstractBroadcastingListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/ClusterNotification.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/JMS10BroadcastingListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/JMSBroadcastingListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/JavaGroupsBroadcastingListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/clustersupport/package.html
create mode 100644 src/java/com/opensymphony/oscache/plugins/diskpersistence/AbstractDiskPersistenceListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/diskpersistence/DiskPersistenceListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/diskpersistence/HashDiskPersistenceListener.java
create mode 100644 src/java/com/opensymphony/oscache/plugins/diskpersistence/package.html
create mode 100644 src/java/com/opensymphony/oscache/util/ClassLoaderUtil.java
create mode 100644 src/java/com/opensymphony/oscache/util/FastCronParser.java
create mode 100644 src/java/com/opensymphony/oscache/util/StringUtil.java
create mode 100644 src/java/com/opensymphony/oscache/util/package.html
create mode 100644 src/java/com/opensymphony/oscache/web/CacheContextListener.java
create mode 100644 src/java/com/opensymphony/oscache/web/ServletCache.java
create mode 100644 src/java/com/opensymphony/oscache/web/ServletCacheAdministrator.java
create mode 100644 src/java/com/opensymphony/oscache/web/WebEntryRefreshPolicy.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/CacheFilter.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/CacheHttpServletResponseWrapper.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/ExpiresRefreshPolicy.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/ICacheGroupsProvider.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/ICacheKeyProvider.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/ResponseContent.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/SplitServletOutputStream.java
create mode 100644 src/java/com/opensymphony/oscache/web/filter/package.html
create mode 100644 src/java/com/opensymphony/oscache/web/package.html
create mode 100644 src/java/com/opensymphony/oscache/web/tag/CacheTag.java
create mode 100644 src/java/com/opensymphony/oscache/web/tag/FlushTag.java
create mode 100644 src/java/com/opensymphony/oscache/web/tag/GroupTag.java
create mode 100644 src/java/com/opensymphony/oscache/web/tag/GroupsTag.java
create mode 100644 src/java/com/opensymphony/oscache/web/tag/UseCachedTag.java
create mode 100644 src/java/com/opensymphony/oscache/web/tag/package.html
create mode 100644 src/java/overview.html
create mode 100644 src/test/java/com/opensymphony/oscache/base/DummyAlwayRefreshEntryPolicy.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/GroupConcurrencyProblemTestCase.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestAbstractCacheAdministrator.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestCacheEntry.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestCompleteBase.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestConcurrency.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/TestConcurrency2.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestAbstractCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestCompleteAlgorithm.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestFIFOCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestLRUCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestQueueCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/algorithm/TestUnlimitedCache.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCacheEntryEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCacheGroupEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCacheMapAccessEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCachePatternEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCachewideEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestCompleteEvents.java
create mode 100644 src/test/java/com/opensymphony/oscache/base/events/TestScopeEvent.java
create mode 100644 src/test/java/com/opensymphony/oscache/extra/TestCacheEntryEventListenerImpl.java
create mode 100644 src/test/java/com/opensymphony/oscache/extra/TestCacheMapAccessEventListenerImpl.java
create mode 100644 src/test/java/com/opensymphony/oscache/extra/TestCompleteExtra.java
create mode 100644 src/test/java/com/opensymphony/oscache/extra/TestScopeEventListenerImpl.java
create mode 100644 src/test/java/com/opensymphony/oscache/extra/TestStatisticListenerImpl.java
create mode 100644 src/test/java/com/opensymphony/oscache/general/TestCompleteGeneral.java
create mode 100644 src/test/java/com/opensymphony/oscache/general/TestConcurrent.java
create mode 100644 src/test/java/com/opensymphony/oscache/general/TestGeneralCacheAdministrator.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/BaseTestBroadcastingListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/ListenForClusterTests.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/TestCompleteClustering.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/TestJMS10BroadcastingListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/TestJMSBroadcastingListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/clustersupport/TestJavaGroupsBroadcastingListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/diskpersistence/TestCompleteDiskPersistence.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/diskpersistence/TestDiskPersistenceListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/diskpersistence/TestHashDiskPersistenceListener.java
create mode 100644 src/test/java/com/opensymphony/oscache/plugins/diskpersistence/TestUnSerializable.java
create mode 100644 src/test/java/com/opensymphony/oscache/util/TestFastCronParser.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/CheckDeployment.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/TestCompleteWeb.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/TestLoadCompleteWeb.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/TestOscacheFilter.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/TestOscacheJsp.java
create mode 100644 src/test/java/com/opensymphony/oscache/web/TestOscacheServlet.java
create mode 100644 src/test/java/oscacheDiskAndMemory.properties
create mode 100644 src/test/java/oscacheDiskOnly.properties
create mode 100644 src/test/java/oscacheDiskOnlyHash.properties
create mode 100644 src/test/java/oscacheMemoryAndOverflowToDisk.properties
create mode 100644 src/test/java/oscacheMemoryOnly.properties
create mode 100644 src/webapp/WEB-INF/classes/com/opensymphony/oscache/web/OscacheServlet.java
create mode 100644 src/webapp/WEB-INF/classes/oscache-cachefilter-disableCacheOnMethods.properties
create mode 100644 src/webapp/WEB-INF/classes/oscache.properties
create mode 100644 src/webapp/WEB-INF/web.xml
create mode 100644 src/webapp/cachetest.jsp
create mode 100644 src/webapp/cronTest.jsp
create mode 100644 src/webapp/filter/filterETagTest.jsp
create mode 100644 src/webapp/filter/filterTest.jsp
create mode 100644 src/webapp/filter2/filterTestDisableCacheOnMethods.jsp
create mode 100644 src/webapp/groupTest.jsp
create mode 100644 src/webapp/index.html
create mode 100644 src/webapp/oscache.txt
create mode 100644 src/webapp/oscacheTest.jsp
create mode 100644 src/webapp/oscacheTestMultipleTagNoKey.jsp
create mode 100644 src/webapp/silentTest.jsp
create mode 100644 www/index.html
create mode 100644 www/project_tools.html
diff --git a/.cvsignore b/.cvsignore
new file mode 100644
index 0000000..18b8b59
--- /dev/null
+++ b/.cvsignore
@@ -0,0 +1,9 @@
+build
+build.test
+build.properties
+dist
+*.i*
+.settings
+.fbprefs
+.fbwarnings
+.clover
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5324b2f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,38 @@
+**/.idea/dictionaries
+**/.idea/gradle.xml
+**/.idea/libraries
+**/.idea/tasks.xml
+**/.idea/workspace.xml
+*.i*
+*.iws
+*.sublime-*
+.classpath
+.clover
+.DS_Store
+.fbprefs
+.fbwarnings
+.gradle
+.kobalt
+.nb-gradle
+.project
+.settings
+.settings
+/bin
+/build
+/deploy
+/dist
+/gen
+/gradle.properties
+/local.properties
+/out
+/proguard-project.txt
+/project.properties
+/target
+/test-output
+build
+build.properties
+build.test
+dist
+ehthumbs.db
+kobaltBuild
+Thumbs.db
\ No newline at end of file
diff --git a/.hg_archival.txt b/.hg_archival.txt
new file mode 100644
index 0000000..b849ac4
--- /dev/null
+++ b/.hg_archival.txt
@@ -0,0 +1,6 @@
+repo: cec0503fd7a03d0d505cd298779c9360e537ce20
+node: 0f167fd17c8cbe8bc54ff6af55a23def6a6be315
+branch: default
+latesttag: v2_4_1/trunk
+latesttagdistance: 15
+changessincelatesttag: 15
diff --git a/.hgtags b/.hgtags
new file mode 100644
index 0000000..140e5e1
--- /dev/null
+++ b/.hgtags
@@ -0,0 +1,22 @@
+b7492cd8c07a635a3e68caea9035f5853fd48dc8 v2_0_beta_2
+0f86681123c9655c51f3192d4a50b3fac93900b7 v2_0
+d89751f6dcec297b9a208b7efee4ef4bdd7e595c v2_0_1
+65afa90270ba4e49944e930798fcf8737911b58b v2_0_2
+4895938a47d91229b5de22fdf22709ce7b13213a v2_1
+2507938446fee2869ffc1c48264e9d4075b3fd35 Root_v2_1_1
+ecbbc5adc32fefab262c1d831a51c3f4f8d5b8d7 Root_amarch_sandbox
+1b4d987e855bc02bf08bc2fa2a1108b90c98e9ee v2_2-rc
+bf3f6d64f71f5df293ebfa013436f7cad6c4174a v2_2
+861e6b8461d62713433fbab21ba419ec0819c65c v2_3
+4bde37724bf310846d8477f2baa405315a94e101 v2_3_1
+274a32e71716a5e8abf1f9fe4d58e7a7bd3a4525 v2_3_2
+aa3aca67671d3a690e6814e7e9181a5fc018e21b v2_4
+dfacfe8055d0abdb02e1db6b63b539cdfcee43b2 v2_4
+387d7900897c90e64994858b90355a48119ea60e v2_4
+cdf414156c2cd0b70d375afe9ea3c457a5284a70 v2_4
+b8ad75c5a7496184cfaa03b0e261a25d99b16b61 v2_4
+983dd56faabaf83c7c435c50bfc764e190fd4890 v2_4
+7169b41cea95570f43fce9ee1e65d6c6a101b0fe v2_4
+fb73d9245d05d829c427e9c2e8942f597d14b83c v2_4
+2371325c217681ad4daaf93bb913f14bef9986f7 v2_4_1
+5fe61334beb77f2314b1f5595962bdf748605633 v2_4_1/trunk
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..66c65e6
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,50 @@
+/* ====================================================================
+ * The OpenSymphony Software License, Version 1.1
+ *
+ * (this license is derived and fully compatible with the Apache Software
+ * License - see http://www.apache.org/LICENSE.txt)
+ *
+ * Copyright (c) 2001 The OpenSymphony Group. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * OpenSymphony Group (http://www.opensymphony.com/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "OpenSymphony" and "The OpenSymphony Group"
+ * must not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact license@opensymphony.com .
+ *
+ * 5. Products derived from this software may not be called "OpenSymphony"
+ * or "OSCore", nor may "OpenSymphony" or "OSCore" appear in their
+ * name, without prior written permission of the OpenSymphony Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ */
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..40de97d
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,390 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/docs/api.css b/docs/api.css
new file mode 100644
index 0000000..a718017
--- /dev/null
+++ b/docs/api.css
@@ -0,0 +1,93 @@
+td, li, br, div, p
+{
+ font-family : verdana, arial, helvetica, sans-serif;
+ font-size: 11px;
+}
+
+body
+{
+ margin: 0;
+ padding: 0;
+ color: #333333;
+ background-color: white;
+ font-size: 11px;
+ font-family: verdana, arial, helvetica, sans-serif;
+ line-height: 19px;
+}
+
+TD.NavBarCell1
+{
+ font-size: 10px;
+ font-family: Verdana, Sans-Serif;
+ font-weight: bold;
+ color: #666666;
+ background-color: #99CCFF;
+}
+
+TD.NavBarCell1Rev
+{
+ font-family: Verdana, Sans-Serif;
+ font-size: 11px;
+ font-weight: bold;
+ color: #dedede;
+ background-color: #669900;
+}
+
+TR.TableHeadingColor
+{
+ background-color: #99CCFF;
+}
+
+HR
+{
+ size: 1;
+ color: #000000;
+ height: 1;
+}
+
+a
+{
+ text-decoration: none;
+}
+
+a:link
+{
+ color: #003366;
+}
+a:visited
+{
+ color: #cc6600;
+}
+a:active
+{
+ background-color: transparent;
+ color: #cc6600;
+}
+
+li
+{
+ padding-bottom: 2pt;
+}
+
+h2
+{
+ color: #006699;
+ margin-bottom: 10px;
+ margin-top: 10px;
+}
+
+h3
+{
+ color: #006699;
+}
+
+h4
+{
+ font: 11px verdana, arial, helvetica, sans-serif;
+ font-weight: bold;
+ color: #cc6600;
+}
+h5, h6
+{
+ color: #032588;
+}
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..d384729
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,38 @@
+
+
+ OSCache
+
+
+
+
+
+
+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 allow your site
+ to have graceful error tolerance (eg if an error occurs like your db goes down, you can serve the cached content so people
+ can still surf the site almost without knowing). Take a look at the great features of OSCache.
+
+
+
+Here you will find documentation and download information for the latest version of OSCache.
+
+
+
+
+Reports:
+
+
+
+
+Documentation for the currently developing release can always be found on the OSCache Wiki.
+ If you have edits or corrections to make to the documentation here, you may edit them directly on the wiki as well.
+
+
+
\ No newline at end of file
diff --git a/docs/meta.xml b/docs/meta.xml
new file mode 100644
index 0000000..4e782ff
--- /dev/null
+++ b/docs/meta.xml
@@ -0,0 +1,220 @@
+
+ OSCache
+ 10001
+ CACHE
+ CACHE
+ true
+
+
+ 4
+ 12
+
+
+
+ -
+ Overview
+ wiki/What%20is%20OSCache.html
+
+ -
+ Feature List
+ wiki/Feature%20List.html
+
+ -
+ Requirements
+ wiki/Requirements.html
+
+ -
+ Installation Guide
+ wiki/Installation%20Guide.html
+
+ -
+ Configuration Guide
+ wiki/Configuration.html
+
+
+
+
+ wiki/Documentation.html
+
+ -
+ FAQ
+ wiki/FAQ.html
+
+ -
+ Tag Reference
+ wiki/JSP%20Tags.html
+
+ -
+ The Caching Filter
+ wiki/CacheFilter.html
+
+ -
+ Cron Expressions
+ wiki/Cron%20Expressions.html
+
+ -
+ OSCache and Hibernate
+ wiki/Hibernate.html
+
+ -
+ Clustering
+ wiki/Clustering.html
+
+
+
+
+
+
+ Andres March
+ me at andresmarch dot com
+
+
+
+
+
+ Lars Torunski
+ ltorunski at t-online dot de
+
+
+ Chris Miller
+ chris_overseas at hotmail dot com
+
+
+
+
+
+ 2.4.1
+ 07/07/2007
+ 21705
+
+
+ https://oscache.dev.java.net/files/documents/629/61427/oscache-2.4.1-full.zip
+ Full
+
+
+
+
+ 2.4
+ 05/01/2007
+ 21660
+
+
+ https://oscache.dev.java.net/files/documents/629/57136/oscache-2.4-full.zip
+ Full
+
+
+
+
+ 2.3.2
+ 07/23/2006
+ 21651
+
+
+ https://oscache.dev.java.net/files/documents/629/37840/oscache-2.3.2-full.zip
+ Full
+
+
+
+
+ 2.3.1
+ 06/19/2006
+ 21630
+
+
+ https://oscache.dev.java.net/files/documents/629/36361/oscache-2.3.1-full.zip
+ Full
+
+
+
+
+ 2.3
+ 03/06/2006
+ 21570
+
+
+ https://oscache.dev.java.net/files/documents/629/30345/oscache-2.3-full.zip
+ Full
+
+
+
+
+ 2.2 Final
+ 11/06/2005
+ 21550
+
+
+ https://oscache.dev.java.net/files/documents/629/23623/oscache-2.2-full.zip
+ Full
+
+
+
+
+ 2.2 RC
+ 09/18/2005
+ 21450
+
+
+ https://oscache.dev.java.net/files/documents/629/20854/oscache-2.2-rc-full.zip
+ Full
+
+
+
+
+ 2.1.1
+ 5/01/2005
+ 21441
+
+
+ https://oscache.dev.java.net/files/documents/629/13962/oscache-2.1.1-full.zip
+ Full
+
+
+
+
+ 2.1
+ 1/18/2005
+ 21223
+
+
+ https://oscache.dev.java.net/files/documents/629/10654/oscache-2.1-full.zip
+ Full
+
+
+
+
+ 2.0.2
+ 1/22/2004
+ 21251
+
+
+ https://oscache.dev.java.net/files/documents/629/2653/oscache-2.0.2-full.zip
+ Full
+
+
+
+
+ 2.0.1
+ 1/04/2003
+ 21250
+
+
+ https://oscache.dev.java.net/files/documents/629/1580/oscache-2.0.1-full.zip
+ Full
+
+
+
+
+ 2.0
+ 09/22/2003
+ 21222
+
+
+ https://oscache.dev.java.net/files/documents/629/1051/oscache_2_0_full.zip
+ Full
+
+
+
+
+
+
+
diff --git a/docs/navpanel.jsp b/docs/navpanel.jsp
new file mode 100644
index 0000000..7001dc9
--- /dev/null
+++ b/docs/navpanel.jsp
@@ -0,0 +1,41 @@
+
+
About
+Overview
+Feature List
+Download
+Changelog
+Requirements
+
+
+
+
Documentation
+Installation Guide
+FAQ
+Configuration
+Tag Reference
+The Caching Filter
+Cron Expressions
+OSCache and Hibernate
+Clustering
+API Reference
+
+
+
+
Services
+JIRA
+- Issue Overview
+- Roadmap
+- Changelog
+Wiki
+- OSCache page
+
+
+
+
+
Sponsor Companies
+These companies have contributed a lot to OSCache and we thank them.
+
+ %>/oscache/pyxis-box-sponsor.gif)
+
+
+
\ No newline at end of file
diff --git a/docs/wiki/7147/CacheChainModel_v3.jpg b/docs/wiki/7147/CacheChainModel_v3.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..03afc9212faa74f209d5172d46971ff91fed5c36
GIT binary patch
literal 77694
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