<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<document>
  <properties>
    <title>Apache Commons Configuration Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons Community</author>
  </properties>

  <body>
    <release version="2.8.0" date="2020-MM-DD"
             description="Minor release with new features and updated dependencies.">
       <!-- FIX -->
       <action issue="CONFIGURATION-795" type="update" dev="ggregory" due-to="dpeger">
         Computation of blank lines after header comment #82.
       </action>
       <action issue="CONFIGURATION-801" type="update" dev="ggregory" due-to="Arturo Bernal">
         Remove redundant initializer #110.
       </action>
       <action issue="CONFIGURATION-802" type="update" dev="ggregory" due-to="Arturo Bernal">
         Use final #111.
       </action>
       <action issue="CONFIGURATION-803" type="update" dev="ggregory" due-to="Arturo Bernal">
         Java 8 lambda improvements and more #112.
       </action>
       <action issue="CONFIGURATION-804" type="update" dev="ggregory" due-to="Arturo Bernal">
         Redundant local variable #113.
       </action>
       <action issue="CONFIGURATION-805" type="update" dev="ggregory" due-to="Arturo Bernal">
         Use try with resource #114.
       </action>
       <!-- ADD -->
       <action type="update" dev="ggregory" due-to="SethiPandi">
         Implement Iterable in ImmutableNode #74.
       </action>
       <action issues="CONFIGURATION-794" type="update" dev="ggregory" due-to="Robin Jansohn, Gary Gregory, Rob Spoor">
         Unclosed file handle when reading config from JAR file URL.
         Add and use FileBasedBuilderProperties.setURL(URL, URLConnectionOptions).
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.getBlankLinesBefore() and deprecate getBlancLinesBefore(). 
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.setBlankLinesBefore() and deprecate setBlancLinesBefore(). 
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.PropertyLayoutData.getBlankLines() and deprecate getBlancLines().  
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.PropertyLayoutData.setBlankLines() and deprecate setBlancLines().  
       </action>
       <!-- UPDATES -->
       <action type="update" dev="ggregory" issue="CONFIGURATION-787" due-to="Gary Gregory">
         Update from Apache Commons Lang 3.9 to 3.12.0.
       </action>
       <action type="add" dev="ggregory" issue="CONFIGURATION-789" due-to="Gary Gregory">
         Add ImmutableConfiguration.getEnum() methods.
       </action>
       <action type="update" dev="ggregory" issue="CONFIGURATION-790" due-to="Gary Gregory, Dependabot">
         Update optional com.fasterxml.jackson.core:jackson-databind from 2.10.3 to 2.12.2, #60.
       </action>
       <action type="update" dev="ggregory" due-to="Oliver B. Fischer">
         Mention EnvironmentConfiguration in the list of configuration sources #45.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update Slf4j test dependencies:
         org.slf4j:slf4j-api 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-ext 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-log4j12 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-nop 1.7.26 -> 1.7.30.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update optional org.springframework from 4.3.26.RELEASE to 4.3.30.RELEASE:
         org.springframework:spring-beans 4.3.26.RELEASE -> 4.3.30.RELEASE,
         org.springframework:spring-context 4.3.26.RELEASE -> 4.3.30.RELEASE,
         org.springframework:spring-core 4.3.26.RELEASE -> 4.3.30.RELEASE,
         org.springframework:spring-test 4.3.26.RELEASE -> 4.3.30.RELEASE.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update GitHub actions/checkout from v1 to v2.3.3 #47, #62, #70, #85.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update commons-parent from 50 to 51.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Update mailapi from 1.6.4 to 1.6.6 #48.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update spotbugs-maven-plugin from 3.1.12.2 to 4.2.3, #55, #75, #79, #93, #116.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update tests from hsqldb from 2.5.0 to 2.5.1 #54.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update commons-text from 1.8 to 1.9.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update servlet-api from 2.4 to 2.5 #58.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update maven-checkstyle-plugin from 3.1.0 to 3.1.2, #57, #97.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Update commons-pool2 from 2.8.0 to 2.10.0, #61, #124.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Update actions/setup-java from v1.4.0 to v2 #63, #65.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update optional commons-codec from 1.14 to 1.15.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update checkstyle from 8.26 to 8.43, #66, #71, #90, #101, #118, #121.
       </action>
       <action dev="ggregory" type="update" due-to="Gary Gregory">
         Update commons.jacoco.version 0.8.5 to 0.8.6 (Fixes Java 15 builds).
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update tests from commons-dbcp2 2.7.0 to 2.8.0.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump actions/setup-java from v1.4.2 to v1.4.3 #73.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump snakeyaml from 1.26 to 1.29 #68, #126.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update commons.japicmp.version 0.14.1 -> 0.15.2.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump junit from 4.13 to 4.13.2 #78.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update Apache Commons VFS 2.6.0 -> 2.8.0.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump jackson-databind from 2.11.3 to 2.12.1 ,#88, #94.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump actions/cache from v2 to v2.1.4 #99.
       </action>
    </release>
    <release version="2.7" date="2020-03-07"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-761" due-to="Gary Gregory">
        Single argument DataConfiguration APIs always create empty arrays.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-762" due-to="Gary Gregory">
        Use variable arguments.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update com.puppycrawl.tools:checkstyle from 8.24 to  8.25.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-763" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind from 2.9.9 to 2.10.0.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-765" due-to="Gary Gregory">
        Refactor XMLConfiguration.write(Writer) to add XMLConfiguration.write(Writer, Transformer).
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-767" due-to="Gary Gregory">
        NullPointerException in XMLConfiguration#createTransformer() when no FileLocator is set.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-768" due-to="Gary Gregory">
        XMLConfiguration#write does not indent XML elements.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-771" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind 2.10.0 -> 2.10.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        [test] org.easymock:easymock 4.0.2 -> 4.1.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-773" due-to="Dan Dragut">
        User's Guide &gt; Properties files &gt; Saving - small documentation bugs #41.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-775" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-777" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.5.0 to 2.6.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-778" due-to="Gary Gregory">
        Update optional Apache Commons Codec from 1.13 to 1.14.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from JUnit 4.12 to 4.13.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-779" due-to="Gary Gregory">
        Update optional jackson-databind from 2.10.1 to 2.10.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-783" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind from 2.10.2 to 2.10.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-784" due-to="Gary Gregory">
        Update org.yaml:snakeyaml from 1.25 to 1.26 and tweak parser configuration.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-785" due-to="Gary Gregory">
        Update org.springframework:spring-* from 4.3.25.RELEASE to 4.3.26.RELEASE.
      </action>
      <action dev="chtompki" type="update" due-to="Rob Tompkins">
        Update org.apache.commons:commons-parent from 48 to 50
      </action>
    </release>
    
    <release version="2.6" date="2019-09-13"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-750" due-to="Jason Pickens, Gary Gregory, Emmanuel Bourg">
        XMLPropertyListConfiguration cannot set arrays in the correct plist form.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-751" due-to="Gary Gregory">
        Update Apache Commons Text from 1.6 to 1.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-752" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.3 to 2.4.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-754" due-to="Gary Gregory">
        Update Apache Commons Text from 1.7 to 1.8.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix Javadoc for org.apache.commons.configuration2.PropertiesConfiguration.getIncludeOptional().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Document "includeOptional" on the site.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-755" due-to="Gary Gregory">
        [CVE-2014-0114] Update Apache Commons BeanUtils from 1.9.3 to 1.9.4.
      </action>
      <action dev="ggregory" type="update" due-to="Kevin Wang">
        Fix syntax in user guide documentation #33.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-756" due-to="Gary Gregory">
        Allow for custom behavior to handle errors loading included properties files.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-757" due-to="Gary Gregory">
        Update org.yaml:snakeyaml from 1.24 to 1.25.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.apache.commons:commons-dbcp2 2.6.0 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.apache.commons:commons-pool2 2.6.2 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-758" due-to="Gary Gregory">
        Update commons-codec:commons-codec from 1.12 to 1.13.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.hsqldb:hsqldb 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from com.sun.mail:mailapi 1.6.3 to 1.6.4.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-759" due-to="Gary Gregory">
        Update Spring from 4.3.24.RELEASE to 4.3.25.RELEASE.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-760" due-to="Gary Gregory">
        Properties file using cyclical includes cause a StackOverflowError instead of detecting the misconfiguration.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update maven-checkstyle-plugin from 3.0.0 to 3.1.0. 
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Use current version of Checkstyle: 6.18 to 8.24.
      </action>
    </release>
    <release version="2.5" date="2019-05-23"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-731" due-to="Shuai Zhang, Gary Gregory">
        Allow user to specify the comments and separator chars.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-738" due-to="Gary Gregory">
        Update Jackson from 2.9.7 to 2.9.8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-739" due-to="Gary Gregory">
        Update Apache Commons Codec from 1.11 to 1.12.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-740" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.2 to 2.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-741" due-to="Gary Gregory">
        Update Spring from 4.3.19 to 4.3.22.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-743" due-to="Gary Gregory">
        Update optional library snakeyaml from 1.23 to 1.24.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Update Apache Commons Lang from 3.8.1 to 3.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-746" due-to="Gary Gregory">
        Update Jackson from 2.9.8 to 2.9.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Update Spring from 4.3.22 to 4.3.24.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-745" due-to="Gary Gregory">
        Add the special key "includeoptional" for properties files.
      </action>
    </release>
    <release version="2.4" date="2018-10-23"
             description="Minor release with new features and updated dependencies.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-710" due-to="thc202">
        Fixed numerous typos in user guides.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-711">
        Update Apache Commons Lang from 3.7 to 3.8.1.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-712" due-to="Rolland Hobbie">
        FileHandlerReloadingDetector now has a new refresh() method to
        initialize the reloading state from the underlying file. This new
        method is called by DefaultReloadingDetectorFactory when a new detector
        instance is created. This makes sure that a changed configuration file
        is directly detected on the first invocation of the
        isReloadingRequired() method.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-713" due-to="Lars W">
        Configuration properties can now be converted to regular expressions.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-715" due-to="Patrick Schmidt">
        With JupIOFactory a new IOFactory implementation is now available that
        implements handling of whitespace in a way closer to java.util.Properties.
        This class can be used when stricter compatibility with Java standard
        methods for reading and writing properties files is needed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-716" due-to="Patrick Schmidt">
        JupIOFactory (introduced for CONFIGURATION-715) also implements
        handling of escape sequences in a way closer to java.util.Properties.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-720">
        Replace use of deprecated Commons Lang string substitution code for Commons Text.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-694">
        Update Java requirement from version 7 to 8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-721">
        Update Jackson from 2.9.6 to 2.9.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-722">
        Update optional dependency snakeyaml from 1.21 to 1.23.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-723">
        Update optional Spring dependencies from 4.3.18.RELEASE to 4.3.19.RELEASE.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-724">
        Add support for Commons Text 1.4 localhost string lookup as a default lookup.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-725">
        Update Apache Commons Text from 1.4 to 1.5.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-726">
        Add support for Commons Text 1.5 new string lookups as default lookups.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-727">
        org.apache.commons.configuration2.DatabaseConfiguration never closes result sets and statements.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-728">
        Update Apache Commons Text from 1.5 to 1.6.
      </action>
    </release>

    <release version="2.3" date="2018-08-04"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="update" issue="CONFIGURATION-707">
        Update Spring from 4.3.14.RELEASE to 4.3.18.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-706">
        Update optional dependency snakeyaml from 1.20 to 1.21.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-705">
        Update Jackson from 2.9.5 to 2.9.6.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-652" due-to="Claude Warren">
        Root node attributes are now updated correctly when loading XML
        configuration files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-675">
        Added a .gitignore file to the project.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-678">
        Update Apache Commons Codec from 1.10 to 1.11.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-679">
        Update Jackson from 2.8.9 to 2.9.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-680">
        Update Apache Commons Lang from 3.6 to 3.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-681">
        Update Apache Commons VFS from 2.1 to 2.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-682">
        Update Snakeyaml from 1.18 to 1.19.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-696">
        Update optional dependency snakeyaml from 1.19 to 1.20.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-683">
        Update Spring from 4.3.9.RELEASE to 4.3.13.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-695">
        Update optional dependency Jackson from 2.9.3 to 2.9.5.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-697">
        Update optional dependency Spring from 4.3.13.RELEASE to 4.3.14.RELEASE.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-686">
        JSONConfiguration can now handle list structures with complex objects
        as elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-687">
        Fixed a memory leak in CombinedConfigurationBuilder. Builder for the
        child sources were created each time a new result configuration was
        requested; thus the list with child builders got longer and longer.
        This also had an impact on reloading because unnecessary reloading
        operations could be triggered. Now it is guaranteed that child builders
        are created only once.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-688">
        Fixed a bug related to the handling of multiple include files in
        PropertiesConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-690">
        ExprLookup.getVariables() no longer returns null, but a copy of the
        current variables of this lookup object.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-691">
        ExprLookup now handles expressions that do not return a string result
        by converting them to string.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-692">
        ConversionExceptions thrown when accessing the properties of a
        configuration now contain the original cause of the exception.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-693" due-to="Lars W">
        Configuration properties can now be converted to the data types File
        and Path.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-698">
        Add org.apache.commons.configuration2.MapConfiguration.toString().
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-701" due-to="Nicholas Verbeck">
        CompositeConfiguration now supports an addConfigurationFirst() method
        to add child configurations with a higher priority.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-703" due-to="Pascal Essiembre">
        XMLConfiguration now handles elements correctly whose value consists
        only of whitespace if the xml:space attribute is set to preserve.
      </action>
    </release>

    <release version="2.2" date="2017-10-12"
             description="Minor release with new APIs and bug fixes.">
      <action dev="oheger" type="add" issue="CONFIGURATION-673" due-to="Andreas Kuhtz ">
        Added an Automatic-Module-Name header to the manifest for compatibility
        with the Java 9 module system.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-671">
        Fixed a NPE in INIConfiguration when saving a configuration with an
        empty section.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-670">
        The node model returned by SubnodeConfiguration.getNodeModel() has now
        the correct root node set.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-669">
        Update optional Spring dependency from 4.2.5.RELEASE to 4.3.9.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-667">
        Update Apache Commons Lang from 3.3.2 to 3.6.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-666">
        Add convenience ctor ConfigurationRuntimeException(String, Object...).
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-665">
        Add org.apache.commons.configuration2.AbstractHierarchicalConfiguration.toString().
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-664">
        Add API org.apache.commons.configuration2.tree.ImmutableNode.getChildren(String).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-663">
        Fixed a typo in the upgrade to 2.0 guide.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-661">
        Update platform requirement from Java 6 to 7.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-660">
        Add toString() methods here and there to help debugging.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-658">
        Add API org.apache.commons.configuration2.DataConfiguration.getURI(String) methods.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-656" due-to="The Alchemist">
        Added new YAMLConfiguration class to support configuration files in
        YAML format.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-653" due-to="Vincent Maurin">
        ConfigurationUtils and ConfigurationConverter now offer better support
        for immutable configurations.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-647" due-to="Vladimir Martinek">
        INIConfiguration can now be configured to use a custom separator
        between properties and values when writing an ini file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-258" due-to="The Alchemist">
        Added new JSONConfiguration class to support configuration files in
        JSON format.
      </action>
    </release>

    <release version="2.1.1" date="2017-02-05"
      description="Bugfix release for 2.1">
      <action dev="oheger" type="fix" issue="CONFIGURATION-649">
        Improved the handling of lists defined by a string with delimiter
        characters in XMLConfiguration. Such lists now retain their original
        format when the configuration is saved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-648">
        Made the IOFactory property of PropertiesBuilderParameter compatible
        with the most recent version of Commons BeanUtils. This version
        changed the handling of properties starting with multiple uppercase
        letters.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-646">
        PropertiesConfiguration now works correctly with the auto-save mode.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-644" due-to="Andrew DeMaria">
        PropertiesConfigurationLayout no longer duplicates a header comment
        if a file with another comment is loaded.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-643">
        Documentation improvements for the user's guide.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-641">
        Improved documentation of FileBased interface. The Javadocs now state
        explicitly that the methods should not be called by client code.
        Exception handling in configuration classes implementing
        FileLocatorAware has been improved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-640">
        PropertiesConfiguration now correctly unescapes some special characters
        that are always escaped in Java properties files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-639"  due-to="Rico Neubauer">
        In the OSGi bundle manifest of the Commons Configuration bundle the
        package imports for Spring packages are now marked as optional.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-638"  due-to="Ahmet Celik">
        Improved handling of temporary files and folders in unit tests.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-627">
        Updated dependency to Commons BeanUtils to version 1.9.3. This fixes an
        issue with an exception stacktrace that was logged when a
        ConfigurationBuilder was used.
      </action>
    </release>

    <release version="2.1" date="2016-08-20"
      description="First maintenance release for Configuration 2.x.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-636"  due-to="Tim Lark">
        PropertiesConfigurationLayout now allows manipulating the order of keys
        when the properties file is written.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-634"  due-to="Raviteja Lokineni">
        HomeDirectoryLocationStrategy now works correctly in the mode that
        evaluates the FileLocator's base path.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-633">
        Interpolation was improved to better support properties with multiple
        values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-632">
        The methods getStringArray() and getList() of CompositeConfiguration
        now support the interpolation of variables that reference properties
        with multiple values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-628">
        Support for the ant build was dropped.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-626">
        ImmutableConfiguration.getArray() has been deprecated. Arrays can now
        be queried using the generic get() method in a type-safe way.
      </action>
      <action dev="deki" type="add" issue="CONFIGURATION-624">
        Support Commons Configuration as PropertySource in Spring.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-622">
        Fixed a problem in INIConfiguration.write() with keys containing a
        separator character. This separator had been duplicated. Such keys
        are now handled correctly when the configuration is saved.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-631">
        Update Apache Commons VFS from 2.0 to 2.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-635">
        Update optional dependency Apache Commons Codec from 1.9 to 1.10.
      </action>
    </release>

    <release version="2.0" date="2016-03-24"
      description="Major redesign of the Configuration 1.x API">
      <action dev="oheger" type="update" issue="CONFIGURATION-621">
        Moved ConfigurationLogger class to io package to avoid cyclic
        dependencies between packages.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-620" due-to="Mark Vedder">
        Fixed two invalid examples in the user's guide for file-based
        configurations.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-619">
        CombinedConfigurationBuilder now supports inheritance of its parameters
        to child configuration sources. This is enabled by default.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-618">
        When using immutable configurations exceptions thrown by the wrapped
        configuration came out as UndeclaredThrowableException. This has been
        fixed; now the correct original exception is thrown.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-615">
        Changed generic types in the signatures of a MapConfiguration
        constructor and AbstractConfiguration.getList(String, List). These
        changes were made in version 1.10 as fixes for CONFIGURATION-557 and
        CONFIGURATION-558. But it had been missed to merge them to trunk.
      </action>
    </release>

    <release version="2.0-beta2" date="2015-12-05"
      description="Second beta release, some minor API changes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-614">
        References to Commons Logging have been removed from the Configuration
        API. It is still possible to influence logging by making use of the new
        ConfigurationLogger abstraction.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-612" due-to="Jon Weygand">
        The return type of ConfigurationBuilder.getConfiguration() was changed
        from Configuration to ImmutableConfiguration because this is the base
        interface for all configuration objects.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-609">
        Fixed a bug in PropertiesConfiguration related to the loading of include
        files. The FileHandler used for this purpose was not fully initialized.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-608">
        Adapted the return type of ReloadingFileBasedConfigurationBuilder.configure().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-605">
        XMLConfiguration no longer drops keys when list delimiter characters
        occur in element values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-604">
        Fixed a problem in the conversion of a flat configuration to a
        hierarchical one that could cause the loss of properties in a
        combined configuration constructed by an override combiner.
      </action>
    </release>

    <release version="2.0-beta1" date="2015-06-19"
      description="First beta release, getting closer to final.">
      <action dev="oheger" type="update" issue="CONFIGURATION-598" due-to="Bjarne Bostr&#xF6;m">
        Removed obsolete ConfigurationBuilder interface in the base package.
      </action>
    </release>

    <release version="2.0-alpha2" date="2014-12-20"
      description="Some more API fine-tuning.">
      <action dev="oheger" type="add" issue="CONFIGURATION-574">
        DefaultExpressionEngine can now be customized to match configuration
        keys in a case-insensitive manner. This is useful for instance for
        dealing with Windows INI files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-565">
        Added support for querying encoded properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-564">
        PropertiesConfiguration now supports again properties without a value
        and a separator character. The keys of such properties are added to
        the configuration with an empty String as value.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-427">
        XMLPropertyListConfiguration can now save arrays in the correct form.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-200">
        A size() method was added to the ImmutableConfiguration interface.
      </action>
    </release>

    <release version="2.0-alpha1" date="2014-09-23"
      description="First alpha release after a major redesign.">
      <action dev="oheger" type="update" issue="CONFIGURATION-591">
        Removed methods from ConfigurationConverter related to ExtendedProperties.
        This class is no longer supported by recent versions of Commons
        Collections.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-590">
        Removed Serializable interface from all configuration implementations.
        Some configuration classes declared this interface without being
        actually serializable.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-588">
        The name of the top-level package and the maven coordinates have been
        changed to allow a coexistence of Commons Configuration 1.x with 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-584">
        The event mechanism has been reworked. There is now a generic event
        listener interface which can be used to receive notifications from
        multiple types of event sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-582">
        Fixed a StringIndexOutOfBoundsException in PropertiesConfigurationLayout
        which was caused by lines containing only whitespace.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-579">
        A migration guide has been created which supports when upgrading from
        version 1.x to 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-578">
        The user's guide has been fully reworked to cover all new and enhanced
        features of version 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-577">
        The dependency to Commons Collections is no longer needed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-576">
        A new abstract base class for hierarchical configurations was introduced
        which supports arbitrary hierarchical data structures. The type of the
        nodes used by the configuration can now be specified as a generic type
        argument. This makes the integration of other hierarchical structures
        easier.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-575">
        Hierarchical configurations now operate on immutable structures.
        Data is no longer represented by ConfigurationNode objects. The
        ImmutableNode class now serves as data container.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-573">
        XPathExpressionEngine can now deal with namespace prefixes in node and
        attribute names.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-572">
        When a CombinedConfiguration is cleared it removes itself as change
        listener from all child configurations. This fixes a possible memory
        leak.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-570">
        Fixed a possible ConcurrentModificationException when a SystemConfiguration
        instance is passed to the append() or copy() methods.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-567" due-to="Shen liang">
        XMLBeanDeclaration now escapes node names before they are used to
        determine nested properties.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-563">
        The DefaultExpressionEngine class is now immutable. An instance can be
        shared between multiple configuration objects.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-562">
        Improved the API of ExprLookup.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-559">
        It is now possible to define default values for initialization
        properties of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-554">
        BeanHelper is no longer a static utility class. Instances can be
        created with a specific configuration of bean factories. There is still
        a default instance which can be obtained via the BeanHelper.INSTANCE
        field.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-553">
        The code for accessing configuration files hs been reworked. Methods
        related to locating configuration files have been moved from
        ConfigurationUtils to a new FileLocatorUtils class. Customizable
        strategy classes (implementing the new FileLocationStrategy) can be
        used for searching for configuration files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-551">
        The data type conversion mechanism has been made extensible. There is a
        new interface ConversionHandler which controls the data type conversions
        available for a configuration object. By setting a custom implementation,
        conversions can be adapted or extended.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-544" due-to="Oliver Kopp">
        Added missing dependencies to build.xml.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-542">
        The mechanism for synchronizing configurations has been completely
        redesigned. It is now based on Synchronizer objects which can be
        configured by client code. A new chapter was added to the user's guide
        regarding thread-safety of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-540">
        MapConfiguration now directly uses a Properties object passed to its
        constructor as data store rather than copying it. This allows
        SystemConfiguration to be connected to system properties; i.e.
        changing a property through SystemConfiguration immediately affects
        the corresponding system property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-541">
        Multi-file configurations are no longer restricted to XML configuration
        files. Arbitrary file-based configurations are now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-539">
        The deprecated INIConfiguration class was removed.
        HierarchicalINIConfiguration was renamed to INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-537">
        The deprecated ConfigurationFactory class was removed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-536">
        File-based configurations are now implemented in a different way.
        The interfaces FileConfiguration and ReloadingStrategy have been
        removed, also the base classes AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration. They are replaced by the
        FileBased interface and the FileHandler class which implements
        central I/O functionality. Reloading is now in the responsibility of
        configuration builders.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-535">
        DatabaseConfiguration now provides get methods for querying its
        properties defining the underlying database structures.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-533">
        DatabaseConfiguration now automatically converts CLOBs to strings if
        they appear in property values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-530">
        Concurrent access to configurations and reloading have been completely
        redesigned. Because reloading is now handled by configuration builders
        there is no need to acquire a lock in order to protected against a
        reload operations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-527" due-to="Matthias Richter">
        AbstractConfiguration.clearPropertyDirect() is now abstract.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-524">
        Interpolation now works correctly after a configuration was cloned.
        The ConfigurationInterpolator instance is now cloned, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-521" due-to="Oliver Kopp">
        ConfigurationUtils.fileFromUrl() now correctly handles URL containing
        encoded percent characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-520">
        Support for reloading of configuration data has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-519">
        Configuration objects are now created via configuration builders. A new
        API for configuration builders has been added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-518">
        Classes and interfaces related to interpolation have been slightly
        reworked. ConfigurationInterpolator is now thread-safe. There are
        multiple ways to define the ConfigurationInterpolator object to be
        used by an AbstractConfiguration instance.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-517">
        Hierarchical configurations now provide methods to obtain sub
        configurations for all child elements of a given key.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-516">
        PropertiesConfiguration no longer escapes double quotes on saving.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-515">
        The visibility of some internal methods of PropertiesConfiguration.PropertiesWriter
        has been increased to protected. This simplifies the implementation of
        a custom escaping strategy.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-514">
        Bean declarations now support constructor invocations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-513">
        HierarchicalConfiguration is now an interface. The base implementation
        class is named BaseHierarchicalConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-512">
        It is now possible to obtain an immutable view on a Configuration or
        HierarchicalConfiguration object. New interfaces,
        ImmutableConfiguration, and ImmutableHierarchicalConfiguration have
        been introduced.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-508">
        Generic get() methods have been added to the Configuration interface.
        These methods expect a target class and try to convert the value of
        the specified property to this target class.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-506">
        Removed obsolete nested classes Node and NodeVisitor of
        HierarchicalConfiguration. The related deprecated class
        ConfigurationKey was removed, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-505">
        XMLConfiguration no longer supports attributes with multiple values or
        list delimiter parsing in attributes. This feature was complex and
        error prone and brought little value to the user.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-504">
        SubnodeConfiguration now provides a new method for clearing it and
        removing its root node from the parent configuration. The method
        HierarchicalConfiguration.configurationsAt() now returns a list
        of SubnodeConfiguration so that it is easier to make direct use of
        this feature.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-496">
        Concurrent access to configurations and reloading have been completely
        redesigned. This should reduce the amount of synchronization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-486">
        Removed some static fields for specifying global default values.
        Using static fields in this way is thread-hostile. There are now
        alternatives for setting default values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-462">
        Updated dependency to Commons Lang from version 2.6 to 3.1.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-419">
        EventSource is now an interface. With BaseEventSource there is a
        default implementation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-418">
        The handling of list delimiters and their escape characters has been
        reworked. A new ListDelimiterHandler interface was introduced allowing
        applications to customize the treatment of list delimiters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-330">
        Concurrent access to configurations has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-204">
        With the new reloading mechanism automatic and periodic reloading checks
        can be performed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-202">
        Reloading checks can now be performed in a background thread.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-153">
        It is now possible to define the strategy used for locating
        configuration files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-136">
        Reloading can no longer corrupt a configuration instance. This is now
        handled by a configuration builder; the original configuration instance
        is not modified.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-26">
        It is now possible to influence the conversion from a container object
        (a collection or an array) to a single value (e.g. what is returned by
        getString() if the current property has multiple values). Per default,
        the first value is returned. By overriding methods of the
        configuration's ConversionHandler, this behavior can be changed.
      </action>
    </release>

    <release version="1.10" date="2013-10-27"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-556">
        In 1.7 and before, any change to the system properties was
        immediately reflected in a SystemConfiguration object. This
        behavior broke in 1.8 and 1.9. This has been fixed for 1.10.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-557">
        In 1.7 and before, it was possible to pass an arbitrary Map
        into the constructor of MapConfiguration. With the
        generification in 1.8, this actually broke and it was no
        longer possible to pass in e.g. a Map&lt;String, String&gt;
        because the signature now required a Map&lt;String,
        Object&gt;. Changing the constructor to accept a
        Map&lt;String, ?&gt; restores this.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-558">
        Similar to CONFIGURATION-557, the getList(String, List) method
        was generified to be getList(String, List&lt;Object&gt;) but
        needs to be getList(String, List&lt;?&gt;) so that code that
        used a more specific list (such as a List&lt;String&gt;) still
        compiles against the new API.
      </action>
    </release>

    <release version="1.9" date="2012-08-22"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-503" due-to="Tino Sino">
        Small changes in user guide documentation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-502" due-to="Tino Sino">
        Improvements of basic features and AbstractConfiguration documentation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-501">
        XMLPropertyListConfiguration no longer swallows exception caused by
        invalid date properties. Now a warning message is logged.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-495">
        List properties can now be set correctly on a HierarchicalConfiguration
        if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-488">
        Made static DateFormat fields in XMLPropertyListConfiguration.PListNode
        final and added a note about proper synchronization.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-487">
        DataConfiguration.get() now also works with String properties and if no
        data type conversion is required.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-483">
        DatabaseConfiguration now always closes the result set.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-482" due-to="Chris Seieroe">
        The Import-Package section in the OSGi manifest now uses the
        resolution:=optional directive for optional dependencies.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-481">
        Variable substitution in configuration sources declared in a definition
        file for DefaultConfigurationBuilder now works across multiple sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-477">
        PropertyListConfiguration now can deal with C-style comments in plist
        configuration files. Both block and single-line comments are supported.
      </action>
    </release>

    <release version="1.8" date="2012-02-04"
      description="Support for Java 1.5">
      <action dev="oheger" type="fix" issue="CONFIGURATION-476">
        Fixed possible ClassCastExceptions in CompositeConfiguration related to
        special in-memory configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-475">
        Class ConfigurationKey was deprecated in favor of DefaultConfigurationKey.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-474">
        Implemented delimiter parsing in HierarchicalINIConfiguration to be
        consistent with other Configuration implementations. Note that this can
        impact existing code. To switch back to the old behavior, call
        setDelimiterParsingDisabled(true) before loading the configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-471">
        CompositeConfiguration now provides better support for child
        configurations that are used as in-memory configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-470">
        Classes generated by JavaCC are now created dynamically during the
        build process.
      </action>
      <action dev="ebourg" type="add">
        Commons Configuration now requires Java 5 or later.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-466">
        Binary literals are now supported (i.e Ob11010001).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-465">
        Updated the dependency to Commons Jexl to version 2.1.1. This version
        provides correct OSGi manifest headers.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-463">
        Improved documentation of AbstractFileConfiguration related to load()
        methods and their impact on the base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-461">
        The project now uses standard Maven directory layout.
      </action>
    </release>

    <release version="1.7" date="2011-09-07"
      description="Many bugfixes, some new features.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-460">
        Reloading now also works for configuration sources declared in the
        additional section of a configuration definition file for
        DefaultConfigurationBuilder.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-459">
        ConfigurationFactory has been deprecated. The user guide was updated to
        no more mention this class.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-458">
        HierarchicalConfiguration now provides a specific implementation of the
        clear() method. This is more efficient and also solves some other
        problems related to clearing a SubnodeConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-456">
        Improved Javadocs of getKeys(String) method for some configuration
        classes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-455">
        HierarchicalINIConfiguration.getSection() now creates a section if it
        does not exist. The SubnodeConfiguration returned by this method is now
        always connected to the parent ini configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-452">
        XPathExpressionEngine now provides better support for the setProperty()
        method.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-448">
        The parsing of ini files has been improved for property definitions
        containing multiple separator characters.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-447">
        DefaultConfigurationBuilder now supports including environment properties
        using the "env" tag.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-446">
        XMLConfiguration now handles attributes correctly whose value is an
        empty string.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-445">
        Transforming a CombinedConfiguration with ViewNodes to an
        XMLConfiguration could cause problems with attributes. This has been
        fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-439">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit the configuration and
        error listeners from the original DefaultConfigurationBuilder. This
        makes it possible to suppress log output created for optional
        configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-438" due-to="Mike Noordermeer">
        JNDIConfiguration.getKeys() no more logs an exception if the prefix does
        not exist.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-437">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit some of their properties
        from the builder object which processed the file.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-436">
        The optional dependency to Apache Ant has been changed to the new
        groupId org.apache.ant. The version was updated to the most recent
        version 1.8.2 (older versions should still work).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-434">
        HierarchicalINIConfiguration now recognizes comment characters in
        property definitions only if they are preceded by whitespace. Thus
        comment characters can now be part of the property value. This is for
        instance required for the definition of file paths which use the
        semicolon as path separator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-433">
        Minor improvements of the support for indexed properties in
        ConfigurationDynaBean.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-432">
        The methods getList() and getStringArray() of AbstractConfiguration can
        now handle single-valued properties of primitive types.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-428">
        XMLConfiguration no longer escapes backslashs in the values of
        XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-424">
        HierarchicalINIConfiguration now works correctly with configurations
        that contain only properties in the global section.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-423" due-to="William Buckley">
        testFromClassPath() can fail when it should not because of inconsistent escaping of output from
        PropertiesConfiguration.getURL() and FileChangedReloadingStrategy.getFile().toURL().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-418">
        A bug related to the interpretation of escape sequences for backslashes
        has been fixed. The user guide has also been improved in this area.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-415">
        Files with a plus character in their names are now handled correctly.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-413" due-to="Alexander Prishchepov">
        SubsetConfiguration now produces correct events.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-412">
        DatabaseConfiguration can now be instructed to perform a commit after an
        update of the managed database table. This makes it usable in
        environments where the connections do not use auto-commit mode.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-410">
        Added a refresh() method to AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-409">
        HierarchicalINIConfiguration now correctly saves sections whose name
        contains delimiter characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-408">
        PropertiesConfiguration.save() escaped slashes in properties values.
        This was caused by a bug in commons-lang 2.4. Updating to the new
        version commons-lang 2.5 fixed this problem.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-407">
        Fixed a potential IllegalStateException in HierarchicalINIConfiguration
        that can be thrown when the global section is requested concurrently.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-405">
        XMLPropertyListConfiguration no longer throws a ConfigurationException
        if the file to be loaded does not have an outer dict element.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-404" due-to="Rob Walker">
        The default expression engine used by hierarchical configurations used to
        throw a NumberFormatException if invalid indices were used in property
        keys. This has been fixed. As a side effect brackets can now be used in
        property keys.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-403">
        When an empty XMLConfiguration was saved and reloaded the root element
        was assigned an empty text value. Because of this isEmpty() returned
        false for this configuration. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-399">
        Default variable interpolation now supports the env: prefix for
        referencing environment variables.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-397">
        Schema violation exceptions are now propagated back to the caller.
      </action>
       <action dev="rgoers" type="fix" issue="CONFIGURATION-390">
        XMLConfiguration and CombinedConfiguraton are now synchronized to fix problems
        caused by reloading in a multithreaded environment.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-396">
        HierarchicalConfiguration.NodeVisitor is now passed the correct key to
        its visitAfterChildren() method.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-393">
        BaseConfiguration.clone() now also clones collections stored in the
        internal map. This causes list properties to be handled correctly.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-389">
        DefaultConfigurationBuilder now supports defining ini files in its
        configuration definition file.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-388">
        Attribute or element values will not be escaped when attribute or element splitting are disabled.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-363">
        When using Commons Lang 2.6 or higher as dependency nested interpolation
        in variable names is supported.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-362">
        Empty dictionaries in a PropertyList configuration are now preserved when the configuration is saved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-385">
        DatabaseConfiguration now generates correct events for the clear() and
        clearProperty() methods.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-380">
        Add ExprLookup to allow expressions to be evaluated in configurations. When
        used, this requires that Apache Commons Jexl be added as a dependency to
        projects using Commons Configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-374">
        MapConfiguration now provides a way of controlling the trimming
        behavior.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-378">
        Added MergeCombiner to allow elements in two configurations to be merged when the
        element and attributes in the first file match those in the second file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-340">
        File system access has been abstracted to a FileSystem interface. Two implementations
        are provided, DefaultFileSystem that behaves in a backward compatible manner and
        VFSFileSystem which uses Commons VFS to retreive and store files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-314">
        PropertiesConfigurationLayout now allows setting the line separator to
        be used when writing the properties file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-371">
        PropertiesConfigurationLayout now also stores the property separators used for
        the single properties. It is also possible to change them for specific
        properties or set a global properties separator. In earlier versions
        the separator was hard-coded to &quot; = &quot;.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-370">
        PropertiesConfiguration now defines a nested interface IOFactory. Using
        this interface it is possible to inject custom PropertiesReader and
        PropertiesWriter implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-368">
        SubnodeConfiguration now fires an event of type EVENT_SUBNODE_CHANGED
        if a structural change of the parent configuration was detected. If the
        SubnodeConfiguration is contained in a CombinedConfiguration, the
        CombinedConfiguration receives this event and can update itself.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-361">
        MultiFileHierarchicalConfiguration was not using basepath to
        construct the file url. It also threw an exception if the
        file pattern resolved to a non-existent file. This is now
        configurable.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-375">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration. SubsetConfiguration will now also interpolate
        keys of the parent configuration or use the local lookups of its
        parent. SubnodeConfiguration is in turn now able to lookup local
        keys as well.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-376">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-377">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="fix" issue="CONFIGURATION-369">
        SubsetConfiguration did not use locally registered lookups of its
        interpolator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-359">
        Fixed broken links to the API documentation in the user's guide.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-358">
        Improvements of the user's guide for hierarchical configurations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-357">
        The message of the ConversionException thrown by
        AbstractConfiguration.getBigInteger() is now correct.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-356">
        Added getConfigurations and getConfigurationNameList.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-257">
        Allow configurations to be validated using XML Schemas.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-355">
        Allow configurations to be validated using XML Schemas.
      </action>
    </release>

    <release version="1.6" date="2008-12-25"
      description="Another set of smaller bug fixes">
      <action dev="oheger" type="update">
        Some dependencies to other Commons components have been updated to the
        recent versions. Affected are Commons Lang, Commons Collections,
        Commons Logging, Commons BeanUtils, and Commons JXPath. The older
        versions should still work.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-353">
        Allow system properties to be set from a configuration file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-351">
        Allow variable resolvers to be defined configured in
        DefaultConfigurationBuilder.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-350">
        Added MultiFileHierarchicalConfiguration, DynamicCombinedConfiguration
        and PatternSubtreeConfigurationWrapper.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-349" due-to="Ralph Goers">
        The visibility of DefaultConfigurationBuilder.XMLConfigurationProvider
        was changed from package local to public. This makes it easier to
        implement providers that create configuration classes derived from
        XMLConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-348">
        AbstractHierarchicalFileConfiguration.getKeys() now also checks whether
        a reload is required.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-347">
        AbstractFileConfiguration.getKeys() now returns an iterator that points
        to a snapshot of the keys of the configuration. This prevents
        ConcurrentModificationExceptions during iteration when a reload is
        performed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-346">
        ConfigurationUtils.convertToHierarchical() now creates multiple
        configuration nodes for properties with multiple values. This
        improves compatibility with queries.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-345">
        PropertiesConfiguration now per default uses the encoding "ISO-8859-1"
        for loading properties files.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-344">
        CombinedConfiguration could cause a deadlock when it was accessed while
        concurrently a reload of one of its child configuration happened. This
        was fixed by reducing synchronization where it is not strictly
        necessary.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-341">
        The "force reload check" mechanism of CombinedConfiguration now also
        works with sub configurations created by configurationAt().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-339">
        When performing interpolation the methods getList() and getStringArray()
        of CompositeConfiguration did not take the order of child configurations
        into account. This could lead to wrong interpolated values when the key
        was contained in multiple child configuration. Interpolation is now
        always done in the correct order.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-338" due-to="David Donn">
        PropertiesConfiguration now also performs interpolation when searching
        for include files. This means that the name of a file to include can be
        determined by another property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-337" due-to="Ralph Goers">
        DefaultConfigurationBuilder now supports defining new configuration
        providers in the configuration definition file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-336">
        When converting a flat configuration to a hierarchical one it is now
        possible to specify the expression engine to be used for this purpose.
        This may be necessary if the flat configuration contains keys with
        special characters interpreted by the expression engine.
        CombinedConfiguration defines the new setConversionExpressionEngine()
        method. The expression engine passed to this method will be used when
        converting flat child configurations to hierarchical ones.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-335">
        XMLConfiguration now allows disabling the attribute splitting mechanism
        introduced in the 1.5 release (as part of the fix for CONFIGURATION-268).
        This may be necessary for correctly processing attributes containing
        both the list delimiter and the attribute delimiter character. The new
        property &quot;disableAttributeSplitting&quot; was added for this
        purpose.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-334">
        Made handling of parent nodes more consistent when setRoot() or
        setRootNode() of HierarchicalConfiguration are involved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-332">
        Properties written through a DataConfiguration to a wrapped
        PropertiesConfiguration got lost when the PropertiesConfiguration was
        saved. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-331">
        XMLBeanDeclaration now defines a factory method createBeanDeclaration()
        for creating the declarations for complex nested properties. This
        method can be overridden by derived classes for injecting custom
        BeanDeclaration implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-328">
        A bug in XMLConfiguration.addNodes() made it impossible to add
        attribute nodes using this method. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-327">
        INIConfiguration misinterpreted variables in the global section with
        a dot in their name as section names. HierarchicalINIConfiguration fixes
        this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-326">
        INIConfiguration does not support obtaining a subset for the global
        section. HierarchicalINIConfiguration provides the getSection() method
        that returns the content of the global section if null is passed in as
        section name.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-325">
        INIConfiguration does not return the global section in its getSections()
        method. HierarchicalINIConfiguration fixes this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-324">
        HierarchicalINIConfiguration adds support for line continuation.
      </action>
      <action dev="oheger" type="update">
        INIConfiguration has been deprecated. Its functionality is now available
        through the new HierarchicalINIConfiguration class.
      </action>
      <action dev="oheger" type="add">
        With HierarchicalINIConfiguration a complete new Configuration
        implementation for parsing Windows INI files is available. This new
        class is a full replacement of INIConfiguration and addresses some of its
        shortcomings. Being derived from HierarchicalConfiguration it offers
        the enhanced functionality of hierarchical configurations.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-322">
        ConfigurationDynaBean now works properly with indexed properties
        stored internally in the underlying configuration as arrays.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-321">
        The iterator returned by HierarchicalConfiguration.getKeys(String prefix)
        now also contains the prefix if this key is contained in the
        configuration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-320">
        XMLPropertyListConfiguration is no longer limited to 32 bits integers.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-318">
        When an XMLConfiguration is created using the copy constructor, the name
        of the root element is now preserved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-316">
        Changing the text of the root element of an XMLConfiguration had no
        effect when the configuration was saved. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-315">
        CombinedConfiguration used to send two EVENT_COMBINED_INVALIDATE events
        for each modified child configuration. Now this event is sent only
        once after the affected child configuration was updated.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-307">
        XMLConfiguration now supports the xml:space attribute. This attribute
        can be used to preserve whitespace in the content of XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-306">
        INIConfiguration now preserves whitespace in quoted values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-302">
        If a change has been detected by FileChangedReloadingStrategy, the
        reloadingRequired() method will now return true until
        reloadingPerformed() has been called.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-301">
        Fixed a NullPointerException that could be thrown under certain
        circumstances when saving an XMLConfiguration that was created using
        the constructor that takes a HierarchicalConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-309">
        Instantiating an XMLPropertyListConfiguration no longer fails
        if the DTD is missing from the classpath.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-300">
        It's now possible to read a configuration file containing
        a '#' in its name (requires Java 1.4 or above).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-260">
        Fixed the date format for XMLPropertyListConfiguration.
      </action>
    </release>

    <release version="1.5" date="2007-11-24" description="Many smaller bugfixes">
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        Some of the dependencies in the m2 pom have been updated to be more
        consistent.
      </action>
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        The dependency to commons-logging was updated to the current version
        1.1. Older versions of commons-logging will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-273">
        A new method interpolatedConfiguration() was added to AbstractConfiguration.
        This method returns a configuration with the same type and
        content as the original configuration, however all variables have been
        resolved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-299">
        Resolving of variables with the prefix const (constant fields) caused
        a ClassCastException under certain circumstances if non-String fields
        were involved. This has been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Nicolas De Loof">
        The dependencies to commons-codec and commons-jxpath have been marked
        as optional. They are not required by the core classes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-284" due-to="Nicolas De Loof">
        There is a new configuration implementation EnvironmentConfiguration,
        which provides access to (OS) environment variables. On Java &gt;= 1.5
        this class can be directly used; on earlier versions a dependency to ant
        is required.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-296">
        A bug in XMLConfiguration caused that attributes of the root element
        could not be changed. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-290">
        A new method registerEntityId() was added to XMLConfiguration, which
        allows to register URLs for entities. A new default implementation of
        the EntityResolver interface handles these entities automatically.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-295">
        The subset() method of HierarchicalConfiguration now takes the value of
        the subset's root node into account if it is not ambigous.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-294">
        Nodes added to a XMLConfiguration using the addNodes() method could
        lose their value when the configuration was saved. This is now fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-272">
        New copy() and append() methods have been added to AbstractConfiguration.
        They replace the methods with the same names in ConfigurationUtils,
        which do not handle all features of AbstractConfiguration properly (e.g.
        list delimiters in property values are incorrectly treated). To avoid
        such problems, the new methods should be used.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-291">
        The addNodes() method of hierarchical file-based configurations now
        correctly triggers an auto save.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-287">
        HierarchicalConfiguration.addNodes() now resets the reference property
        of all nodes to be added. This fixes a problem with XMLConfiguration,
        which now detects the added nodes as new and treats them correctly when
        the configuration is saved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-285">
        DefaultConfigurationBuilder will now notify registered error listeners
        about optional configuration sources that could not be created. Before
        exceptions thrown by optional configurations were swallowed
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-283">
        ConfigurationUtils.convertToHierarchical() now correctly deals with
        property values containing escaped list delimiters. This also affects
        CombinedConfiguration when sub configurations with such property values
        are contained.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-275">
        AbstractConfiguration.addProperty() now correctly deals with list and
        array properties if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-282">
        The default expression engine used by HierarchicalConfiguration
        instances is now lazily initialized. This avoids NullPointerExceptions
        in certain server environments after a redeploy.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-281">
        Cycles in the JNDI tree no longer cause a stack overflow in
        JNDIConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-277">
        The base implementation of clear() in AbstractConfiguration now checks
        for a potential UnsupportedOperationException when iterating over the
        existing properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-280"
        due-to="Roman Kurmanowytsch">
        Using file-based configurations in auto-save mode together with a
        reloading strategy could cause data loss. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-279">
        A PropertiesConfiguration that was created from a non existing file
        lost its content when it was saved. This problem has been solved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-215">
        A new getSource() method was added to CompositeConfiguration and
        CombinedConfiguration, which returns the child configuration, in which
        a given property is defined.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-274">
        PropertiesConfiguration now supports escaping the escape character for
        list delimiters.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-269">
        PropertiesConfiguration no longer escapes the list delimiter on saving
        if the list delimiter has been disabled.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-270">
        List properties and properties containing interpolated variables
        are now properly saved by INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-268">
        When delimiter parsing was disabled for XMLConfiguration, saving and
        loading the configuration accidently added escape characters to properties
        containing the list delimiter character. This has been fixed. It is now
        also possible to escape the escape character itself.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-253">
        The return value of FileConfiguration.getFile() is now always
        consistent with the result of getURL().
      </action>
      <action dev="ebourg" type="update">
        INIConfiguration uses the platform's specific line separator instead
        of the Windows line separator.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-267">
        INIConfiguration flushes the output at the end of a save operation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-265">
        For hierarchical file-based configurations the auto-save mechanism is
        now also triggered if a subnode configuration is changed. In such a case
        the new event type EVENT_SUBNODE_CHANGED will be sent to registered
        listeners.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-266" due-to="Tobias Noebel">
        ConfigurationInterpolator now also invokes the default lookup object for
        variables with a prefix that could not be resolved by their associated
        lookup object.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-264">
        A SubnodeConfiguration per default does not see certain changes of its
        parent configuration (e.g. reloads). With a new boolean parameter of
        HierarchicalConfiguration's configurationAt() method a mode can be
        enabled, in which the subnode configuration checks for such changes and
        reconstructs itself if necessary.
      </action>
      <action dev="ebourg" type="fix">
        byte[] properties are properly saved as data fields in the plist
        configurations (PropertyListConfiguration and XMLPropertyListConfiguration).
      </action>
      <action dev="ebourg" type="add">
        DataConfiguration now supports java.net.InetAddress,
        javax.mail.internet.InternetAddress, and Java 5 enumeration types.
        Properties are converted to these types using the new generic getters.
      </action>
      <action dev="ebourg" type="fix">
        The object getters in DataConfiguration with no default value
        (i.e getURL(key)) now throw a NoSuchElementException if the flag
        throwExceptionOnMissing is set.
      </action>
      <action dev="ebourg" type="add">
        Generic get methods have been added to DataConfiguration (get(),
        getArray() and getList())
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-263">
        XMLConfiguration used to drop attributes when an element's value was a
        list. This has been fixed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-249">
        File configurations can now be saved to FTP URLs, or any other URL
        protocol supporting data output.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-180">
        Fixed a potential issue in DatabaseConfiguration where an error on
        closing a statement would prevent the connection from being closed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-261">
        Date objects are now supported in ASCII plist files.
      </action>
      <action dev="ebourg" type="update">
        XMLPropertyListConfiguration no longer requires commons-digester and
        commons-beanutils to work.
      </action>
      <action dev="ebourg" type="update">
        Fixed INIConfiguration to handle the quoted values and the lines
        containing a value and a comment.
      </action>
    </release>

    <release version="1.4" date="2007-04-08" description="Improved interpolation, configuration for INI files, reloading strategy triggered with JMX, bug fixes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-256">
        MapConfiguration and the web-based configurations now treat strings
        that contain an escaped list delimiter correctly: The escape character
        will be removed, so that for instance "foo\,bar" becomes "foo,bar".
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-255">
        DatabaseConfiguration now handles list delimiters in property values
        correctly.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-254" due-to="Carsten Kaiser">
        After cloning a XMLConfiguration there was still a connection to the
        original configuration. So when the clone was modified and then saved
        the content of the original configuration was written. This has now
        been fixed.
      </action>
      <action dev="oheger" type="update">
        Class loading in BeanHelper is now done using ClassUtils of Commons
        Lang.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-237" due-to="Nicolas de Loof">
        With ManagedReloadingStrategy a new reloading strategy for file-based
        configurations was added that can be triggered through JMX.
      </action>
      <action dev="oheger" type="update">
        The dependencies to Commons Lang, Commons Collections, and Commons Digester
        are updated to use the recent available version. However older versions
        will still work.
      </action>
      <action dev="oheger" type="add">
        A pom for maven 2 was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-252">
        ConfigurationUtils.getFile() now always checks first whether the passed
        in file name is absolute. If it is, this file will be returned. This
        prevents that on Unix under certain circumstances absolute file names
        are interpreted as relative ones.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-251">
        The dependency to xml-apis was changed to the version 1.0.b2. The so
        far used version 2.0.2 is reported to be bogus.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-245">
        In addition to configuration event listeners now so-called configuration
        error listeners are supported. These listeners are notified about
        internal errors that had been logged and swallowed by privious versions.
        The new enableRuntimeExceptions() method of ConfigurationUtils
        registers a special error listener at the passed in configuration that
        generates a runtime exception when an error event is received.
      </action>
      <action dev="oheger" type="add">
        AbstractConfiguration now allows to set an instance specific logger
        using the setLogger() method. This gives clients more control over a
        configuration's logging behavior.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-155">
        SubsetConfiguration and CompositeConfiguration were updated to fully
        support an instance specific list delimiter. Concerning splitting of
        string properties that contain a list delimiter character, these
        classes now behave like a "normal" configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-192">
        Variable interpolation features have been improved. A variable can now
        have the form ${prefix:variableName} where the prefix
        defines the type of the variable. The standard types sys for
        system properties and const for constants are supported.
        Variables without a prefix are treated as references to other
        configuration properties (which is compatible to earlier versions).
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Lang 2.2. Some features
        of Lang's new text package are used.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-244">
        The number of dependencies needed for DefaultConfigurationBuilder was
        reduced by letting some of the default configuration providers resolve
        their classes per reflection.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-240">
        File-based configurations with a reloading strategy did not work well
        together with CombinedConfiguration because the reloading strategy is
        only checked when its associated configuration is accessed (which does
        not happen when only the combined configuration is queried).
        As a workaround CombinedConfiguration now provides the boolean
        forceReloadCheck property. If this is set to true, all contained
        configurations will be triggered when a property is queried. This will
        cause a reload if necessary.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-243">
        Configuration declarations in the configuration definition file for
        DefaultConfigurationBuilder that are marked as optional now support a
        new attribute config-forceCreate. If this attribute is set
        to true and the initialization of the configuration fails,
        DefaultConfigurationBuilder tries to add an empty configuration of the
        correct type to the resulting combined configuration. Before this
        change optional configurations that caused errors were never added to
        the combined configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-241">
        CompositeConfiguration.clearProperty() now generates the correct
        update events.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-242">
        The configuration returned by HierarchicalConfiguration.subset()
        performed variable interpolation only in the keys that belong to the
        subset. Now the parent configuration is searched, too, to resolve the
        value of the referenced property. This is consistent with the way
        SubnodeConfiguration works.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-234">
        DefaultConfigurationBuilder now internally uses the standard expression
        engine for hierarchical configurations. So the dependency to Commons
        JXPath is no more needed when this class is used. Note that this change
        has some impact on existing code that manually sets properties before
        the combined configuration is created; this code must now be adapted to
        the changed syntax of property keys.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-236">
        HierarchicalConfiguration and some of its sub classes now define a
        copy constructor.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-197" due-to="Trevor Charles Miller">
        A new configuration class for windows ini files was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-229">
        For file-based configurations loaded by ConfigurationFactory the load()
        method was called before all of the properties specified by attributes
        of the XML element have been initialized. Now load() is called after
        property initialization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-235">
        Interpolation of non string values did not work when SubsetConfiguration
        was involved. This has now been fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-227">
        The compatibility of ConfigurationDynaBean with other configuration types
        than those that inherit from BaseConfiguration was improved.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-233" due-to="Rainer Jung">
        The getList() method of CompositeConfiguration does now fully support
        variable interpolation. So it is possible to refer to a variable in
        one (sub) configuration that is defined in another configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-230">
        XPathExpressionEngine used to create wrong keys for attribute nodes.
        This caused some operations on XMLConfiguration to fail when such an
        expression engine was set (e.g. reloading). Now correct keys for
        attributes are constructed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-228">
        Some of the methods of file-based hierarchical configurations (e.g.
        subset() or configurationAt()) did not take an eventually set reloading
        strategy into account. This is now fixed by overriding the internal
        fetchNodeList() method in AbstractHierarchicalFileConfiguration and
        letting it always check for a reload.
      </action>
    </release>

    <release version="1.3" date="2006-09-24">
    </release>

    <release version="1.3-rc2" date="2006-09-03">
      <action dev="oheger" type="update" issue="CONFIGURATION-223" due-to="Gabriele Garuglieri">
        AbstractFileConfiguration now overrides addProperty() and setProperty()
        instead of addPropertyDirect() to implement the auto save feature.
        This was necessary to properly integrate PropertiesConfigurationLayout.
        It has also the advantage that an auto save is triggered only once if
        multi-valued properties are involved (before a save operation was
        performed for each property value).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-222" due-to="Gabriele Garuglieri">
        The new PropertiesConfigurationLayout class broke the save() operation
        of PropertiesConfiguration when an instance was newly created and
        populated in memory. This is fixed now by ensuring that a layout object
        is immediately created and registered as event listener at the
        configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-221" due-to="Rainer Jung">
        ConfigurationFactory now supports variables in its configuration
        definition files. These variables are resolved using system properties
        and have the typical ${} syntax.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216" due-to="Gabriele Garuglieri">
        There were still some problems with resolving relative paths when
        configuration files are loaded from classpath. This fix addresses these
        issues.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-220">
        DataConfiguration.getDateArray() used to ignore the format argument.
        This was fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-219">
        PropertiesConfiguration now defines its own clone() method to handle
        the associated PropertiesConfigurationLayout object correctly.
      </action>
    </release>

    <release version="1.3-rc1" date="2006-07-30">
      <action dev="oheger" type="update" issue="CONFIGURATION-217">
        The dependency to servletapi was updated from version 2.3 to version
        2.4, but version 2.3 will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-104">
        A new class PropertiesConfigurationLayout was introduced whose task is
        to preserve the structure (e.g. comments, blank lines) of a file
        loaded by PropertiesConfiguration. Each PropertiesConfiguration
        object is now associated with such a layout object. A saved properties
        file will look very similar to its original.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-145">
        clone() methods have been added to BaseConfiguration, AbstractFileConfiguration,
        MapConfiguration, CompositeConfiguration, and CombinedConfiguration.
        So the most important Configuration implementations now support
        cloning. To ConfigurationUtils an utility method cloneConfiguration()
        was added that allows to conveniently clone a configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216">
        If a configuration file was to be loaded from classpath, the
        constructor of AbstractFileConfiguration dropped the file's path. The
        path is now taken into account.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-214">
        The getter methods for numeric data types in AbstractConfiguration now
        support conversions between different Number types, e.g. you can now
        call getLong(key) when key points to an Integer value.
      </action>
      <action dev="oheger" type="add">
        The new class DefaultConfigurationBuilder was added as an alternative to
        ConfigurationFactory. It provides some more features and creates a
        CombinedConfiguration object
      </action>
      <action dev="oheger" type="add">
        The new class CombinedConfiguration was added as a hierarchical
        alternative to CompositeConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-143">
        Support for low-level configuration events was added to all classes
        derived from AbstractConfiguration. The major part of this is handled
        by the new super class EventSource of AbstractConfiguration.
      </action>
      <action dev="oheger" type="add">
        A new method convertToHierarchical() was added to ConfigurationUtils,
        which is able to convert an arbitrary configuration object into a
        hierarchical configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-63">
        Loading of file-based configurations no longer throws a NullPointerException
        in setups where the thread context class loader is not set.
      </action>
      <action dev="oheger" type="update">
        The dependency to dom4j was removed; it was only used by two test classes,
        which have been re-written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-100">
        XMLConfiguration used to drop the DOCTYPE declaration when saving the
        configuration. It is now able to extract the DTD's public and system ID
        and write them back (more complex DOCTYPE declarations are still not supported).
        With the new methods setSystemID() and setPublicID(), the DOCTYPE
        declaration can be configured.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-178">
        Added two new constructors in CompositeConfiguration accepting a
        collection of configurations as a parameter.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-186">
        (Basic) Support for declaring beans in configuration files was added.
        Some new classes in the beanutils package allow to create instances from
        these declarations.
      </action>
      <action dev="oheger" type="update">
        The implementation of the interpolation features have been extracted out
        off AbstractConfiguration and moved to PropertyConverter. The
        interpolateHelper() method of AbstractConfiguration is now deprectated
        and will not be called any more during interpolation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-182">
        A new method configurationsAt() was added to HierarchicalConfiguration
        that provides a convenient way of iterating over complex list-like
        structures without the need of manually constructing configuration keys
        with indices.
      </action>
      <action dev="oheger" type="add">
        A new class SubnodeConfiguration was introduced that wraps a configuration
        node of a HierarchicalConfiguration. All operations performed on this
        configuration use this wrapped node as root. The new configurationAt()
        method of HierarchicalConfiguration returns such a SubnodeConfiguration
        for a specified sub node.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-173">
        With XPathExpressionEngine an expression engine for hierarchical
        configurations is now available that can evaluate XPATH expressions in
        property keys. This expression engine implementation is based on
        Commons JXPath, which is now declared as a new dependency (but at
        runtime it is only needed if the XPathExpressionEngine class is used).
      </action>
      <action dev="oheger" type="add">
        The code for interpreting property keys was refactored out off
        HierarchicalConfiguration. Instead this class now supports pluggable
        expression engines (using the setExpressionEngine() method). So it is
        possible to plug in different expression languages. A default expression
        engine is provided that understands the native expression language used
        by hierarchical configurations in older versions. During the process of
        this refactoring some methods of HierarchicalConfiguration have been
        deprecated; they will not be called any more when searching or adding
        properties. These are the following: createAddPath(), fetchAddNode(),
        findLastPathNode(), findPropertyNodes().
      </action>
      <action dev="oheger" type="update">
        A larger refactoring was performed on the inner Node class of
        HierarchicalConfiguration: A ConfigurationNode interface was extracted
        for which a default implementation (DefaultConfigurationNode) is
        provided. HierarchicalConfiguration.Node now extends this default
        implementation. The new ConfigurationNode interface defines some more
        methods than the Node class did originally for conveniently dealing with
        sub nodes and attributes. HierarchicalConfiguration now uses the new
        type ConfigurationNode whereever possible. Some methods dealing with
        Node objects have been deprecated and replaced by versions operating on
        ConfigurationNode objects instead.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-155" due-to="Jorge Ferrer">
        All configuration classes derived from AbstractConfiguration now allow
        to set an instance specific list delimiter. This can be done through
        the new method setListDelimiter(). As before it is possible to define
        a default list delimiter, which will be used if no instance specific
        delimiter is set. This can be done using the new setDefaultListDelimiter()
        method (the methods get/setDelimiter() have been deprecated). With the
        new setDelimiterParsingDisabled() method parsing of lists can be
        disabled at all.
      </action>
    </release>

    <release version="1.2" date="2005-12-17">
    </release>

    <release version="1.2-rc3" date="2005-12-07">
      <action dev="oheger" type="update">
        Commons Configuration now declares a dependency to Xalan. As with
        Xerces this dependency is only needed for JDK 1.3. It was introduced
        in a process of making Configuration buildable on a JDK 1.3. Documentation
        about the build process was also added.
      </action>
      <action dev="oheger" type="update">
        The dependency to Commons Beanutils Collections was unnecessary and
        thus removed.
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Digester 1.6 instead of 1.5.
        (This was done only to pick up the latest available release of digester.)
      </action>
    </release>

    <release version="1.2-rc2" date="2005-11-23">
      <action dev="oheger" type="update" issue="CONFIGURATION-2">
        ConfigurationDynaBean now implements the java.util.Map interface (as
        was stated in the javadocs). This was done by deriving the class from
        ConfigurationMap.
      </action>
    </release>

    <release version="1.2-rc1" date="2005-11-11">
      <action dev="oheger" type="update" issue="CONFIGURATION-33">
        The reload() method in AbstractFileConfiguration was updated to prevent
        reentrant invocation, which may be caused by some methods when they
        are called during a reloading operation.
      </action>
      <action dev="ebourg, oheger" type="update">
        AbstractHierarchicalFileConfiguration, a new base class for file based
        hierarchical configurations, was introduced. XMLConfiguration now
        extends this class.
      </action>
      <action dev="oheger" type="update" due-to="Kay Doebl" issue="CONFIGURATION-41">
        XMLConfiguration now prints the used encoding in the xml declaration of
        generated files. In earlier versions always the default encoding was
        written. PropertiesConfiguration now always uses the platform specific
        line separator when saving files.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-8">
        PropertiesConfiguration now translates properly the escaped unicode
        characters (like \u1234) used in the property keys. This complies with
        the specification of java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        ConfigurationConverter.getProperties() now uses the delimiter of the
        specified configuration to convert the list properties into strings.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        The interpolation of variables (${foo}) is now performed in all property
        getters of AbstractConfiguration and DataConfiguration. As a side effect
        the Properties object returned by ConfigurationConverter.getProperties()
        contains only interpolated values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-35">
        PropertiesConfiguration now uses the ISO-8859-1 encoding by default
        instead of the system encoding to comply with the specification of
        java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-44">
        JNDIConfiguration no longer logs an error when attempting to get
        a property that doesn't exist in the configuration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-99">
        Attempting to load a configuration from a directory instead of a file
        will now throw a ConfigurationException.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-28">
        If a multi-valued property was involved in an interpolation operation,
        AbstractConfiguration created a string representation of the list of all
        values. This was changed to only use the first value, which makes more
        sense in this context and is consistent with other getters for single
        valued properties.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-83">
        If an include file with a relative path cannot be found in the base
        path, PropertiesConfiguration now also tries to resolve it based on its
        own location.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-117" due-to="Steve Bate">
        Fixed MapConfiguration to store the list of values added under a same
        key instead of the last value added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-80">
        Fixed a bug in the handling of relative file names in ConfigurationFactory:
        In most cases relative file names were not resolved relative to the
        location of the configuration definition file as stated in the documentation.
        This behavior was now changed to always be in sync with the documentation.
        This may have an impact on existing code which uses workarounds for
        the erroneous resolving mechanism.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-6">
        Empty elements or elements whose content consists only of comments or
        whitespace are now taken into account by XMLConfiguration. They are
        added to the configuration; their value is an empty string.
      </action>
      <action dev="oheger" type="add">
        XMLConfiguration now sets a valid system id in the InputSource used for
        loading files. This enables XML parsers to correctly resolve relative
        files, e.g. DTDs.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-74">
        getKeys() in HierarchicalConfiguration now returns the keys in the same order the properties were inserted.
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Collections 3.1 instead of 3.0
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-195">
        New configurations implementing the "property list" format used in
        NeXT/OpenStep and its XML variant used in Mac OS X.
        (PropertyListConfiguration and XMLPropertyListConfiguration)
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-97">
        Resolved some issues with XMLConfiguration and properties containing
        the delimiter character. These properties are now correctly treated,
        escaping the delimiter will work, too.
      </action>
      <action dev="ebourg" type="add">
        Added support for XMLPropertiesConfiguration in ConfigurationFactory.
        A &lt;properties> element will generate a XMLPropertiesConfiguration
        if the filename ends with ".xml".
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-184">
        PropertiesConfiguration now supports escaped key/value separators in the keys
        (i.e foo\:key = bar).
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-166">
        PropertiesConfiguration now supports all key/value separators supported by java.util.Properties
        ('=', ':' and white space characters).
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Lang 2.1 instead of 2.0
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-207">
        Comment lines for PropertiesConfiguration can start with the '!' char (compatibility with java.util.Properties).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-84">
        Because ConfigurationUtils.copy() does not fully support hierarchical
        configurations a clone() method was added to HierarchicalConfiguration
        that can be used instead.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-206">
        XMLConfiguration now provides some support for validating XML
        documents. With the setValidating() method DTD validation can be
        enabled. It is also possible to set a custom DocumentBuilder allowing
        a caller to perform enhanced configuration of the XML loading process.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-121">
        AbstractFileConfiguration now always sets a valid base path if the
        configuration file could be located. This allows PropertiesConfiguration
        to resolve include files even when loaded from class path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-85">
        Updated XMLConfiguration to correctly deal with properties containing
        dots in their names. Such properties could not be accessed before.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-9">
        PropertiesConfiguration's handling of backslash characters at the end
        of line was incorrect when there was an even number of trailing
        backslashes. This is now fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-130">
        Fixed a problem related to file based configurations that are loaded
        from a URL which is application/x-www-form-urlencoded: the save() method
        would store such files at a wrong location.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-50">
        Updated FileChangedReloadingStrategy to use the file based configuration's
        source URL to find the file to watch. Before that it was possible that
        the strategy checked the wrong file. For configuration files loaded
        from a jar FileChangedReloadingStrategy now checks the jar file itself
        for changes. Finally a bug was fixed which caused the strategy to
        check the watched file's last change date on every invocation of its
        reloadingRequired() method ignoring its refresh delay. Thanks to Jorge
        Ferrer.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-62">
        Fixed a bug in the collaboration between XMLConfiguration and its
        reloading strategy: The configuration did not check its reloading
        strategy, so no reload was performed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-119">
        Disabled auto save mode during PropertiesConfiguration.load(). Prior
        it was possible that the properties file to be loaded was immideately
        overwritten.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-89">
        Under certain circumstances it was possible that a reloading strategy
        set for PropertiesConfiguration interferred with the save() method causing
        the configuration file to be erased. This has now been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Jamie M. Guillemette" issue="CONFIGURATION-94">
        AbstractFileConfiguration now stores the URL of the config file in the
        load() methods. This URL is reused by the save() method to ensure that
        the same file is written.
      </action>
      <action dev="ebourg" type="update" due-to="Alistair Young">
        XMLPropertiesConfiguration no longer depends on Digester to parse the
        configuration file, it's now implemented with a pure SAX parser.
      </action>
      <action dev="oheger" type="update" due-to="Mi Zhang" issue="CONFIGURATION-49">
        Fixed a bug which causes XMLConfiguration.save to lose attribute values
        under some circumstances. The clear() method now also ensures that the
        associated DOM document is always cleared.
      </action>
      <action dev="ebourg" type="update" due-to="Kunihara Tetsuya" issue="CONFIGURATION-13">
        XMLConfiguration now parse the configuration using the encoding
        declared in the XML header instead of the OS default encoding.
      </action>
      <action dev="ebourg" type="update" due-to="Zsolt Koppany">
        XMLConfiguration now uses the delimiter set by setDelimiter(char).
      </action>
    </release>

    <release version="1.1" date="2005-04-02">
      <action dev="ebourg" type="update" issue="CONFIGURATION-134">
        Fixed a ConcurrentModificationException thrown when calling clear()
        on a SubsetConfiguration applied to a BaseConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-81">
        The resolveContainerStore() method in AbstractConfiguration now works
        properly with arrays of objects and arrays of primitives. This means
        it is possible to store an array of value in the configuration and
        retrieve the first element with the getString(), getInt()... methods.
      </action>
    </release>

    <release version="1.1-rc2" date="2005-03-06">
      <action dev="oheger" type="update" issue="CONFIGURATION-118">
        Updated documentation for FileConfiguration's load() methods. Fixed a
        problem in XMLConfiguration with the output of the save() method when
        multiple files were loaded.
      </action>
      <action dev="ebourg" type="update">
        Fixed a bug in FileChangedReloadingStrategy preventing the detection
        of a file change in some cases.
      </action>
      <action dev="ebourg" type="update">
        Changed getXXXArray() and getXXXList() in DataConfiguration to return
        an empty array/list for empty values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-58">
        Fixed getLongArray(), getFloatArray() and getDoubleArray() in DataConfiguration,
        the values were cast into integers.
      </action>
    </release>

    <release version="1.1-rc1" date="2005-02-13">
      <action dev="oheger" type="add" issue="CONFIGURATION-88">
        ConfigurationFactory now always configures digester to use the context
        classloader. This avoids problems in application server environments,
        which use their own version of digester. Thanks to Mike Colbert for the
        patch!
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-148">
        Added a new configuration, XMLPropertiesConfiguration, supporting the
        new XML format for java.util.Properties introduced in Java 1.5.
        A 1.5 runtime is not required to use this class.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-190">
        Added a comment header to PropertiesConfiguration. The header is not
        parsed when the file is loaded yet.
      </action>
      <action dev="ebourg" type="add">
        Added the setEncoding(String) and the getEncoding() methods to the
        FileConfiguration interface to control the encoding of the
        configuration file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-210">
        Access to the top level element of the XML document is now provided. For
        newly created configurations this element can be changed before the
        document is written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-168">
        Merged the two XML related configuration classes into one new class
        XMLConfiguration. This new class should provide the best of its
        ancestors.
      </action>
      <action dev="ebourg" type="update">
        Replaced the PropertyTokenizer inner class in AbstractConfiguration
        with the split method in PropertyConverter. Also moved the method
        building an iterator on the elements of a composite value in
        PropertyConverter as toIterator().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-15">
        Some cleanup of the handling of the base path in file based configurations.
        The base path is now always taken into account.
      </action>
      <action dev="ebourg" type="fix">
        Calling getProperties on a JNDIConfiguration no longer throws an
        UnsupportedOperationException.
      </action>
      <action dev="ebourg" type="remove">
        Removed the getPropertyDirect method from AbstractConfiguration,
        concrete configurations now implement directly the getProperty method
        from the Configuration interface.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-187">
        Added implementation of a save() method for HierarchicalXMLConfiguration.
      </action>
      <action dev="ebourg" type="update">
        Constructing a file based configuration with a File no longer throws
        an exception when the file doesn't exist.
      </action>
      <action dev="ebourg" type="add">
        Saving a configuration now creates the path to the file if it doesn't exist.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-45">
        AbstractFileConfiguration.save(File) no longer fails silently when
        an error occurs, a ConfigurationException is thrown instead.
      </action>
      <action dev="ebourg" type="fix">
        ConfigurationUtils.locate() now checks if the URL based resources exist.
        This fixes a bug preventing configuration files from being found if
        the configuration descriptor is in a JAR file (reported by Grant Ingersoll).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-96">
        Fixed NPE that were caused in the constructors of file based
        configurations if an invalid file name was specified.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-162">
        Added support for optional configuration sources in definition files for
        ConfigurationFactory. A new optional attribute allows to specify whether a
        configuration source is mandatory or optional.
      </action>
      <action dev="ebourg" type="fix">
        JNDIConfiguration.getKeys() now returns an empty iterator instead of
        throwing a ConfigurationRuntimeException when a NamingException occurs.
        The NamingExceptions are now logged.
      </action>
      <action dev="ebourg" type="fix">
        DatabaseConfiguration.isEmpty() now returns true if an SQLException occurs.
      </action>
      <action dev="ebourg" type="add">
        Added two methods copy(Configuration, Configuration) and
        append(Configuration, Configuration) in ConfigurationUtils to copy
        properties between configurations.
      </action>
      <action dev="ebourg" type="update">
        Moved the constructors implementations from PropertiesConfiguration and
        XMLConfiguration to AbstractFileConfiguration.
      </action>
      <action dev="epugh" type="remove">
        Remove deprecated getVector() implementations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-147">
        File based configurations can now be automatically reloaded when the
        underlying file is modified.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-156">
        Added a clear() method to the Configuration interface to remove
        all properties.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-208">
        Added a SystemConfiguration wrapping the system properties.
        ConfigurationFactory recognizes the corresponding &lt;system/&gt;
        element.
      </action>
      <action dev="ebourg" type="add">
        Added a MapConfiguration to turn any Map into a Configuration. The
        getConfiguration() methods in ConfigurationConverter now use
        MapConfiguration, as a result the Configuration returned is always
        synchronized with the underlying Properties or ExtendedProperties,
        changes made to the Configuration are available in the Properties,
        and reciprocally.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-146">
        The "autoSave" feature of XMLConfiguration has been generalized
        to all file based configurations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-191">
        Numeric properties can now be specified in hexadecimal format,
        for example "number = 0xC5F0".
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-36">
        Fixed HierarchicalConfiguration.getKeys(String), it returned an empty
        iterator if the prefix string contained indices.
      </action>
      <action dev="ebourg" type="add">
        Added a DataConfiguration decorator providing getters for all useful
        types found in a configuration (URL, Locale, Date, Calendar, Color,
        lists and arrays)
      </action>
      <action dev="ebourg" type="add">
        Added 5 new configurations to be used in a web environment:
        AppletConfiguration, ServletConfiguration, ServletContextConfiguration,
        ServletRequestConfiguration, ServletFilterConfiguration.
      </action>
    </release>

    <release version="1.0" date="2004-10-11" description="First official release">
      <action dev="ebourg" type="fix" issue="CONFIGURATION-66">
        The getStringArray() method in CompositeConfiguration now interpolates
        the strings.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-23">
        SubsetConfiguration now shares the "throwExceptionOnMissing" property
        with its parent.
      </action>
      <action dev="ebourg" type="fix">
        Removed "file:" at the beginning of the base path when calling
        setFile() on a FileConfiguration. This prevented auto saving an
        XMLConfiguration loaded from a File (issue reported by Mark Roth).
      </action>
      <action dev="ebourg" type="update">
        All NamingEnumerations in JNDIConfiguraiton are now properly closed (Suggested
        by Eric Jung).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-90">
        Properties added to an XMLConfiguration are no longer duplicated in the
        resulting XML file.
      </action>
    </release>

    <release version="1.0-rc2" date="2004-09-24">
      <action dev="ebourg" type="update">
        Unified the mechanisms for loading and saving file based configurations.
        PropertiesConfiguration, XMLConfiguration and HierarchicalXMLConfiguration
        now implement the same FileConfiguration interface. BasePathLoader,
        BasePathConfiguration, ClassPropertiesConfiguration and
        BasePropertiesConfiguration have been removed.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-22">
        Replaced the calls to Boolean.booleanValue(boolean) in
        AbstractConfiguration and ConfigurationDynaBean to be Java 1.3
        compatible.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-112">
        Changing the prefix of a JNDIConfiguration will now reset the base context used.
      </action>
      <action dev="ebourg" type="add" due-to="Eric Jung">
        The context used by JNDIConfiguration can be specified in its
        constructor or through the setContext() method. The context can be
        accessed with the getContext() method which is now public.
      </action>
      <action dev="henning" type="add">
        Make the behavior on missing properties for the get methods that
        return objects configurable. A property throwExceptionOnMissing
        can be set and then the getters throw an NoSuchElementException.
        The old default behavior of returning a null value has
        been restored.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-151">
        Allow configurations extending AbstractConfiguration to change the
        delimiter used from "," to something else.
      </action>
      <action dev="epugh" type="fix">
        PropertiesConfiguration.save() method has issues with preserving the filename
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-132" due-to="Mark Woodman">
        Test cases for HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        Clarify for ConfigurationDynaBean that the get method should throw an
        illegalArgumentException if there is no property specified.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-25">
        Fixed a ClassCastException when adding a non String property to an XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-138" due-to="Oliver Heger">
        Fixed the handling of attribute properties by HierarchicalConfigurationConverter.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-125">
        Fixed a ClassCastException thrown on adding a non string property
        in a DatabaseConfiguration.
      </action>
      <action dev="henning" type="add">
        Bring back the getVector() methods in the Configuration interface.
        These methods are needed for &quot;drop-on&quot; replacement of the
        various pre-1.0 commons-configuration snapshots and are already
        deprecated. These methods will be removed for 1.1.
      </action>
    </release>

    <release version="1.0-rc1" date="2004-08-14">
      <action dev="epugh" type="add" issue="CONFIGURATION-132" due-to="Oliver Heger">
        HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-122" due-to="Ricardo Gladwell">
        project.xml contains bad dependencies.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-64" due-to="Brent Worden">
        clearXmlProperty doesn't remove list properties completely.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        new ConfigurationDynaBean.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-185" due-to="Ricardo Gladwell">
        new ConfigurationMap and ConfigurationSet.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-91" due-to="Ricardo Gladwell">
        Problem adding property XMLConfiguration.
      </action>
      <action dev="epugh" type="remove">
        ConfigurationXMLDocument removed until post 1.0.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-18">
        DatabaseConfiguration doesn't support List properties.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-137">
        Fixed a bug related to XMLConfiguration. Can't add a new property as an
        attribute in XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-116">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't
        support attribute names with a dot.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-4">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't ignore
        comments.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-32">
        Fixed a bug related to XMLConfiguration. XMLConfiguration.save() doesn't
        escape reserved characters.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-114">
        Added save methods in XMLConfiguration similar to PropertiesConfiguration
        to save the configuration to another file.
      </action>
      <action dev="ebourg" type="update">
        Removed the DOM4J implementations in favor of the DOM ones.
        DOMConfiguration has been renamed to XMLConfiguration, and
        HierarchicalDOMConfiguration to HierarchicalXMLConfiguration. The
        elements parsed by the ConfigurationFactory have been changed
        accordingly.
      </action>
      <action dev="ebourg" type="add">
        Added a save() method to PropertiesConfiguration and save(Writer out),
        save(OutputStream out), save(OutputStream out, String encoding) to
        BasePropertiesConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-98">
        List values are now properly stored as comma separated values in the
        Properties object returned by ConfigurationConverter.getProperties()
      </action>
      <action dev="ebourg" type="update">
        Introduced a ConversionException thrown when the value of a property is
        not compatible the type requested. It replaces the ClassCastException
        and the NumberFormatException thrown previously.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-174">
        Tokens like ${ref} in a PropertyConfiguration are now properly saved.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-127">
        The getList() method of a CompositeConfiguration now returns the list
        composed of the elements in the first matching configuration and the
        additional elements found in the in memory configuration.
      </action>
      <action dev="epugh" type="fix">
        SubsetConfiguration returns a List on getList(). AbstractConfiguration
        wouldn't properly deal with a List, only with a Container for getList()!
        Thanks to jschaible for the unit test.
      </action>
      <action dev="jschaible" type="add">
        Direct support of XML via DOM. New classes DOMConfiguration and HierarchicalDOMConfiguration.
      </action>
      <action dev="jschaible" type="update">
        Update build to not include test configuration files in resulting jar.
      </action>
      <action dev="ebourg" type="update">
        Refactored JNDIConfiguration to use AbstractConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-76">
        Fixed invalid subsets by refactoring out the subset logic into a SubsetConfiguration.
      </action>
      <action dev="oheger" type="fix">
        Reapply the ConfigurationXMLDocument that went missing during migration out of sandbox.
      </action>
      <action dev="epugh" type="update">
        Apply ASL 2.0 license.  Thanks to Jeff Painter for scripting the conversion!
      </action>
      <action dev="epugh" type="add">
        Changed CompositeConfiguration to extend from AbstractConfiuration. This means that the behavior of
        CompositeConfiguration is much similar to others like PropertiesConfiguration in handling of missing
        keys, interpolation, etc.. Previously CompositeConfiguration had quite a few differences.
      </action>
      <action dev="epugh" type="update">
        Removed "defaults" from BaseConfiguration. Defaults are now done via using a CompositeConfiguration, either
        directly or via a ConfigurationFactory. if you want to save changes made to a Configuration, then you use
        a CompositeConfiguration and get back the inMemoryConfiguration that has the delta of changes. Added a
        bit of documentation on this.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-154">
        Enhancement: Configuration Comparator.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-54">
        BaseConfiguration: containsKey ignores default properties.
        I have changed it so that now the defaults are paid attention to.
      </action>
      <action dev="ebourg" type="add">
        The Configuration interface now supports BigDecimal and BigInteger numbers.
      </action>
      <action dev="epugh" type="add">
        ConfigurationException is now thrown by public methods instead of Exception or
        IOException or whatnot.
      </action>
      <action dev="ebourg" type="add">
        For configuration based on properties files, allow characters like \n etc
        to be escaped and unescaped.
      </action>
      <action dev="ebourg" type="add">
        New DatabaseConfiguration that uses a database to store the properties.
        It supports 2 table structures: one table per configuration (2 colums
        key/value), one table for multiple configurations (2 columns key/value +
        1 column for the name of the configuration).
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports the hierarchicalDom4j element in configuration
        definition file
      </action>
      <action dev="ebourg" type="update">
        Change all Vector objects to List objects.
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports two types of properties files, additional and
        override.  Additional properties add each other together.  Override override each
        other.  This allows you to have a single property that is either aggregated from a
        number of sources, or have a property that is overridden according to a specific
        order of sources.
      </action>
      <action dev="oheger" type="update">
        AbstractConfiguration addProperty now delegates to an abstract addPropertyDirect
        implemented by BaseConfiguration.
      </action>
      <action dev="kshaposhnikov" type="update">
        Changed getString() method to throw a NoSuchElementException instead of "" if the
        configuration property doesn't exist.
      </action>
      <action dev="kshaposhnikov" type="add">
        Added AbstractConfiguration to make it easier to create subclasses by only
        having to implement the methods required.
      </action>
      <action dev="bdunbar" type="fix">
        ClassPropertiesConfiguration Additions:
        Use the classloader of class that is provided by the constructor.
        Add a constructor that indicates whether to use relative or absolute.
        Change getPropertyStream to utilize the relative or absolute flag.
        Add a test case that checks that absolute paths work.
      </action>
      <action dev="epugh" type="fix">
        JNDIConfiguration.getKeys() Addition:
        The JNDIConfiguration.getKeys() method was returning an unsupported
        operation error.  However, this is an important method to have
        supported.
      </action>
      <action dev="epugh" type="fix">
        CompositeConfiguration.getKeys() Fix
        The CompositeConfiguration.getKeys() method was returning an
        unordered list of configuration values.  However, many apps
        expect the order that keys are returned to be the order they
        are added into the properties file.
      </action>
    </release>
  </body>
</document>
