You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Oliver Heger (JIRA)" <ji...@apache.org> on 2013/01/01 14:44:12 UTC

[jira] [Created] (CONFIGURATION-519) Provide a builder API for creating configuration objects

Oliver Heger created CONFIGURATION-519:
------------------------------------------

             Summary: Provide a builder API for creating configuration objects
                 Key: CONFIGURATION-519
                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-519
             Project: Commons Configuration
          Issue Type: Improvement
    Affects Versions: 1.9
            Reporter: Oliver Heger
             Fix For: 2.0


Currently, concrete {{Configuration}} implementations are directly instantiated using their constructors. How this works in detail depends on a concrete class: some constructors accept initializazion parameters, in other cases only a default constructor is available, and further properties have to be set using set methods.

File-based configurations allow a client to pass in the file to be loaded in various forms (URL, File, file name, etc.). The data is then directly loaded by the constructor which is problematic for various reasons:
* The constructors execute complex operations.
* Loading of the configuration file can fail which will then throw an exception.
* The constructors invoke non-final methods for loading data. (_Note_: This is not only a theoretical problem but has indeed caused trouble in practice, e.g. when trying to set a default encoding for {{PropertiesConfiguration}}.)
* Some properties only take effect when set before loading a configuration file. So when these properties are needed, it is not possible to use a constructor which already performs the load operation. This API is confusing.

As an alternative, a builder-like API can be provided: Client code creates a builder object and sets initialization properties for the {{Configuration}} object to be constructed using a convenient (fluent) API. Then a fully initialized {{Configuration}} object can be obtained from the builder. The required steps for creating a configuration would be always the same, no matter which concrete {{Configuration}} subclass is actually created.

In addition, builders could play an important role when it comes to improving the current reloading mechanisms. For this a separate ticket will be opened.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira