OK, I'll look closer then... 2012/4/25 Guillaume Nodet <[email protected]>
> At a first glance, it looks like this patch fix the problem substitution > when loading properties, but not when saving. > > On Wed, Apr 25, 2012 at 15:22, Bengt Rodehav <[email protected]> wrote: > > > After browsing through the code it seems like this is already > implemented. > > The InterpolationHelper was updated to support this in > > > > https://issues.apache.org/jira/browse/FELIX-2663 > > > > (by yourself I believe Guillaume). This should be part of version 1.1.0 > of > > Felix utils. Fileinstall uses 1.1.0 of Felix utils. It is marked as a > > private package and is therefore colocated in the fileinstall bundle. > > > > Looking at fileinstall it also seems like it is updated to pass the > bundle > > context to InterpolationHelper. All in all, it seems like this has > already > > been resolved... > > > > Now, why doesn't it work for me then? > > > > I will do a few more tests to verify that I'm not lying about this, > > > > /Bengt > > > > 2012/4/25 Bengt Rodehav <[email protected]> > > > > > Will do... > > > > > > > > > 2012/4/25 Guillaume Nodet <[email protected]> > > > > > >> Sure, and if you could provide a patch, that would be awesome of > course > > >> ;-) > > >> > > >> On Wed, Apr 25, 2012 at 14:14, Bengt Rodehav <[email protected]> > wrote: > > >> > > >> > Wouldn't that be a neat feature? Shall I create a JIRA? > > >> > > > >> > /Bengt > > >> > > > >> > 2012/4/25 Guillaume Nodet <[email protected]> > > >> > > > >> > > You're absolutely right. Custom properties are loaded by karaf > main > > >> and > > >> > > given to the system bundle when the osgi framework is created, > which > > >> are > > >> > > then made available to all bundles using > > BundleContext#getProperty(). > > >> > > The InterpolationHelper can be given a BundleContext which can be > > >> used in > > >> > > exactly the way we want. > > >> > > > > >> > > On Wed, Apr 25, 2012 at 13:47, Bengt Rodehav <[email protected]> > > >> wrote: > > >> > > > > >> > > > The way I understood it, the InterpolationHelper is not used by > > >> config > > >> > > > admin but when the configuration is loaded from file (which is > > >> > initiated > > >> > > by > > >> > > > file install). Thus, file install would have to be made aware of > > the > > >> > > > properties defined in custom.properties somehow. I have no idea > > >> where > > >> > > those > > >> > > > are evaluated though. > > >> > > > > > >> > > > /Bengt > > >> > > > > > >> > > > 2012/4/25 Guillaume Nodet <[email protected]> > > >> > > > > > >> > > > > Yes, it should be possible to do that, for to be consistent, > it > > >> would > > >> > > > have > > >> > > > > to be done by ConfigAdmin too, else it could lead to > > >> inconsistencies > > >> > > > > between what FileInstall thinks the property value is and what > > the > > >> > > bundle > > >> > > > > actually receive. So I'd be fine with any change if those are > > >> done > > >> > by > > >> > > > > ConfigAdmin, but if they are done by iPojo or blueprint (for > > >> > example), > > >> > > > i'm > > >> > > > > not so sure. > > >> > > > > > > >> > > > > On Wed, Apr 25, 2012 at 13:36, Bengt Rodehav < > [email protected] > > > > > >> > > wrote: > > >> > > > > > > >> > > > > > Hello again Guillaume, > > >> > > > > > > > >> > > > > > I found the place where the substitution is being made. It's > > in > > >> the > > >> > > > class > > >> > > > > > InterpolationHelper which resides in the same package as > Felix > > >> > > > Properties > > >> > > > > > class. > > >> > > > > > > > >> > > > > > I made a small test. It seems like variables defined as > system > > >> > > > variables > > >> > > > > > are preserved (because InterpolationHelper knows about > them). > > >> Also, > > >> > > if > > >> > > > I > > >> > > > > > refer to other configuration properties, they are preserved > as > > >> > well. > > >> > > > > > > > >> > > > > > However, the properties I define in my custom.properties > file > > >> are > > >> > not > > >> > > > > > preserved. Apparently they are not substituted by > > >> > > InterpolationHelper. > > >> > > > I > > >> > > > > > have no idea where that substitution takes place but I would > > >> like > > >> > to > > >> > > > make > > >> > > > > > fileinstall aware of it. Do you think that is possible? > > >> > > > > > > > >> > > > > > /Bengt > > >> > > > > > > > >> > > > > > 2012/4/25 Guillaume Nodet <[email protected]> > > >> > > > > > > > >> > > > > > > Yes, only properties that have change should be written > > back. > > >> > > > > > > But as you said, the check is done by substituting inside > > the > > >> > > > > properties > > >> > > > > > > file, but if the computed value is different from the > value > > >> from > > >> > > the > > >> > > > > > > configuration, the whole property will be overwritten by > the > > >> new > > >> > > > value. > > >> > > > > > Do > > >> > > > > > > you have substitution with system properties or other > bundle > > >> > > > > > configuration > > >> > > > > > > properties ? If so, those properties will be overwritten > at > > >> the > > >> > > first > > >> > > > > > > change. > > >> > > > > > > > > >> > > > > > > On Wed, Apr 25, 2012 at 12:28, Bengt Rodehav < > > >> [email protected]> > > >> > > > > wrote: > > >> > > > > > > > > >> > > > > > > > You mean that only properties that have changed should > be > > >> > written > > >> > > > > back? > > >> > > > > > > Not > > >> > > > > > > > the part where variables are preserved even in changed > > >> > properties > > >> > > > - I > > >> > > > > > > > assume. > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > At a first glance I can't figure out where the variable > > >> > > > substitution > > >> > > > > > > takes > > >> > > > > > > > place either. But for this to work, it must be done > before > > >> > > > comparing > > >> > > > > > with > > >> > > > > > > > the existing value - right? > > >> > > > > > > > > > >> > > > > > > > /Bengt > > >> > > > > > > > > > >> > > > > > > > 2012/4/25 Guillaume Nodet <[email protected]> > > >> > > > > > > > > > >> > > > > > > > > That's exactly what is supposed to happen because we > use > > >> > > > > > > > > the org.apache.felix.utils.properties.Properties which > > is > > >> > known > > >> > > > to > > >> > > > > > work > > >> > > > > > > > for > > >> > > > > > > > > that. > > >> > > > > > > > > One thing that could happen though is that the > > properties > > >> > that > > >> > > > are > > >> > > > > > > > > substituted are not know to fileinstall, so that it > > can't > > >> > > really > > >> > > > > > > compare > > >> > > > > > > > > the real values. > > >> > > > > > > > > The reason is that file install doesn't use the bundle > > >> system > > >> > > > > context > > >> > > > > > > > when > > >> > > > > > > > > computing the substitution so it only takes into > account > > >> the > > >> > > > > > > substitution > > >> > > > > > > > > within the file, not with system properties or bundle > > >> context > > >> > > > > > > properties. > > >> > > > > > > > > I'm actually not sure who does such a substitution on > > the > > >> > > client > > >> > > > > side > > >> > > > > > > as > > >> > > > > > > > I > > >> > > > > > > > > doubt ConfigAdmin does not automatically. > > >> > > > > > > > > > > >> > > > > > > > > On Wed, Apr 25, 2012 at 11:11, Bengt Rodehav < > > >> > > [email protected]> > > >> > > > > > > wrote: > > >> > > > > > > > > > > >> > > > > > > > > > One improvement I've been thinking about is to only > > >> write > > >> > > back > > >> > > > > > > > properties > > >> > > > > > > > > > that have actually changed. This would help in my > case > > >> > since > > >> > > I > > >> > > > > have > > >> > > > > > > my > > >> > > > > > > > > own > > >> > > > > > > > > > web gui that disables/enables my services. I do so > by > > >> > setting > > >> > > > an > > >> > > > > > > iPOJO > > >> > > > > > > > > > @Controller property to true/false via config > admin. I > > >> > > > therefore > > >> > > > > > > don't > > >> > > > > > > > > use > > >> > > > > > > > > > any variables for this particular property but my > > other > > >> > > > > > configuration > > >> > > > > > > > > > properties (that are not changed) are "ruined" > because > > >> of > > >> > the > > >> > > > > > > variable > > >> > > > > > > > > > expansion. > > >> > > > > > > > > > > > >> > > > > > > > > > I'm not sure if config admin provides enough > > >> information to > > >> > > > > > determine > > >> > > > > > > > > what > > >> > > > > > > > > > properties have been changed. Either way file > install > > >> could > > >> > > > > > probably > > >> > > > > > > > > > evaluate it's current value of the property (and do > > >> > variable > > >> > > > > > > expansion > > >> > > > > > > > in > > >> > > > > > > > > > the process) and compare this value with the value > > >> provided > > >> > > by > > >> > > > > > config > > >> > > > > > > > > > admin. If they are the same than no writing back of > > this > > >> > > > property > > >> > > > > > is > > >> > > > > > > > > needed > > >> > > > > > > > > > and the variable would then be preserved in the > > >> > configuration > > >> > > > > file. > > >> > > > > > > > > > > > >> > > > > > > > > > I guess it would also be possible to preserve > > variables > > >> in > > >> > > > > > properties > > >> > > > > > > > > that > > >> > > > > > > > > > have been changed as well. File install could check > if > > >> the > > >> > > > > original > > >> > > > > > > > value > > >> > > > > > > > > > contained variables. It could then try use those > > >> variables > > >> > > for > > >> > > > > the > > >> > > > > > > new > > >> > > > > > > > > > value as well. It would then have to search in the > new > > >> > value > > >> > > if > > >> > > > > the > > >> > > > > > > > value > > >> > > > > > > > > > of the property is still used and then substitute > that > > >> > value > > >> > > > for > > >> > > > > > the > > >> > > > > > > > > > property. This is not foolproof and could be > ambiguous > > >> but > > >> > I > > >> > > > > think > > >> > > > > > it > > >> > > > > > > > > could > > >> > > > > > > > > > be implemented to work in most cases. This feature > > >> should > > >> > be > > >> > > > > > > > configurable > > >> > > > > > > > > > since it is not 100% safe. > > >> > > > > > > > > > > > >> > > > > > > > > > The feature not to write back properties that have > not > > >> > > changed > > >> > > > > > could > > >> > > > > > > > also > > >> > > > > > > > > > be configurable but doesn't really have to be since > I > > >> > believe > > >> > > > it > > >> > > > > > can > > >> > > > > > > be > > >> > > > > > > > > > made foolprooof. > > >> > > > > > > > > > > > >> > > > > > > > > > /Bengt > > >> > > > > > > > > > > > >> > > > > > > > > > 2012/4/25 Bengt Rodehav <[email protected]> > > >> > > > > > > > > > > > >> > > > > > > > > > > I use file install (currently 3.1.10 but have also > > >> tried > > >> > > with > > >> > > > > > > 3.2.2) > > >> > > > > > > > in > > >> > > > > > > > > > > Karaf 2.2.5 to feed configurations (both normal > and > > >> > factory > > >> > > > > > > > > > configurations) > > >> > > > > > > > > > > into the config admin service. > > >> > > > > > > > > > > > > >> > > > > > > > > > > In my configuration files I use different > variables > > >> that > > >> > I > > >> > > > > define > > >> > > > > > > in > > >> > > > > > > > > > > Karaf's custom.properties file. I'm not sure > whether > > >> > Karaf > > >> > > > > > exposes > > >> > > > > > > > them > > >> > > > > > > > > > as > > >> > > > > > > > > > > system properties but they are nevertheless picked > > up > > >> by > > >> > > > > > > fileinstall. > > >> > > > > > > > > > > > > >> > > > > > > > > > > However, when fileinstall is configured to write > > back > > >> > > > > > configuration > > >> > > > > > > > > > > changes to the configuration file, these variables > > are > > >> > not > > >> > > > > > > preserved > > >> > > > > > > > > but > > >> > > > > > > > > > > are expanded. This makes it very hard to read and > > >> further > > >> > > > > > maintain > > >> > > > > > > > the > > >> > > > > > > > > > > configuration files. I can easily see why this is > > >> > happening > > >> > > > > since > > >> > > > > > > the > > >> > > > > > > > > > work > > >> > > > > > > > > > > is divided between file install and the > > configuration > > >> > admin > > >> > > > and > > >> > > > > > the > > >> > > > > > > > > > latter > > >> > > > > > > > > > > does not know about the variables at all. > > >> > > > > > > > > > > > > >> > > > > > > > > > > I don't have a suggestion how to solve this but > this > > >> is a > > >> > > > major > > >> > > > > > > > problem > > >> > > > > > > > > > > (for me at least) to use fileinstall and config > > admin > > >> > > > > together. I > > >> > > > > > > > guess > > >> > > > > > > > > > if > > >> > > > > > > > > > > fileinstall was just an implementation of the > config > > >> > admin > > >> > > > > > instead > > >> > > > > > > > of a > > >> > > > > > > > > > > general listener to configuration chagnes there > > would > > >> be > > >> > > > other > > >> > > > > > > > > > > possibilities. > > >> > > > > > > > > > > > > >> > > > > > > > > > > Does anyone have any suggestions how to combine > > write > > >> > back > > >> > > of > > >> > > > > > > > > > > configuration changes with preservation of > > variables? > > >> > Could > > >> > > > > > > > fileinstall > > >> > > > > > > > > > > provide such a feature? > > >> > > > > > > > > > > > > >> > > > > > > > > > > /Bengt > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > -- > > >> > > > > > > > > ------------------------ > > >> > > > > > > > > Guillaume Nodet > > >> > > > > > > > > ------------------------ > > >> > > > > > > > > Blog: http://gnodet.blogspot.com/ > > >> > > > > > > > > ------------------------ > > >> > > > > > > > > FuseSource, Integration everywhere > > >> > > > > > > > > http://fusesource.com > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > > > -- > > >> > > > > > > ------------------------ > > >> > > > > > > Guillaume Nodet > > >> > > > > > > ------------------------ > > >> > > > > > > Blog: http://gnodet.blogspot.com/ > > >> > > > > > > ------------------------ > > >> > > > > > > FuseSource, Integration everywhere > > >> > > > > > > http://fusesource.com > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > -- > > >> > > > > ------------------------ > > >> > > > > Guillaume Nodet > > >> > > > > ------------------------ > > >> > > > > Blog: http://gnodet.blogspot.com/ > > >> > > > > ------------------------ > > >> > > > > FuseSource, Integration everywhere > > >> > > > > http://fusesource.com > > >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > -- > > >> > > ------------------------ > > >> > > Guillaume Nodet > > >> > > ------------------------ > > >> > > Blog: http://gnodet.blogspot.com/ > > >> > > ------------------------ > > >> > > FuseSource, Integration everywhere > > >> > > http://fusesource.com > > >> > > > > >> > > > >> > > >> > > >> > > >> -- > > >> ------------------------ > > >> Guillaume Nodet > > >> ------------------------ > > >> Blog: http://gnodet.blogspot.com/ > > >> ------------------------ > > >> FuseSource, Integration everywhere > > >> http://fusesource.com > > >> > > > > > > > > > > > > -- > ------------------------ > Guillaume Nodet > ------------------------ > Blog: http://gnodet.blogspot.com/ > ------------------------ > FuseSource, Integration everywhere > http://fusesource.com >

