
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.2 (since 0.9.1)
==============================
 o 3.5x boost in performance due to changes to DnComparator by Emmanuel Lecharny
 o Fixed Server Bugs:
    * [DIREVE-165] - Parser failure on name: Antlr exception trace: line 15:7: unexpected char: '#'
    * [DIREVE-167] - specification of server.xml arg. file when starting DS fails if server.xml is specified with absolute path
    * [DIREVE-173] - On modifyRdn server now adds additional Rdn attribute
    * [DIREVE-176] - Admin user is missing the required cn and dn attributes on initial startup.
    * [DIREVE-177] - The bahavior of LockableAttributesImpl.put() is different from that of BasicAttributes.
    * [DIREVE-178] - Custom authenticator is never called
    * [DIREVE-179] - NormalizationService is failing to parse escaped names
    * [DIREVE-180] - Problem with the shutdown sequence.
    * [DIREVE-188] - JdbmContextPartition doesn't search an attribute added by MODIFY operation at first.
    * [DIREVE-210] - All User Attribures ("*") is not supported
    * [DIREVE-215] - Wrong error messages for some operations
    * [DIREVE-216] - Adding new object classes to an entry removes the old ones
    * [DIREVE-217] - ExceptionService bypasses all interceptors in the chain.
    * [DIREVE-219] - RFC3673 (all operational attributes) support is incomplete
    * [DIREVE-220] - Modify operation attempt on admin uid removes the uid attribute
    * [DIREVE-221] - search on specific object class results in java.lang.NoSuchMethodError
    * [DIREVE-226] - Compare operation on non existing or invalid attributes causes wrong return codes
    * [DIREVE-227] - Fetching the schema fails on some LDAP clients
    * [DIREVE-228] - Schema container issue.
    * [DIREVE-230] - Deletion of RDN and objectClass attribute
    * [DIREVE-232] - Modify operation (removal) provides wrong return codes in two situations.
 o New Server Features:
    * [DIREVE-128] - setup command line arguments (property parameters)
    * [DIREVE-212] - Ability to add/remove ContextPartitions in runtime
    * [DIREVE-213] - Design DIT structure for storing server and service configuration information within the ou=system partition
    * [DIREVE-214] - Make Interceptor chains runtime configurable 
 o Server Improvements:
    * [DIREVE-189] - log4j.properties is being bundled by the jar:resource goal - override it in maven.xml
    * [DIREVE-209] - standalone script should use apacheds-server.xml by default
    * [DIREVE-211] - Add vendorVersion to attributes of Root DSE
 o Server Tasks:
    * [DIREVE-50] - Logging IBS
 o LDAP Common Fixed Bugs:
    * [DIRLDAP-23] - DnParser throws IOException in Java 5
    * [DIRLDAP-24] - Ldif parser does not accept comments
    * [DIRLDAP-26] - Ldif file could have multi-lines atrribute values
    * [DIRLDAP-29] - Class SnickersEncoder does not send data with a WritableByteChannel on Linux
    * [DIRLDAP-34] - DnParser does not respect RFC2253
    * [DIRLDAP-36] - Order of multi-valued RDN should not matters while comparing
    * [DIRLDAP-39] - Unicode Attributes allowed in a DN (but not in the RFC 2253!)
    * [DIRLDAP-44] - Invalid rule in filter grammar
 o Added LDAP Common Improvements:

    * [DIRLDAP-48] - The type of the subtree base in the SubtreeSpecification bean should be Name instead String
    * [DIRLDAP-49] - new Subtree Specification (RFC 3672) implementation

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

