commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oliver Heger <oliver.he...@oliver-heger.de>
Subject Re: [configuration] Unable to persist CombinedConfiguration changes to the Filesystem.
Date Sat, 22 Oct 2011 15:13:08 GMT
Am 21.10.2011 22:49, schrieb raghunath tpk:
> Hi,
>
> I am using apache commons configuration to load the configuration data from
> various sources.
>
> Following is the issue :
>
> I use a config.xml file to load multiple Configuration Sources
> Ex:
> <configuration>
> <header/>
> <override>
> <properties fileName="db.properties"/>
> <properties fileName="jms.properties"/>
> <xml fileName="gui.xml"/>
> </override>
> <additional/>
> </configuration>
>
> I load the config.xml and subsequently all the properties in my app to a
> CombinedConfiguration Object as follows :
>
> DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
> builder.setFile(new File("config.xml"));
> CombinedConfiguration combinedConfig = builder.getConfiguration(true);
>
>
> Now I am trying to expose all the properties from all configuration sources
> using a mbean and at runtime trying to update the Properties. I wouldn't
> know though, from which source the properties came from as the
> CombinedConfiguration takes care of that abstraction, but when I do the
> following it doesn't change the persistance store(in this case the files on
> the Filesystem).
> /*combinedConfig.setProperty(Key, updatedValue);*/
>
> There is no save method on the combinedConfiguration class so that the
> persistance store gets updated.
> There is a save method in PropertiesConfiguration class or XMLConfiguration
> class, but I wouldn't know at runtime or inside the code which file or
> configuration source the Key belongs to, so even If I add a config-name to
> each source there is no use.
>
> SO wouldn't the setProperty help me update the value of the Configuration
> and persist it back to the original file. I don't know it is a bug or a
> feature it doesn't support or there is a workaround in such scenarios.
>
> Please advice.

If you pass an arbitrary key to the combined configuration in its 
setProperty() method, it cannot decide to which configuration source the 
key should be added. What exactly do you expect to happen?

I don't know whether this helps you for your current use case, but what 
you can do is copy the content of the whole CombinedConfiguration to a 
XMLConfiguration. Just use the constructor which expects a hierarchical 
configuration:

XMLConfiguration newConfig = new XMLConfiguration(combinedConfiguration);

Now you can save the XMLConfiguration, but this file will contain all of 
the data, and the single configuration sources won't be updated.

The user guide [1] also contains some information about this topic.

HTH
Oliver

[1] 
http://commons.apache.org/configuration/userguide/howto_combinedconfiguration.html#Dealing_with_changes

>
> Thanks
> Raghu
>


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message