Patch attached. /Bengt
2012/4/25 Bengt Rodehav <[email protected]> > JIRA created: https://issues.apache.org/jira/browse/FELIX-3487 > > Patch is in the works... > > /Bengt > > 2012/4/25 Bengt Rodehav <[email protected]> > >> 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 >>> >> >> >

