[
https://issues.apache.org/jira/browse/CONFIGURATION-791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17158239#comment-17158239
]
Gary D. Gregory commented on CONFIGURATION-791:
-----------------------------------------------
[~havis]
May you please provide a PR on GitHub at
[https://github.com/apache/commons-configuration] ?
> ReloadingCombinedConfigurationBuilder not properly initialized upon
> definition changed
> --------------------------------------------------------------------------------------
>
> Key: CONFIGURATION-791
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-791
> Project: Commons Configuration
> Issue Type: Bug
> Affects Versions: 2.7
> Reporter: Tomas Havelka
> Priority: Minor
>
> I think I found an issue in {{ReloadingCombinedConfigurationBuilder}} when
> configuration definition had changed. When definition being changed, the
> builder's {{reset()}} method is called causing the builder's configuration
> parameters are resetted as well. That causes the builder cannot create the
> Configuration object, when some custom configuration has been used.
> For example this code causes the problem, because when reset occurs,
> additional providers are forgotten.
> {code:java}
> Parameters parameters = new Parameters();
> return new CustomCombinedConfigurationBuilder()
> .configure(parameters.combined()
> .setDefinitionBuilderParameters(parameters.hierarchical()
> .setFile(file)
> .setExpressionEngine(expressionEngine)
> .setListDelimiterHandler(listDelimiterHandler))
> .registerProvider("database", new DatabaseConfigurationProvider())
> .registerProvider("yaml", new YamlConfigurationProvider()));
> {code}
> Moreover, when the definition structure had changed, the new child builders
> are created, but the existing combined builder's {{ReloadingController}}
> still holds the original child builders but not the newly created. This
> causes the child configuration builders do not detect changes anymore.
> This can be simply solved by resetting the reloading controller in
> {{resetParameters()}} method to force its re-creation. Following code can fix
> that:
> {code:java}
> public class ReloadingCombinedConfigurationBuilder extends
> CombinedConfigurationBuilder implements ReloadingControllerSupport {
>
> @Override
> public synchronized void resetParameters() {
> super.resetParameters();
> this.reloadingController = null;
> }
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)