$Id: CHANGELOG.txt,v 1.31 2006/03/07 00:05:56 gregluck Exp $ ehcache-1.2.0_02 ================ Reduce the memory used by flushSpool() in DiskStore. See http://gregluck.com/blog/archives/2006/07/tuning_memory_u.html for details. ehcache-1.2.0_01 ================ Backport from ehcache-1.2.1. All threads catch any Throwables in their main loops. Additional reporting around thread death. This fixes an issue where a VM error can cause the threads to stop. If the error is recoverable (a minority of cases) the application can now continue. ehcache-1.2 =========== ehcache-1.2. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1. Changing 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 Closing 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 Closing 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 ehcache-1.2rc1 ============== ehcache-1.2 release candidate 1. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1. License updated to Apache 2.0. Greg Luck Following 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 Feature 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 Removed 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 Feature Request 1081071. Added the ability to specify subdirectories under System Property paths. e.g. java.io.tmpdir/one Greg Luck Feature 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 Add 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 flush() 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 ehcache-1.2 beta5 ================= This changelog covers beta1 to beta5. ehcache-1.2 represents the addition of many new features while remaining backward compatible with 1.1. Introduced 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 Introduced 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 After 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 Since 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 Pluggable Distributed Caching. The default implementation supports cache discovery via multicast or manual configuration. Updates are delivered asynchronously or s ynchronously via custom RMI connections. Additional discovery or delivery schemes can be plugged in by third parties. Greg Luck DiskStore is now up to 12 times faster in certain operations and much more scalable. Greg Luck Significant (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 Clover test coverage raised to 86%. Greg Luck Feature Request 431481 Distributed: The ability to notify cache event listeners excluding CacheReplicators Greg Luck Feature Request 1431393 Events from remote in distributed cache should be received by any non CacheReplicator listeners Greg Luck Patch 1158788. Fix for dependencies list... MemoryStore.java to remove Apache commons-collections for JDK1.4 users Greg Luck change default configuration to use context classloader Fixes 1122734. Greg Luck Fix for DiskStore to deserialize using Thread.currentThread().getContextClassLoader() Fixes 1324221. Greg Luck CacheManager.shutdown now uses a Class rather than an instance lock. Fixes 1261613. Greg Luck Configurator gets a file not found when files contain spaces. Fixes 1237017. Greg Luck DiskStore degrades under load. Fixes 1332728. Greg Luck Change classloader to Thread.currentThread().getContextClassLoader() for ehache.xml. Fixes 1079529. Greg Luck DiskStore data file is not deleted when index is corrupt. Fixes 1414674. Greg Luck JavaDoc documentation fix for element.getLastAccessTime returns 0 for element just created Fixes 1224325. Greg Luck Documentation should advise using the Hibernate supplied plugin rather than the older one in ehcache which is now deprecated. Fixes 1247019. Greg Luck Fix 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. Fixes . Greg Luck Fix bug introduced in 1.2 beta series. Changed ant script to avoid compiling with clover in dists Fixes . Greg Luck Fix bug introduced in 1.2 beta series. Cannot load configuration from jar (or any non-file URL). Fixes 1410374. Greg Luck Fix bug introduced in 1.2 beta series. NPE on RMICacheManagerPeerProviderFactory when rmiUrls not specified. Now throws a meaningful CacheException. Fixes 1432074. Greg Luck Fix 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 Fix 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 Fix bug introduced in 1.2 beta series. RMIAsynchronousCacheReplicator mishandling non-copy updates. Thanks to Randy Puro for a patch. Fixes 1451780. Greg Luck ehcache-1.1 =========== Feature Changes --------------- 1. Split out the entire constructs package. These are now in a new subproject: ehcache-constructs, which has been released. See http://ehcache.sf.net/ehcache-constructs for more details. 2. Consequenty removed the dependency on Doug Lea's concurrency library. 3. Add new documentation on cache configuration and hibernate performance tuning. Bug Fixes --------- 1. 1063908 Extra check to make sure that we always close persistent disk store's FileInputStream in the rare case where the ObjectInputStream is null. ehcache-1.0 =========== Feature Changes --------------- 1. Added SelfPopulatingCacheManager 2. Added a new diskExpiryThreadIntervalSeconds configuration option to ehcache.xml, to allow tuning of the expiry thread per cache. 3. Added 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. Bug Fixes --------- 1. Expiry Thread now has a default time of 2 minutes, not 25. 2. Expiry Thread now dies immediately on DiskStore disposal. 3. cache.calculateInMemorySize() now returns a non-zero value 4. Bug 1025130 - Null Pointer Exception when no default cache configured. Now we throw a CacheException with a meaningful message. 5. Bug 1025128 IBM Websphere alway requires commons-collection.jar, even though it is never used. Updated requirements to note this. 6. Patch 1030960. JDK1.4 and higher now chain exception thrown from SelfPopulatingCache. 7. 1033061 Fix to Thread naming in SelfPopulatingCache so that the old name is always put back. 8. 1003659 build script unfriendly to IDE: IDE builds should now work. ehcache-0.9 =========== Feature Changes --------------- 1. ehcache.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. 2. Added getQuiet and putQuiet methods to Cache. These methods are the same as get and put but do not affect statistics. 3. Implemented an Element clone method. 4. Added calculateInMemorySize() method to Cache to measure the approximate size of a cache's memory footprint. 5. Added 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 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. SelfPopulatingCollectionsCache - a SelfPopulatingCache that adds threading safety where it is known in advance that all entries will be collections. The package is useful for, inter alia, : * Web Page caches * Search Engine caches See the tests for examples of how to use this package. This package requires Doug Lea's concurrency library. A copy is provided in the tools directory when you check out the project by cvs. 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. Bug Fixes --------- 1. JavaDoc fixups 2. Fixed 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 broken 3. Fixed bugs with getSize and getKeys, which were not checking for duplicate keys between the memory and disk stores. Testing ------- 1. Increased Clover test coverage to above 80%. 2. Added many new tests for idle expiry. 3. Added 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. 4. Test new xml format scenarios for eternal, time to idle and time to live 5. Started adding performance tests to ensure there are no regressions over time. ehcache-0.8 =========== Bug Fixes --------- 1. Fixed a very rare null pointer exception, when retrieving a cache entry. Testing ------- 1. Investigated a Hibernate SessionFactory bug and clarified it was not a Hibernate bug. Added test. 2. Investigated a cache size possible bug and clarified it is not in EHCache. Added test. 3. Added Clover test coverage reporting. Clover instrumentation is not included in release jars. 4. Updated Hibernate testing to version 2.1.1 Licensing --------- 1. Modified the Apache license at the request of the Apache Cocoon project. ehcache-0.7 =========== Bug Fixes --------- 1. Cache Configuration Fixed null pointer exception where the disk store path was not specified when use disk store is set to false 2. JDK1.3 Compatibility Replaced JDK1.4 Exception constructors with simple message constructors compatible with JDK1.2 and 1.3 3. Problem with Element expiry Fixed bug where expiry checking on get was calling remove with the element rather than the key. 4. Expire thread should not run if the cache is not active Changed the expire thread to while(active) 5. Expiry thread unnecessarily being created for eternal caches Skipped creating the expiry thread if caches are eternal. ehcache-0.6 =========== Bug Fixes --------- 1. Hibernate Cache Provider. Fixed bug where incompatible timestamps were generated 2. "Time to Idle" documentation bug. Fixed documentation bug in ehcache.xml and ehcache-failsafe.xml where "Time to Live" was incorrectly referred to as "Time to Idle" Feature Changes --------------- 1. Remove 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. ehcache-0.5 =========== Bug Fixes --------- - Implemented not creating a Disk Store when overflowToDisk="false" is set in ehcache.xml - toString() methods now report on all fields Feature Changes --------------- - Changed from JDK1.4 Logging to Commons Logging. This is to permit JDK1.2 and JDK1.3 to use EHCache. - Added 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. - Added LICENSE.txt to the jar in the distribution ehcache-0.4 =========== - Initial version, originally based on a fork from JCS plus donated patches.