[ 
https://issues.apache.org/jira/browse/CONFIGURATION-646?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oliver Heger resolved CONFIGURATION-646.
----------------------------------------
       Resolution: Fixed
    Fix Version/s: 2.2

Your analysis was correct: the event listener for the auto-save mechanism was 
triggered before the layout object, so data was saved that had not yet been 
updated.

The layout is normally registered as first event listener at the configuration; 
this is done when the configuration is created. However, on a load operation 
the layout used to unregister itself temporarily; this moved the listener 
registration at the end of the list.

The fix changed this behavior: The listener is not unregistered, but 
temporarily disabled during a load operation.

Fixed in SVN in revision 1775740.

> autoSave and manual save behave differently
> -------------------------------------------
>
>                 Key: CONFIGURATION-646
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-646
>             Project: Commons Configuration
>          Issue Type: Bug
>    Affects Versions: 2.1
>            Reporter: Christian Rudolph
>            Priority: Minor
>             Fix For: 2.2
>
>
> Using {{builder.autoSave(true)}} behaves differently than {{builder.save()}} 
> to the aspect that {{builder.autoSave(true)}} doesn't write newly added 
> properties to the assigned config file.
> I've set up a minimal example using only two dependencies:
> commons-beanutils:commons-beanutils:1.9.3 (runtime)
> org.apache.commons:commons-configuration2:2.1.0 (compiletime)
> {code}
> public class Main {
>     public static void main(String... args) {
>         Parameters params = new Parameters();
>         File propertiesFile = new File("conf.properties");
>         FileBasedConfigurationBuilder<PropertiesConfiguration> builder =
>                 new 
> FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
>                         
> .configure(params.fileBased().setFile(propertiesFile));
>         builder.setAutoSave(true);
>         try {
>             PropertiesConfiguration config = builder.getConfiguration();
>             config.setProperty("foo", "bar");
>             // builder.save();
>         } catch (ConfigurationException e) {
>             e.printStackTrace();
>         }
>     }
> }
> {code}
> This is mainly like the example from the documentation for filebased 
> configurations.
> {{conf.properties}} exists and is empty. With the {{builder.save}} line 
> commented out, the file remains empty. Uncommenting this line results in the 
> expected behavior.
> I debugged a bit an saw that the property isn't added to the 
> {{PropertiesConfigurationLayout}} in the first case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to