$Id: Changelog.txt,v 1.15.2.2 2006/05/08 18:13:51 msurtani Exp $


Release 1.3.0.SP2 (May 08, 2006)
================================

A bug fix release.

** Bug
    *  [ JBCACHE-587 ] Fqn.getName() directly casts to String
    *  [ JBCACHE-592 ] JBossCache AS integration produces exception
    *  [ JBCACHE-606 ] TimeoutException (and lock ownership problem) under load test
    *  [ JBCACHE-612 ] Race condition with 2-PC and pessimistic locking

Release 1.3.0.SP1 (April 13, 2006)
==================================

A bug fix release.

** Bug
    *  [ JBCACHE-531 ] cache loader file location property isn't parsed correctly under JBoss AS
    *  [ JBCACHE-532 ] Calling getRegion() before getRegions() on RegionManager may cause a condition where the defaultRegion always gets used.
    *  [ JBCACHE-534 ] Sample configuration in JBoss Cache 1.3.0 documents is improper XML
    *  [ JBCACHE-539 ] Incorrect path specified in runShellDemo.sh
    *  [ JBCACHE-548 ] Transaction synchronisation afterCompletion() fails when using WebLogic TM
    *  [ JBCACHE-567 ] TreeCacheAop transaction need to handle RollbackException 

Release 1.3.0.GA (March 31, 2006)
==================================

A new feature release, containing Invalidation as a new cache mode, optimistic locking, much better Hibernate
integration and interoperability, new remote delegating cache loaders, much improved overall cache loader
performance, ability to configure more than one cache loader per cache instance, and a new Option API for
overriding specific configuration elements on a per-request basis.

Release Notes - JBoss Cache - Version 1.3.0

** Feature Request
    * [JBCACHE-47] - Dynamic eviction region configuration programmatically
    * [JBCACHE-56] - Expose JBossCache management attributes
    * [JBCACHE-68] - Singleton CacheLoader
    * [JBCACHE-69] - Optimistic Locking
    * [JBCACHE-88] - Add RemoteDelegatingCacheLoader
    * [JBCACHE-100] - RMI-based DelegatingCacheLoader
    * [JBCACHE-106] - Override default properties on a method call basis
    * [JBCACHE-144] - No production-quality Cache Invalidation framework for Hibernate 2nd level cache
    * [JBCACHE-145] - TCP based remote CacheLoader
    * [JBCACHE-158] - FileCacheLoader Needs To Create Cache Loader Locations (If They Do Not Exist)
    * [JBCACHE-170] - CacheLoader chaining
    * [JBCACHE-171] - Clustered get() for CacheLoader
    * [JBCACHE-175] - JBossCacheAop supports of 1.5 annotation
    * [JBCACHE-201] - local and transient put
    * [JBCACHE-213] - Create a Least Frequently Used (LFU) eviction policy
    * [JBCACHE-259] - add shouldEvictNode to LRUAlgorithm
    * [JBCACHE-269] - More fine grained locking for initial state transfer
    * [JBCACHE-286] - Sort eviction node entries for more efficient eviction processing.
    * [JBCACHE-306] - flushing the queue in AsyncCacheLoader
    * [JBCACHE-307] - Invalidation instead of Replication
    * [JBCACHE-312] - Create additional eviction policies for LFU, MRU, etc...
    * [JBCACHE-314] - Allow Eviction Policy to be configurable at runtime.
    * [JBCACHE-345] - JDBCCacheLoader should have configurable primary key name.
    * [JBCACHE-366] - Allow XML configuration to configure each Region with its own EvictionPolicy class. Maintain backwards compatibility of 1.2.X style Eviction XML configuration in the process.
    * [JBCACHE-369] - Comptetitive analysis of Terracotta DSO
    * [JBCACHE-384] - Build file "dist" target: generate version numbers within filenames for artifacts to be released
    * [JBCACHE-385] - Build dist:  md5 checksum generation for artifacts to release
    * [JBCACHE-391] - Upgrade jboss aop to 1.3.5
    * [JBCACHE-392] - Performance enhancement on ClusteredCacheLoader
    * [JBCACHE-393] - Cache loader interceptors hide exceptions
    * [JBCACHE-395] - Use new annotation name for POJO Cache
    * [JBCACHE-420] - Cache activations perform excessive cache loader operations
    * [JBCACHE-464] - Include thirdparty licenses in distribution
    * [JBCACHE-502] - Allow primitive arrays as params to putObject
    * [JBCACHE-513] - Review synchronization block in CacheLoaderInterceptor

** Bug
    * [JBCACHE-29] - ConcurrentModificationException during rollback
    * [JBCACHE-176] - Eviction Policy must be a LRUPolicy
    * [JBCACHE-208] - CacheStoreInterceptor is called even tough no put method is implemented on a custom cacheloader which causes TreeCache to respond very slowly.
    * [JBCACHE-210] - getKeys returns null
    * [JBCACHE-218] - READ_COMMITTED isolation level doesn't prevent a reader to see uncommitted changes
    * [JBCACHE-230] - Fqn contruction using Integer as an Obejct would fail sometimes
    * [JBCACHE-285] - Revisit READ_COMMITTED implementation
    * [JBCACHE-289] - FileCacheLoader does not work well with JBoss system properties on Windows
    * [JBCACHE-290] - FileCacheLoader expects to find a persisted file on startup
    * [JBCACHE-297] - Lock timeout in TreeCacheListener at rollback
    * [JBCACHE-320] - JDBCCacheLoader breaks when using MySQL JDBC driver
    * [JBCACHE-339] - Collection class .size() method won't  return correctly  when used with cache loader
    * [JBCACHE-346] - JDBCCacheLoader fails with ManagedConnections
    * [JBCACHE-348] - Problem with checks for conflicts in regionNames() for eviction policies
    * [JBCACHE-355] - Remove a put in the same transaction fails for rollback
    * [JBCACHE-357] - TreeCache mbean fails when displayed remotely in jconsole
    * [JBCACHE-373] - Wrong Region selected in RegionManager
    * [JBCACHE-383] - For local tx initiated due to a remote prepare(), TxInterceptor doesn't use the Transaction API to commit()/rollback() .
    * [JBCACHE-386] - JRunit Performance tests fail if ran on a system which does not have an xserver
    * [JBCACHE-387] - TreeCache startService() can hang if an exception occurs in setState()
    * [JBCACHE-389] - Loading of a node and subsequent eviction doesn't load the children on TreeCache.getChildrenNames()
    * [JBCACHE-390] - With TcpDelegatingCacheLoader and replication, all caches write the same modification to the central TcpCacheServer
    * [JBCACHE-396] - CachedSetImpl overwrites elements if add() is called after a remove().
    * [JBCACHE-398] - Cached collections don't handle null values correctly
    * [JBCACHE-400] - Node passivation fails with JDBCCacheLoader and SQL Server 2000
    * [JBCACHE-402] - CollectionClassHandler doesn't convert key to String in Map
    * [JBCACHE-405] - Locks reported as acquired not visible to other threads
    * [JBCACHE-426] - Nodes aren't removed successfully after prior eviction
    * [JBCACHE-443] - SerialVersionUID backward compatability
    * [JBCACHE-444] - Additional SerialVersionUID backward compatability issues
    * [JBCACHE-457] - Commit and rollback methods in 1.3 are not interoperable with previous versions.
    * [JBCACHE-459] - NPE in TxInterceptor when gtx tansaction entry not found
    * [JBCACHE-460] - JBossCache 1.3 pre-alpha integration error
    * [JBCACHE-476] - TreeCache.setIsolationLevel is setting the JVM-wide static field LockStrategyFactory.isolationLevel
    * [JBCACHE-487] - cache-jdbc.properties not included in the binary distribution
    * [JBCACHE-494] - Eviciton imporperly thrown when an eviction node not found
    * [JBCACHE-495] - LRUPolicyTest case failed
    * [JBCACHE-496] - Map does support key values that are not String
    * [JBCACHE-498] - Replication issue with Collection proxy using Iterators
    * [JBCACHE-506] - viewAccepted() doesn't always check if we are the coordinator
    * [JBCACHE-507] - Cache starts successfully even in state transfer fails
    * [JBCACHE-512] - Deadlock when using cache loaders and a concurrent node creation occurs
    * [JBCACHE-523] - Interceptor MBeans are never destroyed

** Task
    * [JBCACHE-10] - Remove locks for crashed/left members
    * [JBCACHE-109] - Use context classloader or classloader of current class
    * [JBCACHE-118] - Inefficient CacheLoader.exists() followed by CacheLoader.get()
    * [JBCACHE-133] - Add a layer to automaticcally handle marshalling/unmarshalling
    * [JBCACHE-141] - Memory Requirement for JBoss Cache Instance
    * [JBCACHE-225] - Refactor eviction policy plugin
    * [JBCACHE-226] - Project Management Tasks for JBoss Cache
    * [JBCACHE-252] - Release JBossCache 1.3.0
    * [JBCACHE-309] - Cache version serialVersionUID incompatibilities
    * [JBCACHE-313] - Make Region as a first class citizen such that it is visible from TreeCache.
    * [JBCACHE-317] - Convert current TreeCache docbook into book format
    * [JBCACHE-330] - Run more extensive tests with JDBC cache loader
    * [JBCACHE-337] - WorkspaceNodes should not hold references to DataNodes.  Remove this dependency, use cache._get()
    * [JBCACHE-356] - Certify JBoss Cache Content on JBoss Labs
    * [JBCACHE-358] - PREPARE phase doesn't cause rollback of TX if not all responses are received
    * [JBCACHE-360] - Alter DummyTransaction rollback behavior to match JBoss AS' TransactionImpl
    * [JBCACHE-374] - Investigate reducing the synchronization in CacheStoreInterceptor
    * [JBCACHE-376] - Sample configs with new 1.3 features
    * [JBCACHE-377] - Performance tuning optimistic locking
    * [JBCACHE-397] - Need to design for binary compatible evolution of the wire protocol
    * [JBCACHE-418] - Need to use JDK5.0 to release JBossCache 1.3
    * [JBCACHE-419] - Make sure JBossCache 1.3 is backward comptaible with earlier release
    * [JBCACHE-427] - Need license notices
    * [JBCACHE-428] - Need to emit more verbose exception fpr replication layer
    * [JBCACHE-429] - Make default state transfer timeout > lock acquisition timeout
    * [JBCACHE-430] - Remove dependencies to Nested(Runtime)Exception
    * [JBCACHE-456] - Decouple attribute FetchStateAtStartup from FetchInMemoryState
    * [JBCACHE-475] - Consider removing or disabling config option DeadlockDetection
    * [JBCACHE-489] - FAQ update
    * [JBCACHE-499] - Use object identity in GlobalTransaction.equals()
    * [JBCACHE-500] - Object identity not directly used in Fqn equals() implementation
    * [JBCACHE-503] - Create a JBossCache performance test
    * [JBCACHE-524] - During putObject in PojoCache, we should do a collective put for the primitive fields

** Support Patch
    * [JBCACHE-351] - Support patch incorporating JBCACHE-350

** Patch
    * [JBCACHE-394] - Performance Improvements in CachedSetImpl
    * [JBCACHE-433] - HEAD Fails org.jboss.cache.ConcurrentEvictAndRemoveTest Due To ConcurrentModificationExceptions
    * [JBCACHE-484] - Minor code clean-up for Cache head

** CTS Challenge
    * [JBCACHE-372] - TreeCacheAop Performace metrics

Release 1.2.4SP2 (February 21, 2006)
====================================

* Primarily concerned with restoring interoperability with version 1.2.3
  and previously by reverting some API changes and by providing the ability
  to serialize data in the format expected by the earlier releases.
* Various bug fixes.

Details:

** Feature Request
    *  [ JBCACHE-345 ] JDBCCacheLoader should have configurable primary key name.

** Bug
    *  [ JBCACHE-346 ] JDBCCacheLoader fails with ManagedConnections
    *  [ JBCACHE-387 ] TreeCache startService() can hang if an exception occurs in setState()
    *  [ JBCACHE-396 ] CachedSetImpl overwrites elements if add() is called after a remove().
    *  [ JBCACHE-436 ] Cache startup does state transfer before starting cache loader.
    *  [ JBCACHE-446 ] Possible NPE in LockMap.isOwner()

** Task
    *  [ JBCACHE-422 ] Restore Fqn's serializable compatibility with 1.2.3
    *  [ JBCACHE-423 ] Fix minor serialVersionUID incompatibilities with 1.2.3.1
    *  [ JBCACHE-424 ] Restore ability to Externalize class Node
    *  [ JBCACHE-425 ] Create StateTransferGenerator and StateTransferIntegrator versions for 1.2.3
    *  [ JBCACHE-438 ] Create attribute ReplicationVersion and deprecate StateTransferVersion
    *  [ JBCACHE-455 ] Restore API compatibility with 1.2.3 by changing DataNode back to Node
    *  [ JBCACHE-240 ] Complete implementation of current Collection apis
    *  [ JBCACHE-242 ] Write complete set of unit test cases against Collection impl
    *  [ JBCACHE-440 ] Implement an algorithm for converting release versions from String to short
    *  [ JBCACHE-445 ] Create junit tests to test compatibility with 1.2.3.1


Release 1.2.4SP1 (December 28 2005)
===================================

* Bug fixes, particularly in the area of handling transaction rollbacks.
* Improve memory utilization when preparing large state transfers.

Details:

** Bug

    * [JBCACHE-353] - Endless loop in IdentityLock sometimes triggered on TreeCache reconnection
    * [JBCACHE-359] - Callback into cache by TreeCacheListener prevents transaction rollback
    * [JBCACHE-361] - Marking a transaction as rollback only on a remote node does not result in a rollback of the overall transaction

** Task

    * [JBCACHE-349] - Include RpcTreeCacheMBean that's compatible with treecache-based HA-JNDI
    * [JBCACHE-350] - Reduced memory footprint for state transfer
    * [JBCACHE-360] - Alter DummyTransaction rollback behavior to match JBoss AS' TransactionImpl


Release 1.2.4 (Oct 20 2005)
===========================

* Create build examples for load and compile time instrumentation for JBossCacheAop 
* Support partial state transfer 

Details:

** Feature Request

* [JBCACHE-265] - Create build examples for load and compile time instrumentation for JBossCacheAop 
* [JBCACHE-273] - Support partial state transfer 
* [JBCACHE-294] - Upgrade JRunitTests with Xref reporter 
* [JBCACHE-305] - Allow use of registerClassLoader() API before createService()/startService() 
* [JBCACHE-335] - Backwards Compatibility for State Transfer 

** Bug

* [JBCACHE-279] - JBossCache fails with java.util.NoSuchElementException under heavy logging load 
* [JBCACHE-292] - The specification info in the jboss-cache.jar manifest is incorrect. 
* [JBCACHE-293] - IdentityLock.releaseAll() attempts to modify an unmodifiable Set 
* [JBCACHE-298] - ReplicationInterceptor does not remove entries from transaction map for remote calls 
* [JBCACHE-303] - JDBCCacheLoader attempts JNDI lookup of DataSource before it is registered 
* [JBCACHE-308] - ReplicationInterceptor does not remove entries from remote_transactions set for one-phase commit calls 
* [JBCACHE-310] - IdentityLock.toString() not thread safe 
* [JBCACHE-316] - Deadlock problems with __JBoss_Internal__ region under REPL_SYNC 
* [JBCACHE-319] - Node marshalling marshalls data redundantly 
* [JBCACHE-329] - Optimistic locking - allows concurrent mod if a node is deleted in the underlying cache. 
* [JBCACHE-334] - JBossCacheAop deadlock if use putObject with shared pojos from two separate cache instances concurrently 
* [JBCACHE-343] - maxAgeSeconds in LRUPolicy is not set correctly 

** Task

* [JBCACHE-128] - Handle MashalledValue for different class loaders 
* [JBCACHE-138] - Release 1.2.4 final 
* [JBCACHE-296] - Incorporate Fix for JBAS-2262 in the jboss-system.jar bundled with JBossCache 1.2.4 
* [JBCACHE-299] - Update the build script to include a target that creates a dist with src 
* [JBCACHE-302] - Document using the TreeCacheMarshaller 
* [JBCACHE-304] - Added missing locking scheme apis for TreeCacheMBean 
* [JBCACHE-321] - Remove dependency on log4j 
* [JBCACHE-325] - Use NodeData instead of Externalizable to marshal transient state for state transfer 


Release 1.2.4Beta (Spet 12 2005)
===========================

* New object graph model for JBossCacheAop to handle complex
interactions between Collections and Pojos.
* Added jboss-cache-minimal-dist.zip for library only package
* ExtendedTreeCacheListener for additional TreeCache events
* Upgraded to JBossAop 1.3.1 libraries
* JBossCacheAop load-time instrumentation mode uses a new class loader
* Added passivation/activation
* Added a TreeCacheMarshaller to handle scoped class loader
* Added an additional Api findObjects for TreeCacheAop
* JBossCacheAop object graph now works with persistency
* Added 2 network management test cases under org.jboss.cache.aop.integrated
packages
* Renamed previously examples directory to tests. Examples directory now
has complete examples
* Collection classes when detached from cache will now automatically
populate the values from cache to in-memory
* TreeCacheAop loadtime instrumentation use a GeneratedInstrumentClassLoader
now
* TreeCacheAop new doc
* Test package has been renamed to mirror class being tested

Details

** Feature Request
    * [JBCACHE-12] - Async CacheLoader
    * [JBCACHE-66] - Passivation/overflow
    * [JBCACHE-87] - Add an abstract implementation of TreeCacheListener
    * [JBCACHE-104] - Mass removal of AOP POJOs
    * [JBCACHE-159] - preEvict and preRemove would be useful
    * [JBCACHE-196] - Upgrade to Sleepycat 2.0
    * [JBCACHE-205] - Added a new API to query all the existing pojos in TreeCacheAop
    * [JBCACHE-223] - CacheLoader in cacheaop support object relationship
    * [JBCACHE-246] - Should allow to overwrite existing Pojo if it is not multipled referenced
    * [JBCACHE-255] - Create a marshalling handler for TreeCache
    * [JBCACHE-265] - Create build examples for load and compile time instrumentation for JBossCacheAop
    * [JBCACHE-273] - Support partial state transfer
    * [JBCACHE-287] - Create individual example completed with Ant script for ship in the distribution

** Bug
    * [JBCACHE-116] - CacheLoaderInterceptor calls CacheLoader.exists() spuriously
    * [JBCACHE-127] - Binding JBossCache 1.2.1 using JRMPProxyFactory to JNDI
    * [JBCACHE-135] - Node eviction in AopTree causes permanent removal of a node
    * [JBCACHE-178] - removeObject needs to remove remote node's cacheinterceptor in TreeCacheAop
    * [JBCACHE-184] - Error in capacity warning calculation in Region.putNodeEvent
    * [JBCACHE-185] - JBossCacheAop getObject call will trigger un-necessary network replication
    * [JBCACHE-191] - replication_granularity is not specified in jboss-web_4_0.dtd (and 3_2)
    * [JBCACHE-192] - Nodes don't get unlocked in special cases after method calls
    * [JBCACHE-200] - Initial state transfer produces class not serializable error in TreeCacheAop
    * [JBCACHE-216] - Should throw exception when default region is not configured in LRUPolicy config
    * [JBCACHE-221] - Shared objects under Collection throws exception
    * [JBCACHE-228] - Collection class removeObject should return the old copy
    * [JBCACHE-243] - Incorrect Iterator impl in Collection List and Set proxies
    * [JBCACHE-253] - Missing Modify Notification if an object is removed from a node
    * [JBCACHE-260] - Jboss Cache IdentityLock read/write lock could not be acquired
    * [JBCACHE-277] - PassivationInterceptor fails when used with a tx started outside of calls to the cache.
    * [JBCACHE-280] - nodeCreated() callback leads to leftover locks when calling back into the cache (get(), put())
    * [JBCACHE-284] - Node.put() does not result in replication

** Task
    * [JBCACHE-148] - null obj arguement will throw exception in putObject
    * [JBCACHE-164] - TreeCacheAop eviction is allowed only with CacheLoader
    * [JBCACHE-179] - refactoring removeObject
    * [JBCACHE-183] - Over synchronization in IdentityLock and LockMap
    * [JBCACHE-186] - Replace synchronizedSet/List() with ConcurrentHashMap
    * [JBCACHE-187] - Inefficient create_lock in LockInterceptor.lock()
    * [JBCACHE-188] - Replace TreeCacheListener Vector with more concurrent equivalent
    * [JBCACHE-189] - Cache hash code for Fqn and GlobalTransaction objects
    * [JBCACHE-190] - Reduce frequency of calls to nodeEventQueue_.size() in Region.putNodeEvent
    * [JBCACHE-193] - ReadWriteLockWithUpgrade concurrency problem due to ThreadLocal
    * [JBCACHE-195] - Change LockMap.readOwnersList_ to ConcurrentReaderHashMap from ConcurrentHashMap
    * [JBCACHE-202] - Custom Eviction Policy: Use age of items to determine eviction order
    * [JBCACHE-211] - faq update
    * [JBCACHE-212] - Doc update
    * [JBCACHE-217] - Refactor test class package structure to mirror the class being tested...
    * [JBCACHE-219] - Renamed key of sub-object that is Serializable but not Aspectized
    * [JBCACHE-220] - Handle multiple references/object graph for Collection classes
    * [JBCACHE-222] - Internal fqn name for Collection class may not be unique
    * [JBCACHE-244] - Refactor JBossCacheAop object graph model
    * [JBCACHE-247] - AOPInstance has a sourceFqn set to track referees
    * [JBCACHE-248] - New integrated junit tests need to run using annoc target
    * [JBCACHE-249] - Multiple distribution packages
    * [JBCACHE-261] - Distributed State (TreeCache) requirement for TreeCache listener
    * [JBCACHE-263] - Upgraded to JBossAop 1.3 libraries
    * [JBCACHE-264] - Refactored startService lifecycle
    * [JBCACHE-271] - Validate AbstractTreeCacheListener implementation
    * [JBCACHE-272] - Update doc and faq for JBCACHE-87, JBCACHE-159, JBCACHE-229
    * [JBCACHE-275] - JRunit Tests should be moved to /perf sourcetree
    * [JBCACHE-276] - Create a distributed rpc functionality in JBossCache layer
    * [JBCACHE-278] - Supported Collection classes with non-primitive key
    * [JBCACHE-282] - use object.toString to construct the relative fqn in Collections mapping



Release 1.2.3 (June 1 2005)
===========================

* First standalone version: separate "JBossCache" module in cvs.forge.jboss.com:/cvsroot/jboss
* JBossCacheAOP: added annotations
* Fixed problems with isolation level = NONE
* Fixed concurrent access in Node

Details:

** Feature Request
    * [JBCACHE-53] - JBossCacheAop now supports use of annotation
    * [JBCACHE-132] - Add a method to get the version number of the cache
    * [JBCACHE-149] - Add INFO logging statement related to TreeCache Preloading From Cache Loader
    * [JBCACHE-162] - make geFqn public in nodeEntry.java
    * [JBCACHE-174] - Upgrade JGroups from 2.2.7 to 2.2.8 final

** Bug
    * [JBCACHE-31] - Out of memory problem
    * [JBCACHE-117] - Unnecessary lock acquisition with IsolationLevel.NONE
    * [JBCACHE-119] - Missing notification for remove() and addChild()
    * [JBCACHE-124] - Concurrent access problem in Node
    * [JBCACHE-126] - CacheLoader doesn't load children after loading an attribute
    * [JBCACHE-134] - ReplicationInterceptor: remote calls 'eat' Throwable
    * [JBCACHE-136] - Memory problem when using put again!
    * [JBCACHE-150] - Problem with runShellDemo scripts
    * [JBCACHE-153] - Treecache coordinator crashes and attempts to join but can't

** Task
    * [JBCACHE-40] - Development of JGroups/JBoss Cache training modules
    * [JBCACHE-51] - Create standalone CVS version of JBossCache
    * [JBCACHE-121] - Update JBoss head, 3.x and 4.x with jboss-cache.jar
    * [JBCACHE-125] - Release 1.2.3 final
    * [JBCACHE-142] - Upgrade to JGroups 2.2.8
    * [JBCACHE-147] - Refactored TreeCacheAop
    * [JBCACHE-155] - Package the new docbook generated docs into the distro
    * [JBCACHE-169] - Error handling in JBossCache




Release 1.2.2 (target: April 2005)
==================================

* Added serialVersionUID to Fqn, GlobalTransaction, Modification, Node, AOPInstance, NodeData
  (bela March 27 2005)


Release 1.2.1 (March 2005)
==========================

Notes:

* JndiName has been removed, use JrmpProxyFactory instead to bind any type of MBean into JNDI.
  See the documentation for TreeCache for an example
* DelegatingCacheLoader has become an abstract class: use one of the subclasses (e.g. LocalDelegatingCacheLoader)
  instead
* Concurrent upgrade from a read-lock to a write-lock by *different* transactions on the *same* node is currently not
  supported, e.g. get("/a/b/c") acquires a RL, subsequent put("/a/b/c") by the same transaction will acquire a write
  lock. If multiple transactions try to simultaneously upgrade "/a/b/c" from RL to WL, only one will succeed, the others
  will get an exception (and therefore roll back their transaction):
  UpgradeException: upgradeLockAttempt(): more than one reader trying to simultaneously upgrade to write lock)

** Feature Request
    * [JBCACHE-101] - JGroups-based DelegatingCacheLoader

** Bug
    * [JBCACHE-15] - 4.0 testsuite failures
    * [JBCACHE-17] - No synchronization between CreateIfNotExistsInterceptor and LockInterceptor
    * [JBCACHE-19] - TreeCache.evict() doesn't go though interceptor chain
    * [JBCACHE-20] - Incompatible change in JndiName attribute
    * [JBCACHE-21] - No synchronization between CacheLoaderInterceptor and LockInterceptor
    * [JBCACHE-24] - LockInterceptor needs to lock child nodes recursively on remove(Fqn)
    * [JBCACHE-32] - Transaction already active on replication's PREPARE phase
    * [JBCACHE-37] - Stack Overflow when using Collection classes in TreeCacheAop
    * [JBCACHE-38] - Eviction policy timer starts multiple times if cache is restarted
    * [JBCACHE-39] - Correct restart of JBossCache (inside JBoss)
    * [JBCACHE-78] - Failed state transfer doesn't release locks on TreeCache
    * [JBCACHE-83] - java.lang.IllegalStateException: addWriter(): owner already existed
    * [JBCACHE-84] - unable to call getKeys using JNDI
    * [JBCACHE-90] - Class not found exception in TreeCacheAop when running with different class loader
    * [JBCACHE-91] - TX Isolation always REPEATABLE_READ
    * [JBCACHE-93] - Memory problem at repeated remote PUT
    * [JBCACHE-94] - Incorrect synchronization between threads (CreateIfNotExistsInterceptor and LockInterceptor)
    * [JBCACHE-95] - Class cast exception in TreeCacheView2
    * [JBCACHE-96] - Memory leak in FileCacheLoader
    * [JBCACHE-99] - FileCacheLoader uses incorrect classloader
    * [JBCACHE-111] - Transaction not available in afterCompletion() of CacheStoreInterceptor

** Task
    * [JBCACHE-2] - Upgrade Sleepycat's CacheLoader to 1.7.0
    * [JBCACHE-16] - Plan for JGroups/JBoss Cache training development
    * [JBCACHE-22] - Create UnlockInterceptor
    * [JBCACHE-23] - Override bindToJndi() in TreeCacheAop
    * [JBCACHE-36] - Run testsuite on multi-CPU boxes in ATL lab
    * [JBCACHE-50] - Remove binding of TreeCache into JNDI


** Patch
    * [JBCACHE-81] - DummyTransactionManager ThreadLocal uses Map
    * [JBCACHE-82] - Deserialized Node object doesn't have the FQN set






Release 1.2 (Dec 2004)
===============================

Features
--------
* JndiName now allows remote (e.g. RMI) clients to access the cache (use
  of Remoting)
* Changed CacheLoaderConfig from string to properties (needed by JDBCCacheLoader)
* Added Version ("java org.jboss.cache.Version" prints version)
* Added LockInterceptor (merged TransactionInterceptor into it)
* Support for TreeCacheAop Collection classes (Set, List, and Map).
* Support of runtime swapping of Collection class reference with the proxy
  reference counterpart.
* Added JDBCCacheLoader (Alex Loubyansky), allows for DB persistence for cache
* Added DelegatingCacheLoader. Allows for creation of hierarchical multi-level caches
  (e.g. first-level delegates to second-level delegates to Sleepycat CacheLoader)
* Moved creation of node if not exists into CreateIfNotExistsInterceptor
* Moved cache loading code into CacheLoaderInterceptor, and cache storing into CacheStoreInterceptor
* JNDI binding is now supported ("JndiName" attribute)
* Isolation level now can be specified as per cache instance instead of per VM
* Added "TRACE" log level for very verbose output.
* Renamed element name in EvictionConfig from TimeToIdelSeconds to
  TimeToLiveSeconds. It is backward compatible with old configuration
  though, meaning old name still work in this release.
* Added FIFO eviction policy (contributed by a user).
* Document update.

Bug Fixes
---------
* Added additional libarary jboss-minimal.jar to support jndi under aop
* Fixed bug for incorrect eviction policy start up sequence in release 1.1
* Bug fixes for node lock synchronization
* Bug fixes in RegionManager for create and get region
* Bug fixes for locking without transaction
* Bug fixes for getObject, putObject, and removeObject locking in aop.

XML changes between 1.1 and 1.2
-------------------------------
* CacheLoaderConfig is now a list of elements (java.util.Properties) rather than a string, e.g. in 1.1

  <attribute name="CacheLoaderConfig">c:\tmp</attribute>

  has to be changed to

  <attribute name="CacheLoaderConfig">
     location=c:\\tmp
  </attribute>

  The contents of the elements depends on the type of CacheLoader used. See the documentation for details.

* JndiName is now a list of elements (java.util.Properties) rather than a string, e.g. in 1.1

  <attribute name="JndiName">MyCache</attribute>

  has to be changed to

  <attribute name="JndiName">
      name=MyCache
      locatorURI=socket://myhost:12345
  </attribute>




Release 1.1 (Aug 2004)
======================

Features
--------
* Added CacheLoader support (store/read from secondary storage). Supports both
  shared and unshared backend stores
* 2 CacheLoader implementations: Sleepycat Berkeley DB (BdbjeCacheLoader) and file
    based (FileCacheLoader)
* Partly refactored implementation to use interceptors (will be completed in 2.0)

Bug Fixes
---------
* Refactored the eviction policy to fix synchronizing bug and also
  handle the EvictionException from EvictionTimerTask.
* Updated build.sh and build.bat scripts for Ant1.6.1 version
* Added UpgradeException when UpgradeLockAtempt fails
* Bug fix for config xml parsing error in some platforms
* Updated documentation and tutorial
* Added OrderedSynchronizationHandler, allows for ordered calls into ReplicationInterceptor and
  TransactionInterceptor in TX commit (afterCompletion()) (bela Aug 14 2004)




Release 1.02
============

Features
--------
* Bug fix for LRU policy queue under heavy load




Release 1.01
============

Features
--------
* Upgraded JGroups library that uses the apache common logging package

Bug Fixes
---------
* Renamed the sample xml configuration file name to *-service.xml
* In isolation level of Repeatable_READ, multiple fixes for concurrent
  read and upgrade, multiple read lock release, etc.
* More unit test cases have been added for isolation levels.
* Bug fix for during replication mode with eviction policy, if a new
  cache is started, it will throw exception during state transfer
  due to cache notification sequence is incorrect.
* LRUAlgorithm generated null pointer when taking event from queue.
* LRUPolicy could not handle "/" as an added node.
* TreeCacheAop MBean service is not deployed correctly
* TreeCacheAop collection classes (map, list, etc) has a bug in
  recursive remove




Release 1.0
===========

Features
--------
* Eviction policy for both TreeCache and TreeCacheAop
* TreeCacheAop "object-oriented" features: inheritance,
  aggregation, and object graph (in local and replication mode)
* Support JBossAop1.0 beta
* support aopc, pre-compiling aop
* Support TreeCache as a JBoss MBean service (both jboss4.0 and 3.2)
* documentation updates

Bug Fixes
---------
* If an object is not declared "advised", it will be stored as
  is (e.g., treated as a "primitive" type), providing it is serializable
* Key object used to require to implement "Comparable". The restriction
  is now removed
* Fix InvokeTransactionlessMethod to exclude myself when replicating
  changes via synchronous mode. The solves the problem when an object
  has transient fields that will disappear within the originating vm.
* Fixed syncrhonization bugs in transaction isolation levels.

