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

Reply via email to