Changes Report

Change reports for the latest versions of Ehcache are available here.

Release History

VersionDateDescription
2.4.32011-04Bug fixes
2.4.22011-04Bug fixes
2.4.12011-03-25Bug fixes
2.4.02011-02-15Major release
2.3.22011-02-15Bug fixes
2.3.1??Bug fixes
2.3.02010-10-15Major release with new features
2.2.12010-10-11Bug fixes
2.2.02010-07-16Bug fixes
2.1.02010-05-19Major release with new features
2.1.0-beta2010-04-21Beta for 2.1.0 a major release with new features
2.0.12010-04-05Bug fixes
2.0.02010-3-4Major release with new features
2.0.0-beta2010-1-29Major release with new features
1.7.22010-1-11Maintenance and bug fixes
1.7.12009-11-30Maintenance and enablement of modularisation
1.7.02009-10-5This is a beta release of Ehcache 1.7.
1.6.22009-8-23This is a maintenance release to Ehcache 1.6.0
1.6.12009-7-27This is a maintenance release to Ehcache 1.6.0.
1.6.02009-6-17This release introduces a new high performance cache core, which is two orders of magnitude faster.
1.6.0-rc12009-6-12This release introduces a new high performance cache core, which is two orders of magnitude faster.
1.6.0-beta52009-5-10This release introduces new high perforamnce cache core, which is two orders of magnitude faster.
1.6.0-beta42009-4-7This release introduces new high perforamnce cache core, which is two orders of magnitude faster.
1.6.0-beta32009-1-28This release breaks JCache into its own ehcache-jcache module and removes all dependencies other than the JDK.
1.6.0-beta22008-12-24The focus of this release is enabling multiple replication schemes in the same configuration.
1.6.0-beta12008-10-19The 1.6 release is a cleanup release which sets the foundation for future development. It updates the required Java version to 1.5, removes consequently redundant libraries and removes long deprecated methods. It also fine tunes some of the newer API behaviours.
1.5.02008-07-121.5.0 Maintenance release
1.5.0-beta22008-06-7Second beta of 1.5.0 Maintenance release
1.5.0-beta12008-05-13Maintenance release
1.4.12008-02-21Maintenance release
1.4.02008-1-311.4 release
1.4.0-beta22008-01-011.4.0 beta2 release
1.4.0-beta2007-08-261.4 beta release
1.3.02007-06-111.3 release
1.3.0-beta32007-05-27Beta 3 for 1.3 release
1.3.0-beta22007-5-1Beta 2 for 1.3 release
1.3-beta12007-3-9Beta for 1.3 release
1.2.42006-12-31Final 1.2.4 release
1.2.4RC2006-11-26Minor release
1.2.32006-9-2Maintenance release
1.2.22006-7-17Maintenance release to ehcache-1.2.1
1.2.12006-7-2ehcache-1.2.1
1.2.1RC2006-6-4ehcache-1.2.1RC
1.22006-4-25ehcache-1.2. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1.
1.2rc12006-4-17ehcache-1.2 release candidate 1. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1.
1.2beta52006-3-26Covers beta1 - beta 5 releases. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1.
1.12004-11-23Maintenance release
1.02004-9-28Stable release
0.92004-7-5Additional release
0.82004-5-15Additional features
0.72004-1-2Bug fix release
0.62003-12-8Bug fix release
0.52003-11-18Hibernate compatibility release
0.42003-11-13First public release

Release 2.4.3 - 2011-04

TypeChangesBy
UpdateNotSerializableException when Ehcache tries overflow data to disk in XA Mode Fixes EHC-853.Ludovic Orban
UpdateTimestamper.next() can loop a billion times or more Fixes EHC-853.Alex Snaps
UpdateGive access to attribute name within the Extractor classes in search Fixes EHC-846.Tim Eck
UpdatePass properties when constructing attribute extractors instances Fixes EHC-848.Tim Eck

Release 2.4.2 - 2011-04

TypeChangesBy
FixCompoundStore.putWithWriter doesn't follow contract regarding return value Fixes EHC-845.Chris Dennis

Release 2.4.1 - 2011-03-25

TypeChangesBy
FixDisallow a cache from being configured for overflowToOffHeap and terracottaClustered Fixes EHC-840.Chris Dennis
FixJMX interface needs to translate InvalidConfigurationException throw by SampledCacheMBean.setCoherent(true) to plain RuntimeException Fixes EHC-830.Gary Keim
FixCreate improved toString method on ResultImpl Fixes EHC-838.Tim Eck

Release 2.4.0 - 2011-02-15

TypeChangesBy
AddSearch. Caches can now be indexed and searched by key, value or attribute extracted from values. This is a major new API and feature for Ehcache.Tim Eck
AddTransactions support rework. Introduced 'local' and 'xa' modes, renamed old 'xa' mode into 'xa_strict'.Ludovic Orban
FixSelfPopulatingCache will always release the lock on failure during the CacheEntryFactory.createEntry Fixes EHC-773.Alex Snaps
AddUpdate slf4j to 1.6.1Hung Huynh
AddAdd new consistency modes - strong and eventual. Deprecated old coherent settings ("true", "false") for Terracotta distributed caches.Abhishek Sanoujam
AddAdd rejoin feature for Terracotta distributed caches.Abhishek Sanoujam
AddMove nonstop functionality from a decorator to ehcache-core.Abhishek Sanoujam
AddAdd explicit-locking API to Ehcache.Abhishek Sanoujam

Release 2.3.2 - 2011-02-15

TypeChangesBy
FixBlocking cache can create several StripedReadWriteLockSync Fixes EHC-805.Chris Dennis

Release 2.3.1 - ??

TypeChangesBy
AddIntroduced ElementValueComparator to make element value comparison used in replace() and remove() atomic methods pluggable.Ludovic Orban

Release 2.3.0 - 2010-10-15

TypeChangesBy
AddAdditional statistics that break out missNotFound into missInMemory, missOffHeap, and missOnDisk.Gary Keim
AddExtend Ehcache existing in-memory and on-disk concepts to include off-heap as an additional possible location.Chris Dennis
AddAdd the ability for store implementations to return a store specific MBean implementation that is exposed in the same manner as the existing Ehcache MBeans.Chris Dennis
AddRestore support for the disk access stripes configuration property in the disk store implementation. Fixes EHC-778.Chris Dennis
FixEHC-740. Pick up "Read timed out" in RMI UnmarshalException.Greg Luck
FixThrow an InvalidConfigurationException when a cache is created from CacheConfiguration without specifying a name.Greg Luck
UpdateAdd support for JMX registration of ManagedCacheManagerPeerProviders. Thanks to Eric Dalquist for this contribution.Greg Luck
FixFix MemoryEfficientByteArrayOutputStream to return a correctly sized byte array to prevent network/disk wastage in ehcache-server/disk stores respectively. Fixes EHC-754.Chris Dennis
AddAdded timeout to cache.getWithLoader. Fixes EHC-764.Ludovic Orban
FixFix exception message to do with Element.getValue(). Thanks to Ken Dombeck for reporting this. Fixes EHC-763.Greg Luck
FixMonitoring solutions (Ganglia, Advent Manage Engine, Hyperic) typically allow a JMX property to be polled and graphs produced, using percentages. Add basic percentages for cache statistics. Fixes EHC-538.Greg Luck
AddAdded support for cacheDecorators in defaultCache. Fixes EHC-729.Abhishek Sanoujam
AddAdded support for cacheDecorators replacing the original cache when decorated cache has same name as the cache. For use-cases like Hibernate where it helps to replace the original cache declared in the config with the decorated cache. This can be used by making the CacheDecoratorFactory return the decorated cache with same name as the cache.Abhishek Sanoujam

Release 2.2.1 - 2010-10-11

TypeChangesBy
FixEhcache evictor not clearing objects as expectedAlex Snaps

Release 2.2.0 - 2010-07-16

TypeChangesBy
FixRenamed TerracottaConfigConfiguration to TerracottaClientConfiguration.Geert Bevin
FixCreating a new cache manager ready to talk to terracotta is way too verbose Fixes EHC-736.Geert Bevin
FixThe CacheWriter init method is only called when it was declared through config since that code triggers when the CacheManager inits the cache Fixes EHC-742.Geert Bevin
FixSupport getCurrentNode and waitUntilNodeJoins in Ehcache cluster API Fixes EHC-733.Geert Bevin
AddAdded new attribute "storageStrategy" for Terracotta Clustered Caches. This attribute is optional with default value "classic". The other allowed value is "DCV2" and only available for enterprise users. storageStrategy=DCV2 provides far greater scale and throughput.Abhishek Sanoujam
FixCleaned up Configuration Generator, accessible using cacheManager.get[Active/Original]ConfigurationText method(s). Can be used independently giving greater control over output format - indentation, newlines, suppressing default values etc. Fixes EHC-713.Abhishek Sanoujam
FixBetter exception message when adding a decorated cache/already initialized cache to CacheManagerAbhishek Sanoujam
AddAdded new attribute "concurrency" for Terracotta Clustered Caches. Its a non-negative integer that can be used to specify the number of segments that will be used by the map underneath the Terracotta Store. Its optional and has default value of 0 - which means will use default values based on the internal Map being used underneath the store (based on storageStrategy).Abhishek Sanoujam

Release 2.1.0 - 2010-05-19

TypeChangesBy
Fixclosing a chache the WriteBehindManager attached to the queue does not by default finish flushing Fixes EHC-701.Geert Bevin
FixProperly register MBeans for Terracotta clustered caches when they're added programmatically as the first clustered caches for a cache manager. Fixes EHC-641.Geert Bevin
AddCache decorators can now be configured through config using "cacheDecoratorFactory" tag inside the "cache" tag.Abhishek Sanoujam
UpdateEhcache 2.1.0 JTA support with Atomikos requires Atomikos 3.6.5. Fixes EHC-693.Fiona O'Shea
UpdateA meaningful log message, rather than an NPE is emitted if you configure RMI replication without configuring a net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory in ehcache.xml. This is apparently a relatively common configuration error. Fixes EHC-621.Greg Luck

Release 2.1.0-beta - 2010-04-21

TypeChangesBy
FixChange the internal store structures to be fully coherent. This allows for the addition of concurrent map like methods (e.g. putIfAbsent) and also for JTA caching in unclustered caches. Fixes EHC-450.Chris Dennis
UpdateChange the ehcache-core Hibernate dependency to the newly released 3.5.0-Final. Fixes EHC-621.Chris Dennis
FixChange CacheLockProvider lock method to support reentrant acquires. Add a lock state query method, and update BlockingCache accordingly. Fixes EHC-633.Chris Dennis
Change caches to have statistics disabled by default. Fixes EHC-673.Chris Dennis
FixAllow Elements in clustered caches to be serialized, and hence enable replication of clustered caches. Fixes EHC-674.Chris Dennis
AddCaches can now be configured to be copyOnRead and copyOnWrite, with user provided copy strategy or the default serialization one. Configuration on the Terracotta config is now deprecated... Fixes EHC-668.Alex Snaps
FixXA transactional Caches now automatically set copyOnRead on terracotta clustered stores properly Fixes EHC-650.Alex Snaps
AddActual copyOnRead and copyOnWrite implementation Fixes EHC-628.Alex Snaps
AddAdded putIfAbsent(Element), replace(Element), replace(Element, Element) and removeElement(Element) methods to Cache Fixes EHC-368.Chris Dennis, Alex Snaps
AddAdded addCacheIfAbsent method to CacheManager, implied removing races in managing Cache's and Ehcache's in the CacheManager's implementation. Fixes EHC-234.Alex Snaps
AddXA Transactional caches are now also supported with non clustered caches.Alex Snaps
FixFixed issue to support BTM and Atomikos TransactionManager's suspend/resume cyclesAlex Snaps
FixFixed NPE when no DefaultCache is provided at CacheManager's instantiation Fixes EHC-687.Alex Snaps
FixUpdated to latest slf4j 1.5.11 Fixes EHC-686.Alex Snaps

Release 2.0.1 - 2010-04-05

TypeChangesBy
FixRegisteredEventListeners.unregisterListener(CacheEventListener cacheEventListener) throws java.lang.UnsupportedOperationException Fixes EHC-653.Geert Bevin
FixClustered Ehcache Hibernate caches are not set to minimalPut=true by default Fixes EHC-647.Chris Dennis
FixInterleaving txn not support in EhcacheXAResource when the TM is Atomiko Fixes EHC-658.Ludovic Orban
FixFix JTA version system Fixes EHC-657.Alex Snaps
FixJTA prepared transaction for which keys are to be inserted (previously absent) aren't unlocked when rolled Fixes EHC-645.Alex Snaps
FixFix JTA Deadlock Fixes EHC-644.Alex Snaps
FixEhcacheXAResourceImpl.equals is only based on Cache's name Fixes EHC-642.Alex Snaps
FixDefault constructor for CacheConfiguration was removed in 2.0. Put back. Fixes EHC-665.Greg Luck
FixEnabled loading the Ehcache config file in EhCacheRegionFactory from an URL Fixes EHC-660.Alex Snaps

Release 2.0.0 - 2010-3-4

TypeChangesBy
FixChanged Store.put() to return boolean instead of void. cache.put() can be more efficient by relying on this return value instead of doing a separate containsKey() check for each cache.put(). Fixes EHC-625.Abhishek Sanoujam
AddAdded AbstractCacheWriter class for convenience. Fixes EHC-632.Geert Bevin
FixChanged delete and deleteAll CacheWriter methods to take a newly introduced CacheEntry type that contains a key and possibly the element that belongs to it.Geert Bevin
AddAdded support for cluster topology event listeners.Geert Bevin
AddAdded support for cluster topology information retrieval to Cache.Geert Bevin
AddAdded distributed cache events for clustered Terracotta caches through TerracottaCacheEventReplicationFactory and TerracottaCacheEventReplication.Geert Bevin
AddAdded support for local and remote filtering for the cache event listeners.Geert Bevin
AddImplemented rate limiting support for write-behind.Geert Bevin
AddMade batch operation type ordering predictable, ie. writes always happen before deletes.Geert Bevin
AddAdded statistics cache attribute. If set to false, statistics overhead is avoided giving a significant performance improvement in standalone ehcache. By default statistics are on.Chris Dennis
FixFixed performance regression which occurred in 1.7.0 when sampling statistics was added. For maximum performance statistics can now be turned off in config and during cache construction. Fixes EHC-419.Chris Dennis
FixChanged meaning of maxElementsInMemory=0 for MemoryStore to be unlimited. This puts it in-line with DiskStore and ClusteredStore. This also means that a cache configuration defining no in-memory capacity limit gets a functioning but unlimited capacity cache. This is not expected to cause practical problems because in previous versions, when 0 meant 0, a warning was issued and performance was halved. Fixes EHC-610.Chris Dennis
AddAdd necessary methods to make the Hibernate RegionFactory implementations forward compatible with the upcoming Hibernate 3.5 release. Fixes EHC-620.Chris Dennis
FixSwitch to using millisecond precision for access timestamps in unclustered Ehcache elements. Fixes EHC-622.Chris Dennis
FixModified DiskStore to be configurable to use multiple RandomAccessFile instances to read the data file. Reduced the scope of synchronization on reading from the DiskStore. Fixes EHC-537.James Abley, Chris Dennis
FixBlocking now allows for concurrent reads on the same key (i.e. same striped lock). Fixes EHC-554.Alex Snaps

Release 2.0.0-beta - 2010-1-29

TypeChangesBy
AddRefactored Cache constructors to allow the use of a fluent interface instead of a series of constructor arguments. Existing constructors remain exactly the same for backward compatibility.Geert Bevin
AddAdded support for CacheWriters with write-through and write-behind modes.Geert Bevin
AddAdded support for fast bulk-loading with incoherent mode when clustered with Terracotta. Turning on incoherent mode with cache.setCoherent(false) improves performance for bulk loading.Abhishek Sanoujam
AddNew attribute for Terracotta clustered-caches, synchronousWrites=true|false -- support for Terracotta's Synchronous Write locking level in cache. Synchronous Write locking level gives greater guarantees, but comes at high cost in terms of scale/latency.Abhishek Sanoujam
AddAdded XA transaction, using JTA API. Configured through the transactionalMode attribute of a cache in your configuration xml file. Currently only supported on caches clustered using Terracotta's serialized value mode.Alex Snaps
FixImplemented correct cluster wide locking for Terracotta clustered Ehcache Hibernate caches. Fixes EHC-573.Chris Dennis
AddAdded dynamic configuration support for Terracotta clustered and unclustered Ehcache instances. TTI, TTL, and maximum in-memory and on-disk capacities can be modified at runtime by accessing and mutating the Cache object's CacheConfiguration. Fixes EHC-570.Chris Dennis
AddAdded Hibernate 3.3+ API cache region factories supporting both singleton and non-singleton cache managers. The new API provides for concurrency improvements that were not possible with the pre-3.3 provider API. Fixes EHC-560.Chris Dennis
AddAdd support for all tim-distributed-cache configuration options to the terracotta ehcache configuration element. Fixes EHC-584.Chris Dennis
FixRewrite of MemoryStore to prevent bugs whereby the parallel key data structure became inconsistent with the underlying map, and therefore caused errors during capacity eviction. Fixes EHC-569.Chris Dennis
FixDisabled caches now return null on get rather than returning a potential stale value. This is important now that caches can be disabled at runtime when they may not be empty. Fixes EHC-576.Chris Dennis
AddAdded "copyOnRead" setting for terracotta clustered caches. At a high level this setting will return distinct value objects upon every get() to a cache. The main driver for this feature is to support caches that are accessed by disparate OSGi bundlesTim Eck

Release 1.7.2 - 2010-1-11

TypeChangesBy
FixReplaced single threaded use of StringBuffer with StringBuilder. Switched to using valueOf methods for creative primitive wrapper instances instead of new'ing them. Fixes EHC-435.Chris Dennis
FixAdded a non-transient cache name field to the Statistics class so that cache names persist after passing through serialization. Fixes EHC-513.Chris Dennis
FixAdded the Exception causing the issue to the CacheException. The message now includes the key, rather than null. Fixes EHC-518.Alex Snaps
FixMade "stopped" variable volatile in MulticastKeepaliveHeartbeatSender/Receiver to make it thread-safe Fixes EHC-549.Abhishek Sanoujam
FixMake ExecutorService's use custom ThreadFactory so that pool threads have meaningful names. Fixes EHC-561.Abhishek Sanoujam
FixUse UUID rather than RMI's UID which does not work in GAE. Fixes EHC-434.Greg Luck
AddAdded CacheManager.clearAllStartingWith(String): void that clears all Caches associated with the cache manager, if the cache name matches the prefix profided Fixes EHC-242.Alex Snaps

Release 1.7.1 - 2009-11-30

TypeChangesBy
UpdateEnable cache loaders to work with Google App Engine.Greg Luck
FixFixed Cache.toString() bug introduced in 1.7.0. Fixes EHC-???.Greg Luck
FixFixed ttl bug introduced in 1.7.0. TTL or TTI values > Integer.MAX_VALUE were incorrectly downcast causing negative values. Most commonly, setting a TTI or TTL of Long.MAX_VALUE caused an exception to be thrown. Fixes EHC-342.Alex Miller
FixFixed memory visiblity issues with fields in MemoryStore. Made maximumSize and useKeySample final as they never change. Made status and policy volatile as they change but weren't guaranteeing visibility. Fixes EHC-449.Alex Miller
FixFixed a race that can cause an NPE when evicting with key samples during put. This can happen if there is a concurrent clear() that wipes the map as the keyArray is not updated under the same lock. This happens in tests a lot but is probably less common in actual user code. Fixes EHC-427.Alex Miller
FixFixed a number of latent visibility bugs in the Cache class. Fixes EHC-443.Chris Dennis
FixFixed a number of latent visibility bugs in the Element class. Notably updates to the hitCount field are now coherent across multiple threads through the use of an AtomicLongFieldUpdater. Fixes EHC-445.Chris Dennis
FixFixed bug to avoid any limit on the number of caches that can be configured for replication. Earlier there was a limit on the number of caches that can be configured for replication as the heartbeat size was exceeding the MTU when the number of caches were high and/or the caches had long names. Fixed to break up into multiple payloads in case the heartbeat size exceeds the MTU. Fixes EHC-424.Abhishek Sanoujam
FixFixed MemoryStore to use sufficient initial capacity for the internal ConcurrentHashMap so that it can accommodate the maximumSize of the store. Fixes EHC-446.Abhishek Sanoujam
FixAllow Terracotta clustered caches to be added programmatically even when the CacheManager was created initially without any Terracotta clustered caches. e.g. Adding a terracotta clustered cache programmatically to the default singleton CacheManager when there is no ehcache.xml present in the classpath. Fixes EHC-415.Abhishek Sanoujam
Fixcache.isKeyInCache(null) causes an NPE. Fixed. Fixes EHC-462.Greg Luck
FixFixed an issue with disk store when an abrupt JVM termination leaves a persistent disk store in a corrupt state. This problem was introduced in 1.6. Fixes EHC-437.Greg Luck
UpdateIn Ehcache 1.6 the web package was broken out into the ehcache-web module. However the ShutdownListener is useful even if you are not using web caching - you use it to shutdown a CacheManager in a web app, when the servlet container shuts down. For that reason it should be in core. Putting it back. Fixes EHC-544.Greg Luck
FixAdded null check to avoid NPE. Fixes EHC-533.Abhishek Sanoujam
FixFix for making ehcache work in Google App Engine runtime. JMX classes won't be used when monitoring="off" Fixes EHC-556.Abhishek Sanoujam

Release 1.7.0 - 2009-10-5

TypeChangesBy
Updateehcache now becomes a composite modules which includes ehcache-core, ehcache-terracotta and may include other commonly used modules in the future like ehcache-jcache.Greg Luck
Addehcache-terracotta module, which provides seamless integration to the Terracotta Server for Terracotta based clustering.Terracotta Team
Reduce iterator crossover from 100 to 5 to solve suspected CPU load issue in small caches. Fixes EHC-395.Terracotta Team
Take puts into account for recent use in the eviction algorithms. Fixes an algorithm regression from 1.5. Fixes EHC-396.Greg Luck
Statistics reporting incorrectly in Hibernate in 1.6.2. Fixes EHC-357.Terracotta Team
UpdateReplaced Mutex with higher concurrency strategy (ReadWriteLock based) for both BlockingCache and SelfPopulatingCacheGreg Luck

Release 1.6.2 - 2009-8-23

TypeChangesBy
RemoveRemove AsynchronousCommandExecutor. This is not used by anyone that I know of and is obsolete as j.u.c. provides a similar mechanism.Greg Luck
Fix1.6.1 cannot read older versions' persistent stores. Thanks to Matt Passell for the patch. Fixes 2840648.Greg Luck
FixFix retry serialize not working. Thanks to Vitaliy Garnashevich for the patch. Fixes 2831089.Greg Luck
FixFix statistics counters. Change them to AtomicLong as they now need to be thread-safe to be accurate. Fixes 2831182.Greg Luck
FixFix to 1.6 where clearOnFlush may now be false and were getting double notification of a remove or expiry if it happened after a flush. Thanks to both Kevin Conaway and Jonathan Barbero. Fixes 2831486.Greg Luck
UpdateAlways close open files. Thanks to Vitaliy Garnashevich for the patch. Fixes 2831089.Greg Luck
FixIterating through ALL_CACHE_MANAGERS sometimes causes ArrayOutOfBoundsException. Bug introduced in 1.6. Fixed. Thanks to Chris Hyzer for reporting. Fixes 2835670.Greg Luck
UpdateCurrent implementation stops after at least one loader loaded at least one Element. This patch continues to poll other loaders if more keys left to load. Thanks to Vitaliy Garnashevich for the patch. Fixes 2830920.Greg Luck

Release 1.6.1 - 2009-7-27

TypeChangesBy
FixFixed ConcurrentModificationException when using DiskStore. This issue would log an exception and those elements waiting to be spooled would be discarded. The DiskStore and cache would continue to run unaffected. 1.6 issue.Greg Luck
FixFixed regression in 1.6.0. When an Element is not Serializable, but it's key is, then replications via invalidate should still work as only the key needs to be Serializable. 1.6 issue.Greg Luck
UpdateClarified and made consistent removeQuiet and getQuiet. Both do not update statistics nor call listeners.Greg Luck
UpdateAllow the network interface to be specified on multi-homed machines for MulticastRMICacheManagerPeerProvider. This can now be done by specifying hostName=<hostname or IP of network interface> in the properties. The default interface is used if this is not specified as it has been in past versions.Greg Luck
FixImproved incrementer in MemoryStore to avoid rare overwrites in the key sampling. Thanks to Michael Maraist for this fix. 1.6 issue. Fixes 2823211.Greg Luck
FixImprove performance of memory store eviction. Fixes 2823281.Greg Luck
AddDelete directories that were created with auto_created which are meant for one time only use.Greg Luck
FixFix consistency problem where, with very fast updates to a Cache, gets were returning old versions. Thanks to Marcin Sciesinski for a very clear test case which showed the issue. Fixes 2824181.Greg Luck

Release 1.6.0 - 2009-6-17

TypeChangesBy
AddAdded compatibility for Google App Engine. To get started read http://ehcache.sourceforge.net/documentation/googleappengine.html for more details.Greg Luck
UpdateRemoved slf4j, which was causing ClassNotFoundException for some users. You can still log via SL4J using the SLF4JBridgeHandler. See http://www.slf4j.org/legacy.html See the http://ehcache.sourceforge.net/documentation/logging.html for more details.Greg Luck

Release 1.6.0-rc1 - 2009-6-12

TypeChangesBy
FixPreserve \ and $ when in ehcache.xml.Greg Luck
FixFix to an issue introduced in 1.6.0-beta5. It was possible for the probabilistic eviction algorithm to return null, which could cause a slow memory leak. Fixed. If this happens on an eviction we do a further selection via iteration which is guaranteed not to return null. Fixes 2791732.Greg Luck
FixFix Bug in RMIAsynchronousCacheReplicator.clone introduced in the 1.6 beta series. Fixes 2804387.Greg Luck
FixUpdatingSelfPopulatingCache had not been converted to work with non-Serializable objects. Fixed. Fixes 2790350.Greg Luck
FixFixed rare ConcurrentModificationException when calling cache.flush() to persist to the disk store during cache operation. cache.flush() is now asynchronous as a result. Fixes 2008055.Greg Luck
Addadded clearOnFlush cache parameter. It determines whether the MemoryStore should be cleared when flush() is called on the cache. By default, the MemoryStore is cleared. Useful is you want to back up a cache to the file system without clearing the MemoryStore. Thanks to Matt Passell for the patch.Greg Luck
Update/ used to be an illegal character in ehcache cache names. However JBoss 5 uses / in its JPA cache names. / is now a legal character so as to interoperate with JBoss 5.Greg Luck
UpdateBrought back the LruMemoryStore from ehcache-1.5 and prior. This can be switched in for LRU eviction algorithm cache using set java -Dnet.sf.ehcache.use.classic.lru=true By default the new, high performance MemoryStore is used for all eviction algorithms.Greg Luck
UpdateAdded slf4j, replacing java.util.logging. I succumbed to the logic that a library should use an abstract logging interface. This _may_ be replaced by configurable logging in ehcache.xml, which will then remove the dependency on sl4j while still permitting its and other logging frameworks use.Greg Luck

Release 1.6.0-beta5 - 2009-5-10

TypeChangesBy
AddMake MemoryStore eviction policies injectable.Greg Luck
FixFix NPE on cache operations during cache.dispose(); Fixes 2740073.Greg Luck
FixFix DiskStore recovery after dirty shutdown bug introduced in beta4. Fixes 2750578.Greg Luck
FixFix MemoryStore concurrency issue introduced in beta4.Greg Luck

Release 1.6.0-beta4 - 2009-4-7

TypeChangesBy
UpdateRemove many uses of synchronize and replace with new concurrency techniques available in Java 5. A concurrent test with 70 threads doing a realistic mix of operations gets are 92.5 times faster, puts are 30 times faster, removes are 48 times faster, removeAlls are 80 times faster, and keySet is 30 times faster.Greg Luck
AddAdd replicatePutsViaCopy to the RMI replicator. This determines whether the new elements are copied to other caches (true), or whether a remove message is sent. Defaults to true. A replicateUpdatesViaCopy property was already there. With these two properties, fine-grained control is available to ensure distributed cache coherency is maintained. Fixes 2684466.Greg Luck
UpdateDon't automatically delete the DiskStore index on startup. Fixes 2003322.Greg Luck
FixFix documentation: missing parentheses from samples.html. Fixes 2540579.Greg Luck
FixThe isSerializable() method on Element was too narrowly defined. Adjusted to allow Elements with null values to be Serialized. This change affects DiskStore and replication. Null objects of any class will serialize. Also recorded as 2153609. Fixes 2026586.Greg Luck
FixMade the synchronous RMI replicator log exceptions as SEVERE rather than throwing them, to make this consistent with the asynchronous replicator. The change means that you cannot detect that replication has not occured to a given peer. Given that we are not transactional, this probably does not matter. Fixes 2018964.Greg Luck
FixNotifications happening on removeQuiet when they should not. Fixes 2725134.Greg Luck
FixExtra logging around RMICachePeer. Add the cacheName to the FINE log output. Fixes 2492568.Greg Luck
FixAdded support for UTF8 file encoding of ehcache.xml. This makes it possible to specify cache names in non Western languages. Fixes 2584798.Greg Luck
FixUpdated provided scope dependency of Hibernate to 3.2.6GA to pick up a signature change in CacheException to Throwable. Fixes 2035287.Greg Luck

Release 1.6.0-beta3 - 2009-1-28

TypeChangesBy
UpdateRemove all of JSR107 JCACHE into its own module called ehcache-jcache, which will have its own release cycle. The jsr107cache dependency is thus no longer required.Greg Luck

Release 1.6.0-beta2 - 2008-12-24

TypeChangesBy
UpdateAllow multiple replication schemes to be used within the same CacheManager. i.e. use JMS for some caches and RMI for others.Greg Luck
AddAdd a reference to Ehcache from CacheStatistics. Request 2128129Greg Luck
AddAdd FINE level LOG statement for Hibernate EhCache provider puts. This enables puts to be debugged with LOG statement. Request 2061030.Greg Luck
UpdateRemoved cacheManager.getCachePeerProvider() in favour of cacheManager.getCacheManagerPeerProvider("scheme") where scheme is the replication scheme. Each replicator type can then call its own scheme provider, allowing multiple replication schemes to be used within the same CacheManager.Greg Luck

Release 1.6.0-beta1 - 2008-10-19

TypeChangesBy
RemoveRemoved commons-collections. The LRUHashMap was only being used by early versions of Terracotta integration and is not longer required to support Terracotta.Greg Luck
RemoveRemoved dependency on backport concurrent. java.util.concurrency is now used. Fixes 1987750.Greg Luck
RemoveRemoved dependency on commons-logging. Ehcache now uses java.util.logging at the request of many users.Greg Luck
UpdateJava 1.5 is now the minimum version for ehcache 1.6. Java 1.4 will continue to be supported on the ehcache 1.5 branch. Ehcache can reduce its dependency list for the core and therefore occupy a smaller footprint in new applications.Greg Luck
UpdateAdd the ability for the MBean classes to be used in remote JMX clients, in addition to the current mechanism which uses standard JDK types. The ehcache classpath should be added to the client for this to work. e.g. jconsole -J-Djava.class.path=ehcache.jarGreg Luck
UpdateDue to requests for more sophisticated features and end user experience with the CacheLoader interface the following changes have been made: - A Cache may now have a list of CacheLoaders. If the first loader returns null, the next in the list is attempted until a non-null result occurs or the chain of loaders ends. - If a loader does not load, no element is put in the cache, rather than an element with a null value. This is more consistent with the rest of the API anyway and has been requested by users. - Loaders now have a maxLoadTimeMillis property which sets the maximum amount of time for the loader to wait for the load. - To support sophisticated loaders like the JMSCacheLoader, the CacheLoader interface adds lifecycle methods, so that it can be bound into a cache's lifecyle. Also there is a new factory method for loaders to bring them into line with extensions such that a back-reference to the owning Cache is injected at configuration time. The upshot of these changes is that implementers of CacheLoader will need to update their implementations for these changes. The setter and getter for CacheLoader has been removed because it now a list, not a scalar. New registerCacheLoader and unregisterCacheLoader methods have been added for programmatic configuration. The getCacheLoader method has been removed.Greg Luck
RemoveCache configuration individual methods have been deprecated for several years. In this version, the deprecated methods are removed. Use cache.getCacheConfiguration() to get the configuration object and then get individual properties.Greg Luck
RemoveCache statistics individual methods have been deprecated for several years. In this version, the deprecated methods are removed. Use cache.getStatistics() to get the Statistics object and then get individual statistics.Greg Luck

Release 1.5.0 - 2008-07-12

TypeChangesBy
FixFix loading of net.sf.ehcache.hibernate.EhCacheProvider from multiple class loaders. The insistence that a leading slash be at the front of the "net.sf.ehcache.configurationResourceName" property has been removed. If this fix causes anyone an issue, add the "/" to the front of your path. Fixes 1977481.Greg Luck
FixUpdated the BlockingCache.get() JavaDoc to clarify the contract when a RuntimeException is thrown. Fixes 1990091.Greg Luck
FixAdded a more meaningful LOG message when a null element is encountered from a replication. The only reason that an element can be null is because a SoftRefernence has been reclaimed by the JVM. The log message recommends either increasing heap or setting -Xms to be the same as -Xmx as the Sun JDK will reclaim SoftReferences in preference to increasing heap. Fixes 2002319.Greg Luck
UpdateThe remote debugger has had many improvements. It is now packaged in its own tarball available from the downloads page, and also continues to be published as a maven module. It is not in the core tarball so that more focus can be given to it.Greg Luck

Release 1.5.0-beta2 - 2008-06-7

TypeChangesBy
FixFixes to changes made in 1.5.0-beta1: token replacement in ehcache.xml parsing and Cache.get() not searching the DiskStore.Greg Luck

Release 1.5.0-beta1 - 2008-05-13

TypeChangesBy
AddAdded JGroups Implementation. Thanks to Pierre Monestie for the patch(es) for this. Though new to the core distribution JGroups replication has been in production use in a large cluster for the last 10 months. Applied through patches 1730405 and 1912931. Fixes 1730405.Greg Luck
UpdateCachingFilter changed to use BufferedOutputStream rather than OutputStream. This is a performance improvement. Thanks to Vitaly Baranovsky for the patch. Fixes 1812267.Greg Luck
UpdateRemoved setThreadName usage to increase performance. Fixes 1748591.Greg Luck
AddJCache interface improvement. if we want preload for this cache, and we probably don't know all the keys at the system startup time. We may want to have new interface: loadAll() This will not be added to ehcache until it gets added to the JCACHE spec. Fixes 1795131.Greg Luck
UpdateClarified JavaDoc and behaviour so that Cache.getQuiet does not update Element statistics but also cache statistics. Fixes 1795131.Greg Luck
UpdateEnhanced behaviour of diskPersistent so that it will work for MemoryStore only caches. On shutdown the memory store will be written to disk and on startup loaded up into memory. But DiskStore itself will not be used during cache operation. Fixes 1909427.Greg Luck
UpdateThe diskStore element in ehcache.xml is now optional. If all caches use only MemoryStores, then there is no need to worry about configuring diskStore. This will simplify configurations particularly where multiple CacheManagers are being used. If one or more caches requires a DiskStore, and none is configured, java.io.tmpdir will be used and a warning message will be logged to encourage explicity configuration of the diskStore path. Thanks to Robert Watkins for suggesting this one. Fixes 1728061.Greg Luck
AddBy default RMI will assign a random listener port to a new Remote object which prevents its operation through firewalls. Added a new property remoteListenerPort to RMICacheManagerPeerListenerFactory to enable it to be specified. Fixes 1887683.Greg Luck
AddMade ManagementService accessible from IoC containers by providing a constructor. Fixes 1958670.Greg Luck
AddAdded a new system property expansion token "ehcache.disk.store.dir" to DiskStore configuration which can be used to specify the DiskStore directory on the command line or in an environment variable. e.g. java -Dehcache.disk.store.dir=/u01/myapp/diskdir ... Thanks to Brian Chan and others for suggesting this one. Fixes 1898239.Greg Luck
AddAdd the ability to specify system property tokens using ${tokenname} in ehcache.xml which are then replaced when the configuration is loaded. Fixes 1743082.Greg Luck
UpdateUpdated the remote debugger with enhanced reporting and better documentation (See Logging page in the documentation). The new version prints a list of caches with replication configured, prints notifications as they happen, and periodically prints the cache name, size and total events received. Fixes 1912953.Greg Luck
FixSimplePageCachingFilter returns same content for GET and HEAD. This one is an edge case that can happen. Thanks to Vitaly Baranovsky for the patch. Fixes 812270.Greg Luck
FixChange CachingFilter to use setHeader rather than addHeader which was duplicating some headers. Fixes 1890915.Greg Luck
FixUpdated the JavaDoc to clarify the meaning of the constant SHORT_DELAY. Fixes 1936731.Greg Luck
FixFixed inefficient shutdown of cache when the cache is not diskPersistent. Fixes 1888993.Greg Luck
FixCorrected ehcache.xsd so that minOccurs of cache can be 0. This makes ehcache-default.xml legal. Thanks to Andreas Sahlbach for reporting this. Fixes 1938744.Greg Luck
FixFixed Cache destroy exception where Hibernate and Spring are both shutting down during undeploying application. Fixes 1901094.Greg Luck

Release 1.4.1 - 2008-02-21

TypeChangesBy
Fixehcache-failsafe.xml was not being included in the maven package. Moved it to resources so that now it is. Fixes 1895147.Greg Luck
FixJCache.getAll wraps values in Element. One place was missed in the fix for this in 1.4.0. Now all correct. Fixes 1831823.Greg Luck
FixFixed error in Cache.remove/Ehcache.remove JavaDoc Fixes 1887638.Greg Luck

Release 1.4.0 - 2008-1-31

TypeChangesBy
FixUpdate backport-concurrent version to 3.1. This version is available for all versions of Java including 6. Fixes 1819841.Greg Luck
FixTuned a few unit tests use of Thread.sleep due to the Windows timing service of inaccurate aperture. Some tests that used an added 10ms to allow for Windows now allow for 20ms, based on research published in this bug report. Fixes 1880042.Greg Luck
FixRemoved one last thread renaming method. The others were removed in 1831446. Thanks to Diogo Quintela for pointing this out. Fixes 1880042.Greg Luck

Release 1.4.0-beta2 - 2008-01-01

TypeChangesBy
FixNPE in MulticastKeepaliveHeartbeatReceiver when accessing processingThreadPool during startup. Fixes 1819841.Greg Luck
FixRMIAsynchronousCacheReplicator flushReplicationQueue change to speed it up and remove pausing. Thanks to Kyle Sampson for this one. Fixes 1816084.Greg Luck
FixRegisteredEventListeners is not thread-safe where listeners are being added and removed during operation. Fixed. Thanks to Geoffrey Arnold for pointing this out. Also removed final from class. Fixes 1811875.Greg Luck
FixCacheStatistics causes a NPE if used for fresh caches. Fixed. Fixes 1828351.Greg Luck
FixDropped thread renaming in SelfPopulating cache. A debug feature that has probably outlived its usefulness. Fixes 1831446.Greg Luck
Fixcache.getAllWithLoader should use a loadAll method for any keys not present in the cache rather than loading individually. This is a performance optimisation. Fixed. Fixes 1831817.Greg Luck
FixDivision by zero in RMIBootstrapCacheLoader.java where elements are non-null but empty, which causes bootstrap to fail, although gracefully. Fixed. Fixes 1846461.Greg Luck
FixStyle issue. Abuse of Exceptions. Fixed. Fixes 1831755.Greg Luck
FixJCache.getAll wraps values in Element. Fixed. Fixes 1831823.Greg Luck
FixReplication Thread of Default Cache not disposed. Fixed. Fixes 1802513.Greg Luck

Release 1.4.0-beta - 2007-08-26

TypeChangesBy
AddAdd CacheLoaders to ehcache configuration and core classes.Greg Luck
AddAdd CacheExceptionHandlers. The enable an exception handler to be registered with a cache so that it is called on exception rather than the exception being thrown.Greg Luck
AddAdd CacheExtensions. This is a generic facility which holds a reference to a cache and is bound to the cache lifecycle, making possible a wide variety of extensions to behaviour.Greg Luck
UpdateAdd a version number to the ehcache jar manifest as is the Apache convention. Fixes 1737269.Greg Luck
UpdateInclude all required libraries in the Sourceforge tarball download. Fixes 1752251.Greg Luck
UpdateUpdated FAQ and Dependency chapters in the documentation and the Release Notes to point out that backport-concurrent for Java 5 is not compatible with Java 6, but the Java 4 version is. Fixes 1756338.Greg Luck
FixLfuMemoryStore did not support Non-Serializable objects. Fixes 1744643.Greg Luck
FixExcessive CPU and (debug) logging when multicast send fails. Added a sleep to reduce the log spam when multicast is being blocked by a firewall. Continuous log messages obscure the network configuration issue. Thanks to Ronald Tschal for the bug report and patch. Fixes 1755263.Greg Luck
FixNPE during CacheManager shutdown with persistent disk cache only where the maxElementsOnDisk=1. Thanks to James Shaw for the bug report. Fixes 1759740.Greg Luck
Fixi18n issue in the PageFragmentCachingFilter. Thanks to David Sheldon for the bug report and fix. Fixes 1753349.Greg Luck
FixManualRMICacheManagerPeerProvider.listRemoteCachePeers lists no peers if one node is down. The manually configured cluster should list those peers that are available so that the cluster can continue until the missing node is restored. Fixes 1739612.Greg Luck

Release 1.3.0 - 2007-06-11

TypeChangesBy
FixWhere the Hibernate EhCacheProvider or SingletonEhCacheProvider is being used with a configurationResourceName to load an ehcache configuration other than default, when it is not found in the classpath, no warning or other failure occurs. Ehcache will instead load itself from defaults. Added a warning message to indicate that a configurationResourceName was specified but could not be found. This should simplify debugging. Thanks to Robert Watkins for raising this issue. Fixes 1728071.Greg Luck
FixRMIRegistry is now stopped if it was started by ehcache. This fixes a classloader memory leak on redeploy and reload in app servers. Thanks to Stefan Fleiter for supplying a patch. Fixes 1728780.Greg Luck
FixTweak to bootstrap to check for expired elements. It will skip expired elements rather than failing the bootstrap. Thanks to Stefan Fleiter for supplying a patch. Fixes 1728950.Greg Luck
FixPropertyUtil.parseProperties using a JDK 1.5+ only feature. This issue was introduced in 1.3.0-beta3. Thanks to Ben Piper for pointing this out. Fixes 1732424.Greg Luck
FixDiskStore trace message for put back ups should only log when the DiskStore is backed up. Thanks to Stefan Fleiter for this one. Fixes 1730999.Greg Luck

Release 1.3.0-beta3 - 2007-05-27

TypeChangesBy
AddAdd the ability to specify the property separator for the properties element in factory configurations. This is a new attribute propertySeparator that can be used in ehcache.xml configuration files.Greg Luck
UpdateEnable the DiskStore to be programmtically pluggable in the Store hierarchy. Thanks to Matt Magoffin for the patch.Greg Luck
UpdateApplied minor patch to Element to allow it to be easily persisted using mechanisms other than Java Serialization. Thanks to Matt Magoffin for the patch.Greg Luck
FixProblems when peer lookup fails when receiving heartbeats because heartbeat receiving is single-threaded. This issue affects dirty or misconfigured networks or clusters. It hardens ehcache so that valid peers can still form a cluster in the presence of Naming.lookup() problems with one or more peers. Thanks to Daniel Weill and Fredrik Bertilson for reporting this and Daniel for supplying a patch. The patch changes the heartbeat receiving implementation to be multi-threaded so that one bad peer cannot bring the others down. Fixes 1715492.Greg Luck
UpdateEhcache does asynchronous puts to the DiskStore. In previous version the amount of memory that could be used for spool buffering was unlimited. In very high load situations with limited memory this could cause OutOfMemory erros. This version introduces a diskSpoolBufferSizeMB configured per cache with a default of 30MB. Set this value to control the maximum amount of memory each cache DiskStore spool can consume. The default of 30MB should work well for backward compatibility. If you notice your DiskStore performance is affected negatively, increase diskSpoolBufferSizeMB. Fixes 1720152.Greg Luck

Release 1.3.0-beta2 - 2007-5-1

TypeChangesBy
FixFix issue reported by Fredrik Bertilsson regarding peers entering and leaving a cluster, where the reentered peer would never get updates.Greg Luck
FixFixed RMICachePeer.getElements so that it does not allow null elements. Fixes 1703340.Greg Luck
FixDiskStore SpoolThread is too slow under Java 1.6. The Spooling Thread was set to 2, on a scale of 1 to 10 from lowest to highest priority. Under JDK 1.6, this setting did not allocate enough CPU to enable the spool to be cleared in a given situation, whereas under JDK1.5 it did. This seems to be a bug in JDK6. The priority is now set to Thread.NORMAL_PRIORITY, which is 5. Fixes 1681308.Greg Luck
UpdateDistributed cache - flushing replicationQueue on dispose. We should flush the replication queue rather than clear it on dispose. Fixes 1684223.Greg Luck
FixFix clone problem introduced in 1.3-beta. This affects caches created from the default cache. Thanks to Erik Voorbraak for reporting this. Fixes 1704257.Greg Luck
FixAdd note to sample ehcache.xml and documentation about the reserved cache name "default". Fixes 1694609.Greg Luck
UpdateThe shutdown hook is now turned off by default. Set the system property net.sf.ehcache.enableShutdownHook=true to turn it on.Greg Luck
FixDocument known issue with Tomcat. The presence of multiple <Host> entries in Tomcat's server.xml prevents replication from occuring. Thanks to David Patton for reporting this. Fixes 1706854.Greg Luck
FixMake clear in the JavaDoc documentation in Cache that RemoteCacheException can be thrown by calls to put, remove and removeAll when the cache replication policy is synchronous and a remote peer is unavailable. Thanks to Christopher G. Stach II for reporting this issue. Fixes 1680964.Greg Luck

Release 1.3-beta1 - 2007-3-9

TypeChangesBy
AddAdded a net.sf.ehcache.jcache package, which is an implementation of JSR107, backed by ehcache.Greg Luck
AddAdded a net.sf.ehcache.management package, which contains full JMX instrumentation for ehcache.Greg Luck
FixStatistics Variables Need to be Longs. Changed internal representation to long in Cache, kept the direct getters for backwards compatible and changed the new Statistics class to be long based. Use getStatistics() to access the longs with out loss of precision. Reapplied. Somehow this got lost from 1.2.4. Fixes 1588796.Tony Voss
FixFilter was rethrowing IOException as ServletException. The spec is clear that IOException is thrown as well. Catching these and rethrowing them as ServletException causes these IllegalStateException in Glassfish.Chris Ryan
FixJBoss, Spring and some other applications have shutdown hooks. A race condition existed in CacheManager#shutdown() such that multiple shutdown hook threads could attempt to shutdown the CacheManager at the same time. Added class synchronization to prevent this and also added a check for the system property net.sf.ehcache.disableShutdownHook=true which will disable addition of the shutdown hook. Reported by various people. Note: In ehcache-1.3-beta2 and higher the shutdown hook is off by default. The above property has no effect. Set the system property net.sf.ehcache.enableShutdownHook=true to enable it. Fixes 1616492.Greg Luck
FixElement#equals(Object) causes ClassCastException when the comparison object is not an Element. Fixed. Fixes 1618798.Greg Luck
FixGzipFilter corrupts UTF-8 encoded non-Latin characters. Fixed. Thanks to Matt Raible and Konstantin Kolinko for the bug report and Kolodin for the patch. This issue also affected the CachingFilter. Fixes 1636876.Greg Luck
FixFix bug in RMIBootstrapCacheLoader.doLoad. If the first element in the remote cache is null, no bootstrapping will take place. Fixed. Thanks to Ben Piper for reporting this one and the fix. Fixes 1664030.Greg Luck
FixFix issue reported by Fredrik Bertilsson regarding peers entering and leaving a cluster, where the reentered peer would never get updates.Greg Luck
FixFix bug for the combination of Automatic Peer Discovery and synchronous bootstrapping. Fixes 1661328.Greg Luck
RemoveRemoved the JNDI manual listener and peer provider. This was proving difficult to maintain. Custom listeners and providers are pluggable and can be added as an extension to ehcache.Greg Luck

Release 1.2.4 - 2006-12-31

TypeChangesBy
UpdateConsolidate shutdown hooks to one on each CacheManager instance.Greg Luck

Release 1.2.4RC - 2006-11-26

TypeChangesBy
RemoveDropped support for JDK1.3. Resulting changes are proper chained exceptions, and no longer requiring commons-collections. This enables some simplifications in the code base and eases maintenance.Greg Luck
AddAdded a maxElementsOnDiskStore attribute to cache. This lets disk stores be bounded. ehcacheLFU eviction is used to decide which element to evict.Greg Luck/Jody Brownell
AddCombined the DiskStore's expiry and spool threads. They were competing for the same locks anyway. This reduces the maximum number of threads used from 2 to 1 per DiskStorwe.Greg Luck/Jody Brownell
AddEnable the timeToLive to be set on the cacheManagerPeerProviderFactory. This enables the spread of multicast packets to be controlled from a single host to the Internet. The default is 1, which is the same as the Java default so the default behavior will not change for existing users. Fixes 1588976.Tony Voss
FixFix typo in lock timeout log message in BlockingCache. Thanks to Matt Magoffin for reporting this bug. Fixes 1574735.Greg Luck
FixFix issue where it is not possible to specify a DiskStore path consistently on all operating systems. This is a workaround to a JDK bug. Always create paths like "java.io.tmpdir/cache". Any trailing characters to java.io.tmpdir added for windows and solaris will be removed and placed with a single file separator. Fixes 1579761.Greg Luck
FixFixed NullPointerException on Cache.evictExpiredElements() and added some other NPE guards to Cache. Fixes 1563017.Greg Luck
FixSynchronous bootstrap and manual peer discovery combination does not work because the first cache to start always fails. This is normal and the CacheManager should cope with it. Added a catch and log a message when this happens. Thanks to Patrick Galley for the bug report. Fixes 1585015.Greg Luck
Fixehcache.xsd diskStore path defined as xs:NCName Fixes 1589004.Greg Luck
FixFix documentation error: Ehcache provider package inconsistent Fixes 1589451.Greg Luck
FixFixed NPE when both DiskStore path is not configured and DiskStorePath is not being used. Thanks to mdillon for the patch. This was also reported under the above bug number. Fixes 1593099.Greg Luck
FixCachingFilter and its subclasses now work when upstream filters or servlets return 404 or 302, 301.Greg Luck
FixFixed rare ConcurrentModificationException in getBoundCachePeers. Thanks to Tony Voss Fixes 1584776.Greg Luck
FixHarden heartbeat sender for IOExceptions and large peer sizes. Thanks to Tony Voss for the patch. Fixes 1583996.Greg Luck
FixReduce network utilisation for distributed caching through the optimisation of only doing a Naming.lookup(url) when the url has not been seen before. Fixes 1584041.Greg Luck
FixVarious fixes to web package to make filters work on Sun Application Server 9 and Tomcat in addition to Orion. Add support for errors and redirects passing through filters.Greg Luck
FixMultiple multicast packets sends multiple heartbeats Fixes 1592324.Tony Voss
FixInfinite recursion in BlockingCache.getKeysNoDuplicateCheck Fixes 1591711.dguist
FixStatistics Variables Need to be Longs. Changed internal representation to long in Cache, kept the direct getters for backwards compatible and changed the new Statistics class to be long based. Use getStatistics() to access the longs with out loss of precision. Fixes 1588796.Tony Voss

Release 1.2.3 - 2006-9-2

TypeChangesBy
AddCache.remove doesn't fire listeners if element didn't exist. This stopped cluster removes from working where the local cache does not have the element cached. Thanks to Elijah Epifanov for reporting this one and arguing the case for this behaviour Fixes 1524597.Greg Luck
AddAllow references to ehcache.xsd in ehcache XML files. All of the ehcache.xml files have had the schema reference added. This allows easy validation of ehcache.xml configuration files using tools like Eclipse and IntelliJ. Thanks to Gabriel Klein for suggesting this. Fixes 1540653.Greg Luck
AddAdded a new property asynchronousReplicationIntervalMillis to the RMICacheReplicator factory configuration to control the interval at which it runs. The default is 1000ms, which is the value it was hardcoded too in earlier versions. Fixes 1540657.Greg Luck
AddAdded a new notifyRemoveAll cache event notification as requested by users. Called during Ehcache#removeAll() to indicate that the all elements have been removed from the cache in a bulk operation. The usual notifyElementRemoved is not called. This notification exists because clearing a cache is a special case. It is often not practical to serially process notifications where potentially millions of elements have been bulk deleted.Greg Luck
AddAdded a new notifyElementEvicted cache event notification as requested by users. Called immediately after an element is evicted from the cache. Evicted in this sense means evicted from one store and not moved to another, so that it exists nowhere in the local cache. In a sense the Element has been removed from the cache, but it is different, thus the separate notification. The usual notifyElementRemoved is not called.Greg Luck
UpdateAsynchronous replication / soft references. There is a trade off between OutOfMemory risk and replication correctness. Change the RMIAsynchronousCacheReplicator so that Elements are SoftReference, not all EventMessages. The result is that put and update via copy may be SoftReference collected, but remove and update via remove will always go through. Fixes 1523915.Greg Luck
UpdateChange Cache#getQuiet so that cache statistics are not updated. This is a sensible API change and probably always should have worked this way.Greg Luck
UpdateOpen up some classes by removing final keyword and changing the constructors to public.Greg Luck
FixFix isssue where a distributed cache can take up to a minute to shutdown. This issue affected web container and application server shutdowns. The fix is to unbind RMICachePeers before unexporting them. Thanks to Lennard Fuller and Peter Chiang for finding and fixing this hard one. Fixes 1532610.Greg Luck
FixFixed a few broken links and inconsistencies in the documentation. Fixes 1529506.Greg Luck
FixBad dependency scopes in Maven2 POM. Most dependencies are required only at test time. Changed the pom to reflect this. Fixes 1542696.Greg Luck
FixSynchronous replicators in a cluster can deadlock trying to replicate to each other. The deadlock gets resolved by a SocketTimeoutException depending on what you set it too. Reduce synchronization around gets, puts and removes so that listener notification is not synchronized, which resolves this problem. Fixes 1540322.Greg Luck
FixFixed a bug where in BlockingCache and SelfPopulatingCache where setTimeoutMillis was set to a non zero value. Fixes 1550043.Greg Luck
FixLarge TTL values cause expire time to be incorrect in Element. Changed ONE_SECOND from an int to a long which fixes the issue. Fixes 1548314.Greg Luck

Release 1.2.2 - 2006-7-17

TypeChangesBy
AddAdded a ShutdownListener which implements ServletContextListener for shutting down all CacheManagers in a web application. Fixes 1521843.Daniel Wiell
FixIf you put an Element with overridden TTL and TTI values and then replace it with an Element with defaults, the new Element lives forever. putQuiet is not affected by this bug. Thanks to Pete at Goodtech for finding this one. Note that a symptom of this bug for caches that overflow to disk is an endlessly growing .data file for the Cache. Fixes 1516447.Greg Luck
FixReduce the memory used by flushSpool() in DiskStore. See http://gregluck.com/blog/archives/2006/07/tuning_memory_u.html for details.Greg Luck
FixCache names with slashes cause problems. Tightened the validation code around setting a cache name. Now throw IllegalArgumentException if a cache name is null or contains '/'. Thanks to Daniel Wiell for repoting this one and suggesting the fix. Fixes 1521699.Greg Luck
FixLoading an element from the disk store fails in some circumstances due to classloading issues. This issue was created by a patch to fix 1324221 back in October 2005. Resolved by trying the new way and then, if a ClassNotFoundException is thrown, doing it the old way. Fixes 1517565.Greg Luck
FixCachingFilter should not change Thread name. Now sets it back to the original when done. Fixes 1513436.Greg Luck

Release 1.2.1 - 2006-7-2

TypeChangesBy
AddChange Blocking cache to use a lock striping technique for its Mutexes. This limits the number of Mutexes to 100, rather than a number equalling the number of keys, while preserving excellent liveness and safety. Thanks to Olaf Krische for reporting this and Brian Goetz for assisting with a solution. Fixes 1492900.Greg Luck
AddChange BlockingCache and SelfPopulatingCache to act as decorators for Ehcache. Remove now redundant BlockingCacheManager and SelfPopulatingCacheManager. Change signatures of these caches from Serializable to Object. This change is not backward compatible but no libraries use these, so developers can change over on their own projects.Greg Luck
FixThis was reported by Victor Volle and is a duplicate of 1492900. Fixed. Fixes 1190614.Greg Luck
FixChanging all classloading to the context classloader is sometimes inconvenient. Fallback to ClassLoaderUtil.class.getClassLoader() if Thread.currentThread().getContextClassLoader() fails. Thanks to Robert Watkins for reporting this one. Fixes 1506399.Greg Luck
FixDebug messages generate excess String objects. Added logging level guards around about 6 debug log statements. Thanks to Derek Hulley for pointing this one out. Fixes 1508623.Greg Luck
FixHarden all ehcache threads so that RuntimeExceptions and Errors do not stop them. This change, on its own, has been backported to a separate release, ehcache-1.2.0_01.Greg Luck
UpdateChange spooling mechanism to use less memory, so as to avoid memory spikes.Greg Luck

Release 1.2.1RC - 2006-6-4

TypeChangesBy
AddAdded the constructs package which was previously a separate module. The constructs package adds valuable functionality and given that the 1.2 jar size is large, can be added with only a small increase in jar size.Greg Luck
AddAllow zeroconf of RMICacheManagerPeerListenerFactory. A configuration <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/> will now work. The listener port will be automatically assigned a free port. Fixes 1483735.Greg Luck
AddNew SingletonEhCacheProvider for use by Hibernate in situations where code has been written which relies on the singleton behaviour of ehcache-1.1 and earlier. Most code bases using Hibernate should not require this.Greg Luck
AddAllow cacheEventListenerFactory elements to be added to defaultCache in ehcache.xml. This allows caches created with CacheManager.addCache(String cacheName) to receive events. This can be used for example to set default replication settings in defaultCache.Greg Luck
AddTo complement full support foe default cache (above), added support for programmatic addition of caches which include CacheReplicators. Also support for removal of these caches with CacheManager.remove(String cacheName).Greg Luck
AddAndy McNutt's JNDI-based manual RMI replication added. See ehcache.xml example for how to use.Greg Luck
AddSupport tomcat 5.5 for the servlet filters. Tomcat integration testing, in addition to the Orion one, is also added to the full JUnit test process. Tomcat relies on Servlet 2.4 dispatcher INCLUDE and FORWARD directives for page fragment caching.Greg Luck
AddSupport runtime setting of individual Element time to lives, time to idles and eternal overrides. If an override is set, the Element expiry ignores the Cache default.Greg Luck
AddAdd a cache bootstrap mechanism. This is used to populate a cache when it is first initialized. An abstract factory, BootstrapCacheLoaderFactory has been defined along with an interface BootstrapCacheLoader. The initial concrete implementations are for RMI, so that a new cache entering a cluster gets bootstrapped from a randomly chosen peer.Greg Luck
AddAllow CacheManager instances to use the same ehcache.xml configuration. Automatically resolve conflicts for DiskStore and CacheManagerPeerListener. Log a warning that the conflict existed and what was done to resolve it along with a suggestion to either use ehcache in singleton mode or specify separate ehcache.xml configurations for each CacheManager instance.Greg Luck
FixTheoretically possible NPE if a MulticastRMICacheManagerPeerProvider is started and then stopped before a multicast socket connection can be established. Added guard for NPE. Thanks to Roman Kurmanowytsch for reporting the issue and a fix. Fixes 1480442.Greg Luck
FixAdd shutdown hook to RMICacheManagerPeerListener so that, even if CacheManager.shutdown() is not called, processes still exit cleanly. This is a bug rather than a feature request because Cache has a shutdown hook to always cleanly shut down disk store, and ehcache should be consistent in supporting shutdown hooks. Fixes 1485765.Greg Luck
FixIn GzipFilter and CachingFilter Gzipping an empty response body creates 20 byte responses. Fixed so that this situation is detected and a zero bytes gzipped body, with a content length also of 0 is returned. Can occur in 204 and 304 responses. Fixes 1486858.Greg Luck
FixChanged localhost lookup to a static in Cache, to avoid a potential bottleneck when creating and destroying large numbers of caches rapidly. Thanks to Derek Hully for the bug report and suggested fix. Fixes 1488853.Greg Luck

Release 1.2 - 2006-4-25

TypeChangesBy
FixChanging the API to Object from Serializable breaks projects. Leave the existing Serializable API in place and add new constructors and methods for Object. Add getObjectValue and getObjectKey to Element. Fixes 1473833.Greg Luck
FixClosing Cache does not remove reference from DiskStore, preventing Garbage Collection of DiskStore and Cache on dispose of a cache. Fixed to set Cache reference to null on dispose. Thanks to Felix Meschberger for the patch. Fixes 1474363.Greg Luck
FixClosing Cache does not remove shutdown hook, preventing Garbage Collection of a Cache with a persistent DiskStore on dispose of a cache. Fixed to remove the shutdown thread after dispose. Thanks to Felix Meschberger for the patch. Fixes 1474360.Greg Luck

Release 1.2rc1 - 2006-4-17

TypeChangesBy
UpdateLicense updated to Apache 2.0.Greg Luck
UpdateFollowing many requests, ehcache no longer requires that Elements contain Serializable keys and values. Ehcache will gracefully degrade for those operations which require Serialization. In particular the MemoryStore and event listeners can be used with Non Serializable elements. WARNING error messages are logged when an operation cannot be completed because the key or value is not Serializable.Greg Luck
UpdateFeature Request 1458049 Wrap original exceptions during configuration. Added an intial cause Throwable field to CacheException to facilitate easier reporting without breaking pre JDK1.4 compatibility.Greg Luck
RemoveRemoved the old Hibernate plugin from the code base. It has been deprecated since the beginning of the 1.2 beta series. The plugin is being actively maintained in the Hibernate project. Any project still using net.sf.ehcache.hibernate.Plugin should change their Hibernate configurations to org.hibernate.cache.EHCacheProvider.Greg Luck
AddFeature Request 1081071. Added the ability to specify subdirectories under System Property paths. e.g. java.io.tmpdir/oneGreg Luck
AddFeature Request 1025706. Added the ability to specify a system property, net.sf.ehcache.disabled=true, to easily disable ehcache. A disabled cache works fully but discards and Elements added to it.Greg Luck
FixAdd protections to the DiskStore spoolThread against programming errors in Elements that can cause it to die. Secondly, if it does die, disable adding elements to the DiskStore and log an error, so as to gracefully degrade. Fixes 1432458.Greg Luck
Fixflush() was using up to double the memory used by a MemoryStore during flush() which could cause an OutOfMemory error on shutdown if memory was constrained. flush no longer causes any memory spike. Thanks to Sergey Nekoval for reporting the bug. Fixes 1369073.Greg Luck

Release 1.2beta5 - 2006-3-26

TypeChangesBy
AddIntroduced new caching policies in addition to the standard LRU. FIFO and LFU were added. LRU remains the default unless explicitly set in each cache's configuration. Thanks to Surya Suravarapu for working with me on these. The documentation has a new section on caching policies and when to use what.Surya Suravarapu
AddIntroduced CacheManagerEventListener and CacheEventListener interfaces and default implementations. These can be configured in ehcache.xml or set programmatically. Thanks to steve at jofti dot com for help with the specification for these.Greg Luck
AddAfter requests from Jo Walnes, Paul Hammant and others, I have added normal instance constructers to CacheManager which do not act as singletons. The factory singleton methods remain for backward compatibility. CacheManager can now be constructed with a Configuration object programmatically.Greg Luck
AddSince version 1.1, ehcache has had a persistent diskStore, which makes it suitable for storing application state. Added a flush method so that, if the cache is diskPersistent, it can be programmatically flushed, in addition to the automatic flush which happens at shutdown.Greg Luck
AddPluggable Distributed Caching. The default implementation supports cache discovery via multicast or manual configuration. Updates are delivered asynchronously or synchronously via custom RMI connections. Additional discovery or delivery schemes can be plugged in by third parties.Greg Luck
AddDiskStore is now up to 12 times faster in certain operations and much more scalable.Greg Luck
AddSignificant (up to 7 fold) DiskStore performance increases, after introduction of finer grained threading. Thanks to Robert Watkins for reporting on the performance limits.Greg Luck
UpdateClover test coverage raised to 86%.Greg Luck
UpdateFeature Request 431481 Distributed: The ability to notify cache event listeners excluding CacheReplicatorsGreg Luck
UpdateFeature Request 1431393 Events from remote in distributed cache should be received by any non CacheReplicator listenersGreg Luck
UpdatePatch 1158788. Fix for dependencies list... MemoryStore.java to remove Apache commons-collections for JDK1.4 usersGreg Luck
Fixchange default configuration to use context classloader Fixes 1122734.Greg Luck
FixFix for DiskStore to deserialize using Thread.currentThread().getContextClassLoader() Fixes 1324221.Greg Luck
FixCacheManager.shutdown now uses a Class rather than an instance lock. Fixes 1261613.Greg Luck
FixConfigurator gets a file not found when files contain spaces. Fixes 1237017.Greg Luck
FixDiskStore degrades under load. Fixes 1332728.Greg Luck
FixChange classloader to Thread.currentThread().getContextClassLoader() for ehache.xml. Fixes 1079529.Greg Luck
FixDiskStore data file is not deleted when index is corrupt. Fixes 1414674.Greg Luck
FixJavaDoc documentation fix for element.getLastAccessTime returns 0 for element just created Fixes 1224325.Greg Luck
FixDocumentation should advise using the Hibernate supplied plugin rather than the older one in ehcache which is now deprecated. Fixes 1247019.Greg Luck
FixFix bug introduced in 1.2 beta series. Removed Boolean.parseBoolean and java.util.Queue which were introduced in the JDK1.5 API to preserve backward compatibility.Greg Luck
FixFix bug introduced in 1.2 beta series. Changed ant script to avoid compiling with clover in distsGreg Luck
FixFix bug introduced in 1.2 beta series. Cannot load configuration from jar (or any non-file URL). Fixes 1410374.Greg Luck
FixFix bug introduced in 1.2 beta series. NPE on RMICacheManagerPeerProviderFactory when rmiUrls not specified. Now throws a meaningful CacheException. Fixes 1432074.Greg Luck
FixFix bug introduced in 1.2 beta series. Deadlock on deserialization of a cache entry. Thanks to Felix Meschberger for reporting the bug and uploading a patch. Fixes 1445694.Greg Luck
FixFix bug introduced in 1.2 beta series. Caches created with Cache.addCache(String) share a RegisteredEventListeners instance. Thanks to Olaf Ontaine for for reporting the bug and showing how it happens. Fixes 1457268.Greg Luck
FixFix bug introduced in 1.2 beta series. RMIAsynchronousCacheReplicator mishandling non-copy updates. Thanks to Randy Puro for a patch. Fixes 1451780.Greg Luck

Release 1.1 - 2004-11-23

TypeChangesBy
RemoveSplit out the entire constructs package. These are now in a new subproject: ehcache-constructs, which has been released. See http://ehcache.org/ehcache-constructs for more details.Greg Luck
Removeremoved the dependency on Doug Lea's concurrency library.Greg Luck
AddAdd new documentation on cache configuration and hibernate performance tuning.Greg Luck
FixExtra check to make sure that we always close persistent disk store's FileInputStream in the rare case where the ObjectInputStream is null. Fixes 1063908.Greg Luck

Release 1.0 - 2004-9-28

TypeChangesBy
AddAdded SelfPopulatingCacheManagerGreg Luck
AddAdded a new diskExpiryThreadIntervalSeconds configuration option to ehcache.xml, to allow tuning of the expiry thread per cache.Greg Luck
AddAdded a new diskPersistent feature and configuration option. diskPersistent makes disk stores persistent between CacheManager and JVM restarts. It enables very long held caches to be configured, useful for very expensive cache entries that are long lives, such as mapping geocodes.Greg Luck
FixExpiry Thread now has a default time of 2 minutes, not 25.Greg Luck
FixExpiry Thread now dies immediately on DiskStore disposal.Greg Luck
Fixcache.calculateInMemorySize() now returns a non-zero valueGreg Luck
FixBug 1025130 - Null Pointer Exception when no default cache configured. Now we throw a CacheException with a meaningful message.Greg Luck
FixBug 1025128 IBM Websphere alway requires commons-collection.jar, even though it is never used. Updated requirements to note this.Greg Luck
FixPatch 1030960. JDK1.4 and higher now chain exception thrown from SelfPopulatingCache.Greg Luck
Fix1033061 Fix to Thread naming in SelfPopulatingCache so that the old name is always put back.Greg Luck
Fix1003659 build script unfriendly to IDE: IDE builds should now work.Greg Luck

Release 0.9 - 2004-7-5

TypeChangesBy
Addehcache.xml cache definitions can now omit timeToIdle and/or timeToLive, which are now optional attributes. This will make cache config easier to read for eternal caches. Either omitting the attributes or setting them to 0 causes them not to be considered when calculating expiry. Earlier versions of ehcache would have immediately expired all elements if either attribute was set to 0, so this change should not break any existing code.Greg Luck
AddAdded getQuiet and putQuiet methods to Cache. These methods are the same as get and put but do not affect statistics.Greg Luck
AddImplemented an Element clone method.Greg Luck
AddAdded calculateInMemorySize() method to Cache to measure the approximate size of a cache's memory footprint.Greg Luck
UpdateIncreased Clover test coverage to above 80%.Greg Luck
UpdateAdded many new tests for idle expiry.Greg Luck
UpdateAdded tests for the new constructs package. These tests demonstrate concurrency performance differences between blocking cache designs based on notify/notifyAll and Doug Lea's concurrency package.Greg Luck
UpdateTest new xml format scenarios for eternal, time to idle and time to liveGreg Luck
UpdateStarted adding performance tests to ensure there are no regressions over time.Greg Luck
AddAdded a new constructs package. There are blocking, self populating and self populating collections caches. These are all pull-through caches. They are useful where the cost of creating an entry is high. Details follow: BlockingCache - a cache which blocks subsequent threads until the first read thread populates a cache entry <br/><br/> SelfPopulatingCache - a read-through cache. A cache that populates elements as they are requested without requiring the caller to know how the entries are populated. It also enables refreshes of cache entries without blocking reads on the same entries. <br/> <br/> SelfPopulatingCollectionsCache - a SelfPopulatingCache that adds threading safety where it is known in advance that all entries will be collections. <br/> <br/> The package is useful for, inter alia, : <br/><br/> - Web Page caches <br/> - Search Engine caches<br/> <br/><br/> See the tests for examples of how to use this package. <br/><br/> This package requires Doug Lea's concurrency library. A copy is provided in the tools directory when you check out the project by SVN. Or, you can get it from http://gee.cs.oswego.edu/dl/cpj/ Note that if you are not using the constructs package, you do not need the concurrency library.Greg Luck
FixJavaDoc fixupsGreg Luck
FixFixed time to idle which was not expiring elements after the idle time had expired. This feature did not seem to be getting used. It is now useable. Fixed the test which was also brokenGreg Luck
FixFixed bugs with getSize and getKeys, which were not checking for duplicate keys between the memory and disk stores.Greg Luck

Release 0.8 - 2004-5-15

TypeChangesBy
AddInvestigated a Hibernate SessionFactory bug and clarified it was not a Hibernate bug. Added test.Greg Luck
AddInvestigated a cache size possible bug and clarified it is not in EHCache. Added test.Greg Luck
AddAdded Clover test coverage reporting. Clover instrumentation is not included in release jars.Greg Luck
AddUpdated Hibernate testing to version 2.1.1Greg Luck
AddModified the Apache license at the request of the Apache Cocoon project.Greg Luck
FixFixed a very rare null pointer exception, when retrieving a cache entry.Greg Luck

Release 0.7 - 2004-1-2

TypeChangesBy
FixCache Configuration Fixed null pointer exception where the disk store path was not specified when use disk store is set to falseGreg Luck
FixJDK1.3 Compatibility Replaced JDK1.4 Exception constructors with simple message constructors compatible with JDK1.2 and 1.3Greg Luck
FixProblem with Element expiry Fixed bug where expiry checking on get was calling remove with the element rather than the key.Greg Luck
FixExpire thread should not run if the cache is not active Changed the expire thread to while(active)Greg Luck
FixExpiry thread unnecessarily being created for eternal caches Skipped creating the expiry thread if caches are eternal.Greg Luck

Release 0.6 - 2003-12-8

TypeChangesBy
RemoveRemove SoftReferences SoftReferences for cache element values has been replaced with standard references. The JDK 1.4.2 JVM was found to remove SoftReferences in normal operation, rather than the expected behaviour of use only to avoid memory exhaustion. Caches will now behave deterministically. Element values will only be removed when the element is garbage collected.Greg Luck
FixHibernate Cache Provider. Fixed bug where incompatible timestamps were generatedGreg Luck
FixTime to Idle" documentation bug.Greg Luck
FixFixed documentation bug in ehcache.xml and ehcache-failsafe.xml where "Time to Live" was incorrectly referred to as "Time to Idle"Greg Luck

Release 0.5 - 2003-11-18

TypeChangesBy
AddChanged from JDK1.4 Logging to Commons Logging. This is to permit JDK1.2 and JDK1.3 to use EHCache.Greg Luck
AddAdded Apache Commons Collections LRUMap as an alternative backing Map for the MemoryStore. The java.util.LinkedHashMap has been retained and is used automatically for JDK1.4 and higher.Greg Luck
AddAdded LICENSE.txt to the jar in the distributionGreg Luck
FixDon't create a Disk Store when overflowToDisk="false" is set in ehcache.xmlGreg Luck
FixtoString() methods now report on all fieldsGreg Luck
FixFixed documentation bug in ehcache.xml and ehcache-failsafe.xml where "Time to Live" was incorrectly referred to as "Time to Idle"Greg Luck

Release 0.4 - 2003-11-13

TypeChangesBy
AddInitial version, originally based on a fork from JCS plus donated patches.Greg Luck