
NOTE:  Regarding ApacheDS Releases

  We use even minor numbers to denote stable releases and release branches 
  where new features are not added but only bug fixes are made.  Odd numbered
  releases and branches are for experimental feature release branches of which
  several releases may occur.  For example after 0.9 below there may be 0.9.1,
  0.9.2 ... 0.9.n et. cetera. until there is a feature freeze and a stable
  release is created like 0.10.


Changes in 0.9.1 (since 0.9)
============================
 o Used SpringFramework to demonstrate runtime configuration
 o Removed dependency on AspectJ within the core
 o Started using SLF4J and NLog4J eventually to replace commons logging
 o Enabled multiple instances to exist for a single JVM
 o Added support for multiple calls to InitialContext with different principals
 o Added ContextFactoryService interface that gives user more control to 
   available ContextFactories in a JVM.
 o Refactoring ...
   o Created new partition package placing all store related classes there
     (see org.apache.ldap.server.partition)
   o JdbmDatabase is replaced with JdbmContextPartition to simplify its design.
   o Made CoreContextFactory more extensible using pre post stage hooks
   o Simplified property based configuration using POJOs
     (see org.apache.ldap.server.configuration)
   o Extracted JNDI configuration management into JNDI Utils
   o Using separate configuration beans for shutdown, sync and startup
   o Redesigned Interceptor interface to be more user-friendly so that
     Intereceptor implementations look cleaner.
 o Fixed bugs
   o DIREVE-155
   o DIREVE-175

Changes in 0.9 (since 0.8)
==========================

 o Added Preferences implementation for system settings (user Prefs not done)
 o Added support for JNDI state factories and object factories
 o Added schema support for object and state factories - plugin is prep'd for
   generating these from schema definitions and domain models: code to do this
   just needs to be added.
 o Added factory.hints property to help drive the selection of a object
   factory when there are multiple alternatives
 o Added Authenticator (thanks to Endi)
 o Added support for multiple types of custom backends (thanks to Endi)
 o 0.9 now uses MINA instead of apseda for massive performance and concurrency
   gains.  MINA is the network layer for Apache Directory.
 o Revamped interceptor factory: interceptors easier to manage and to add
   custom interceptors.  Design is similar to filter chaining.  Excellent 
   feature that makes extending and configuring interceptors for the server
   a breeze.
 o Several performance improvements
 o Refactored and cleaned up APIs in general
 o Several documentation improvements were made with slight revamp and the
   addition of docs for new features
 o Perhaps the latest most exciting feature is the addition of the Kerberos 
   provider plugin which is a full Kerberos V service listening by default on
   port 88.  The plugin uses the Directory Network layer (MINA) to service
   UDP and TCP requests to the KDC and it uses the ApacheDS DIT to store its 
   entires without any netork latency or unnecessary security exposure.  
 o Fixed bugs with filter parser in LDAP common affecting server
 o Fixed issues with authenticating to server
 o Corrected broken simple authentication and annonymous binds
 o Cleaned up user partition creation and configurationn
 o Created and added better user and developer guide information
 o Corrected case problems with attribute type names
 o Added proper ou=schema presentation of schema objects
 o Added Samba schema
 o Created and added new distinguished name normalized
 o Added DHCP schema
 o Fixed bug when trying to shutdown the server via JNDI
 o Changed package structure to accomodate growth better
 o We now try to take next available port if user does not have access rights
   for 389 or the alt port specified is already in use
 o Moved logic to start up LDAP and Kerberos providers out into main
   subproject, leaving a new base class for a context factory implementation
   called the CoreContextFactory
 o Exited incubator so all groupIds were finalized
 o Rearranged the SVN repository to reflect better project demarcations

