Thinking a bit more, as long as you are only using DS components then you won’t 
have a problem with recent felix DS’s as DS no longer ever sets the bundle 
location, so all bundles will have access to it.  If you also had a 
ManagedService[Factory] using the configuration then you’d need to set the 
bundle location to e.g. “?” as MS/MSF do set any missing bundle locations.  On 
the other hand I am not sure how many other configuration-consuming extenders 
deal appropriately with these multi-locations.

I think the “need to update file twice” problem was reported and fixed recently 
in config admin. I’m not sure if it’s released yet.

david jencks

> On Jan 11, 2017, at 1:31 AM, Christian Wolf <christian.wol...@gmail.com> 
> wrote:
> 
> Hi,
> 
> As Carsten suggested in a previous email, I moved to scr 2.0.6. It is
> working fine. I don't have any problem regarding being notified of
> configurationPid changes for component defined in separated bundles (and
> sharing the same pid file).
> 
> The problem I was talking about in my latest email was regarding the pid
> file first update and karaf 4.0.8 (for shared pid or pid not shared by any
> other bundle)
> 
> When restarting karaf and updating the foo.bar.cfg pid file, the @Modified
> annotated method is invoked only after the second update/save of the file.
> 
> I also noticed that if I set karaf.clean.cache = true (in
> karaf/etc/system.properties)
> the problem does not occur and the component @Modified method is invoked
> after every change of the file.
> 
> As default, this property is set as follow:
> #
> # Deletes the karaf.data/cache directory at every start
> #
> karaf.clean.cache = false
> 
> 
> As I mentioned already, this problem does not occur with karaf 4.0.5.
> 
> - Any thought about this?
> - Maybe I should now move this discussion to the karaf users mailing list?
> 
> Thanks
> Christian
> 
> 
> 
> 
> 
> 
> 
> On Tue, Jan 10, 2017 at 2:00 AM, David Jencks <david.a.jen...@gmail.com>
> wrote:
> 
>> There is no bug in DS here.  In order to use a configuration with more
>> than one bundle, you need to arrange that the configuration location be a
>> multi-location.  normally you’d want “?” so any bundle can receive the
>> configuration.  AFAIK fileinstall doesn’t support setting the location, so
>> the first bundle to start wins and no other bundle uses the configuration.
>> 
>> david jencks
>> 
>>> On Jan 9, 2017, at 8:17 AM, Christian Wolf <christian.wol...@gmail.com>
>> wrote:
>>> 
>>> Hi,
>>> 
>>> I did more tests and I noticed the following behavior with karaf 4.0.8
>> and
>>> scr 2.0.6 (which does not occur with karaf 4.0.5 and scr 2.0.2).
>>> 
>>> Having a simple pid defined as:
>>> 
>>> @ObjectClassDefinition(pid = "foo.bar")
>>> public @interface MyConfig {
>>>   String username() default "myuser";
>>>   String url() default "http://localhost:8080";;
>>> }
>>> 
>>> And a simple @Component bind to it:
>>> 
>>> @Component(configurationPid = "foo.bar")
>>> @Designate(ocd = MyConfig.class)
>>> public class CompA implements MyInterfaceA {
>>> 
>>>   @Activate
>>>   public void activate(MyConfig myConfig) {
>>> ...
>>>   }
>>> 
>>>   @Modified
>>>   public synchronized void modify(MyConfig myConfig) {
>>> ...
>>>   }
>>> }
>>> 
>>> When starting karaf 4.0.8, the @Activate method of my component in
>> invoked
>>> Then, I update the foo.bar.cfg pid file to change a property.
>>> From time to time and only for the first pid manual update:
>>> - the first update is detected by fileinstall, however, the @Modified
>>> related method of the @Component(configurationPid = "foo.bar") is not
>>> invoked.
>>> - using the config:property-list shows the right updated value.
>>> - updating and saving the file a second time triggers the @Modified
>>> annotated method of that component.
>>> 
>>> This happens only from time to time when restarting karaf.
>>> 
>>> I cannot reproduce this issue with karaf 4.0.5
>>> 
>>> Question:
>>> - Did someone already noticed this?
>>> - Is it a regression?
>>> 
>>> Thanks
>>> Kind Regards,
>>> Christian
>>> 
>>> 
>>> On Mon, Jan 9, 2017 at 1:06 PM, Christian Wolf <
>> christian.wol...@gmail.com>
>>> wrote:
>>> 
>>>> Hi Carsten,
>>>> 
>>>> Thanks for your quick answer.
>>>> 
>>>> I've just tested with latest karaf 4.0.8 which ships with scr 2.0.6
>>>> => It is working now without changing any piece of code.
>>>> It seems that a fix has been provided between 2.0.2 and 2.0.6.
>>>> 
>>>> Thanks for you advice
>>>> 
>>>> Kind Regards,
>>>> Christian
>>>> 
>>>> On Mon, Jan 9, 2017 at 10:38 AM, Carsten Ziegeler <cziege...@apache.org
>>> 
>>>> wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> I think this should be possible the way you do it, so that's a "yes" to
>>>>> the first two of your questions at the end :)
>>>>> 
>>>>> Before we start to look for a bug in the implementation, could you
>>>>> please check the scr 2.0.6 release and see whether it's already fixed
>>>>> there?
>>>>> If not, please open a jira ticket.
>>>>> 
>>>>> Regards
>>>>> Carsten
>>>>> 
>>>>> Christian Wolf wrote
>>>>>> Hi,
>>>>>> 
>>>>>> I am using DS @Component and trying to get notified through @Modified
>>>>> when
>>>>>> a shared pid file is updated (using felix scr 2.0.2 in karaf 4.0.5)
>>>>>> 
>>>>>> I defined a configuration interface such as:
>>>>>> 
>>>>>> @ObjectClassDefinition(pid = "foo.bar")
>>>>>> public @interface MyConfig {
>>>>>>   String username() default "myuser";
>>>>>>   String url() default "http://localhost:8080";;
>>>>>> }
>>>>>> 
>>>>>> Then, I have 3 differents classes with @Component annotation. All of
>>>>> them
>>>>>> are mapped to this pid "foo.bar".
>>>>>> Please note that each component is defined in separated bundles.
>>>>>> 
>>>>>> @Component(configurationPid = "foo.bar", immediate = true)
>>>>>> @Designate(ocd = MyConfig.class)
>>>>>> public class CompA implements MyInterfaceA {
>>>>>> 
>>>>>>   @Activate
>>>>>>   public void activate(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> 
>>>>>>   @Modified
>>>>>>   public synchronized void modify(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> }
>>>>>> 
>>>>>> @Component(configurationPid = "foo.bar")
>>>>>> @Designate(ocd = MyConfig.class)
>>>>>> public class CompB implements MyInterfaceB {
>>>>>> 
>>>>>>   @Activate
>>>>>>   public void activate(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> 
>>>>>>   @Modified
>>>>>>   public synchronized void modify(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> }
>>>>>> 
>>>>>> @Component(configurationPid = "foo.bar")
>>>>>> @Designate(ocd = MyConfig.class)
>>>>>> public class CompC implements MyInterfaceC {
>>>>>> 
>>>>>>   @Activate
>>>>>>   public void activate(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> 
>>>>>>   @Modified
>>>>>>   public synchronized void modify(MyConfig myConfig) {
>>>>>> ...
>>>>>>   }
>>>>>> }
>>>>>> 
>>>>>> All these 3 components are activated.
>>>>>> When the corresponding pid file foo.bar.cfg is updated, the
>>>>>> modify(MyConfig) method surrounded with the @Modified annotations is
>>>>>> invoked only for one of them.
>>>>>> Moreover, the component that get updated randomly change when
>> restarting
>>>>>> the application.
>>>>>> 
>>>>>> Question:
>>>>>> - Can @Component(s) of separate bundles be notified through @Modified
>>>>>> annotated methods when a shared pid file is updated?
>>>>>> - Is it possible to achieve this using annotation configuration
>> classes
>>>>> as
>>>>>> I did here with MyConfig class (with DS 1.3)?
>>>>>> - If not possible, is there any alternative solution to achieve this?
>>>>>> 
>>>>>> Thanks for your help.
>>>>>> Kind Regards,
>>>>>> Christian
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> Carsten Ziegeler
>>>>> Adobe Research Switzerland
>>>>> cziege...@apache.org
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
>>>>> For additional commands, e-mail: users-h...@felix.apache.org
>>>>> 
>>>>> 
>>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
>> For additional commands, e-mail: users-h...@felix.apache.org
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@felix.apache.org
For additional commands, e-mail: users-h...@felix.apache.org

Reply via email to