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 >> > >

