
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

