[ 
https://issues.apache.org/jira/browse/CONFIGURATION-677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16279161#comment-16279161
 ] 

Oliver Heger commented on CONFIGURATION-677:
--------------------------------------------

So far the setting whether a configuration source is optional has been seen as 
a property of the builder that creates the configuration and not of the 
configuration itself. It may be possible and beneficial to implement this as a 
configuration property. It would then have to be placed in one of the parameter 
objects.

I would not go so far to introduce a priority for location strategies to 
determine a default path for optional sources. This solution seems to be too 
clever and will be hard to understand. It may already be sufficient to just 
specify a default location explicitly.

> FileBasedConfigurationBuilder allowFailOnInit vs HomeDirectoryLocationStrategy
> ------------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-677
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-677
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: Documentation, File reloading
>    Affects Versions: 2.2
>         Environment: macOS Sierra 10.12.6, Java 1.8.0_152
>            Reporter: Piotr Skowronek
>             Fix For: 2.x
>
>
> It seems there's a problem with configuration creation when using 
> FileBasedConfigurationBuilder with allowFailOnInit together with 
> HomeDirectoryLocationStrategy and autoSave option.
> If the configuration is present in user.home directory (let's say 
> ~/.some.config) it is being loaded and updated properly, but if the file does 
> *not exist* then the configuration is created in current working directory 
> (where the java program was launched) and *not* in user home directory.
> Javadoc of BasicConfigurationBuilder states as follows:
> {quote}A builder instance can be constructed with an <em>allowFailOnInit</em>
>  * flag. If set to <strong>true</strong>, exceptions during initialization
>  * of the configuration are ignored; in such a case an empty configuration
>  * object is returned. A use case for this flag is a scenario in which a
>  * configuration is optional and created on demand the first time 
> configuration
>  * data is to be stored. Consider an application that stores user-specific
>  * configuration data in the user's home directory: When started for the first
>  * time by a new user there is no configuration file; so it makes sense to
>  * start with an empty configuration object. On application exit, settings
>  * can be stored in this object and written to the associated file. Then they
>  * are available on next application start.
> {quote}
> So, either it is a bug and it should be fixed in the Configuration project or 
> it is the correct behavior and it is the programmer to ensure to write the 
> configuration in the right place for the first time. If the latter then I 
> would suggest to update javadoc to state that clearly enough (and maybe 
> provide an example on the project website).
> Code sample:
> {code}
>         // file not present: ~/.some.config
>         BuilderParameters params = new 
> Parameters().properties().setFileName(".some.config")
>             .setLocationStrategy(new HomeDirectoryLocationStrategy());
>         builder = new 
> FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class,
>  params.getParameters(), true);
>         builder.setAutoSave(true);
>         config = builder.getConfiguration();
>         config.setProperty("test", "test);
>         // config file .some.config not present in ~/.some.config but present 
> in CWD
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to