======================================================================================================================

NOTE:

    This file is DEPRECATED and will not be updated in future.  Please see http://jira.jboss.com/jira/browse/JBCACHE
for roadmaps, open tasks, and todo's.

-
Manik Surtani
Lead, JBoss Cache

======================================================================================================================


$Id: todo.txt 2211 2006-07-10 12:08:44Z msurtani $



               Todo list for Cache/JBoss
               ----------------------------------------
               (Items are in no particular order)

- White paper on aop (for http session repl, e.g.)

- Use ant build for docbook

- Benchmarking and tuning for TreeCacheAop

- Add custom interceptor for TreeCacheAop. Idea is to have aop user to add
  a customed dynamic interceptor.

- Add question about max nodes in eviction policy in both TreeCache and
  TreeCacheAop

- Add Websphere tm lookup in the faq.

- Use of annotation for "prepare" instead specifying in XML. Bill has this
  feature in the latest JBossAop. Will just need to test it out.

- Currently in CacheLoader and EvictionPolicy, we only allow using String 
  as the key. In addition, aop does not support non-primitive key object 
  either. These restriction need to be relaxed.

- In TreeCacheAope, if key is an object and overrides hashCode(), it can
  cause an recursive loop in aop interception.

- Unify create/start and createService and startService

- Added memory-based eviction LRU policy. Idea is to based on total heap memory.

- Cache instrumentation (cache hit/miss ratio, eviction and cache loading stats,
  etc)

- document the isolation level is effective even when there is no tm

- dynamic region defition for eviction policy. This can be useful to
  set the region programmatically for runtime region creation.

- TreeCache need to emit a node event that is modify by remote
  only, i.e., local modification won't trigger this event.
  This event is needed to listen for remote modification when
  there is a local copy of this instance around so we know that
  it is dirty. Use cases are: http session repl and TreeCacheAop
  where after getObject will need a way to know if the underlying
  fields have been modified remotely.

- Lazy loading of Person.Address: currently it is loaded *with* Person

- HAJNDI implementation

- Refactor TreeCache, use interceptors. Investigate use of aopc; TreeCache only has structure (tree), everything else
  is an aspect (locking, replication, cacheloading, eviction etc). 

- Distributed/partition cache
  Idea is to form a sub-group where it replicates among sub-group but not to the whole group.

- Better documentation and use cases for transaction isolation levels

- XMBean

- Add state transfer handler (getState(), setState(), for partial state transfer

- Field modification notification for aop
  Idea is to have a observable pattern to monitor the aop filed modification on a POJO

- Specify TreeCache and TreeCacheAop in a separate interface
  This serves better documentation

- Use of XID to replace GlobalTransaction

- Make TreeCache a JCA adapter (essentially a Resource manager), implement XMResource

- Optimistic locking via versioning (integrate with Hibernate)

- Notify TreeCache listeners at the end of a transaction, *not* when the local update happens.

- Remove locks for crashed/left member

- Resizing of cache at runtime

- Investigate use of soft/weak refs for cache storage

- More extensive test for TreeCacheAop object graph handling in replication 
  mode. Most use cases will be needed.

- Refactor Region to make it generic to configuration such as persistency,
  eviction policy, replication mode, transaction isolation level, etc.

- Expose RegionManager reference so user can configure the region policy
  programmatically. Right now everything is done through xml config. 

- Complete the TreeCacheAop Collection classes support. Right now, we have
  partial support for List, Set, and Map. We will need to support the complete
  APIs, e.g., clear(), etc.
  
- Eviction policy in replication mode now is set to local only. Should have an
  option that is global mode as well, that is, when a node is evicted, the
  removal is replicated. This is currently not done because of get (which 
  refresh the node age) is only local.

- In TreeCache _removeData, needs to activate sendNodeEvent. Bela has disabled
  it now since GUI view needs this to refresh the nodes when evicted. But it
  breaks the AOP eviction policy!





                                 Done
                                 ----

- In findNode method, currently there is no lock if there is no tx. Bela
  commented it out a while ago. We will need to activate this!

- Persistence for TreeCache (CacheLoader interface) updates are saved in stable storage. This is
  useful for local-DB case where a node goes down and then comes back up. This will allow for transfer of the
  updates, rather than the entire database.


- Divide debug into trace verbose level (Bela and Ben)

- Bind TreeCache MBean proxy into JNDI, so other MBeans and/or clients can retrieve it (Bela). I have also included jboss-minial.jar in the distro so that it
passes the aop (Ben).

- EJB stateful session replication using TreeCache/Aop

- Look at NPE in connection with oodb.bsh and BdbjeCacheLoader
  --> Bug in BdbjeCacheLoader (solved by Mark Hayes in 1.5.2)
  (bela Aug 30 2004)

- Http session replication under Tomcat 5
  (Ben Aug 2004)

- Testing of aop interception with POJO inheritance, e.g., a POJO that
  inherits from a base class
  (Ben Mar 20 2004)

- Eviction policy plugin framework. Allows third party plugin.
  (Ben Mar 6 2004)

- Eviction policy (.e.g, LRU) for both TreeCache and TreeCacheAop
  (Ben Mar 6 2004)

- Region. Now only applies to eviction policy.
  (Ben Mar 6 2004)

- Object graph update/removal under aop. It handles multiple and recursive
  references now.
  (Ben Feb 22 2004)

- Added TreeCacheView MBean to code and XML files (commented). Allows one to see a graphical
  representation of the TreeCache MBean
  (bela Feb 6 2004)

- Changes to asyn replication queue (via interface or XML file) were not set
  --> fixed (bela Feb 6 2004)

- Eliminate 2 phase commit protocol if modification list is empty (e.g. only reads during TX)
  (bela Feb 6 2004)

- Removed unnecessary rollback() in beforeCompletion()
  (bela Feb 5 2004)

- Commit/rollback phase (phase 2 of 2PC) is now done locally first, then remotely. The async commit/rollback
  multicast caused some problems with locks, e.g. 2 subsequent put() calls:
  - First call was in 2PC, but COMMIT message was not yet received
  - Second call would block on write lock acquisition because first call had not yet released lock (only on
    reception of COMMIT).
  (Bela Feb 5 2005)

- Fix: rollback() is called 2x when a TX is rolled back
  (bela Feb 5 2004)

- "transient" fields should not be replicated under AOP
  (ben Jan 2004)

- Handle non-advised object under aop.
  (Ben Jan 2004)

- Unit tests for rollbacks (test undo operations)
  (bela Dec 26 2003)

- aop class infor prefixed with jboss::internal
  (ben Nov 2003)

- Doco
  (bela Nov 26 2003)

- Periodical updates rather than immediate updates when using
  asynchronous replication (updates are put into a queue).
  (bela May 24 2003)

- Use Bill's AOP stuff to determine when a value has changed. We wouldn't know
  this unless another put() was called.
  (harald April/May 2003)

- Use DynamicProxy to access CacheImpl via JMX: provide strongly typed interface
  for clients of the service, but use JMX to access it
  --> Using MBeanProxy (bela Feb 2003)

- Create CacheMBean from Cache via xdoclet (bela Jan 2003)

- Use XML file to configure cluster properties for Cache
  (Jan 2003)

- Created initial version (bela Dec 31 2002)






                              Rejected
                              --------

- Isolation level per transaction
  We can't come up with a way to do this without proprietary api


