Thanks Clement,

/Bengt

2011/11/11 Clement Escoffier <[email protected]>

>
> On 11.11.2011, at 09:23, Bengt Rodehav wrote:
>
> > Clement,
> >
> > I use an @Updated callback today. In the callback I check if certain
> > important properties have changed and if so, I trigger a
> re-initialization.
> > Would this work if I make both m @Validate callback and my @Updated
> > callback synchronized? Or do I have to introduce setter methods as well
> on
> > those properties and make them synchronized?
>
> Yes it will work. Then you're sure that callback won't be executed at the
> same time.
>
> Regards,
>
> Clement
>
> >
> > /Bengt
> >
> > 2011/11/10 Clement Escoffier <[email protected]>
> >
> >> Hi,
> >>
> >> On 09.11.2011, at 12:08, Bengt Rodehav wrote:
> >>
> >>> Thanks for you reply Clement although I'm not sure I understand it
> >> entirely.
> >>>
> >>> I use ManagedServiceFactories as well when I want to instantiate an
> >>> arbitrary number of iPOJO instances. When I require exactly one
> instance
> >>> then I use a ManagedService.
> >>>
> >>> Although I think I understand why you recommend using a
> >>> ManagedServiceFactory  to solve the problem (I guess it forces only one
> >>> thread to call my callbacks instead of two threads), it doesn't seem
> >> like a
> >>> scenario where ManagedServiceFactories should be used. Isn't it some
> kind
> >>> of deficiency if my configuration is updated in the midst of my
> @Validate
> >>> callback? How can I ever be sure of having a consistent configuration?
> >>
> >> If you really want to be check the configuration after every
> >> reconfiguration, then you should use setter method or the updated
> callback.
> >>
> >>>
> >>> I have been thinking about adding "synchronize" to my @Validate
> callback.
> >>> Would this be a solution? Would you recommend or argue against it?
> >>
> >> It won't be enough, you should also synchronize the setter method of
> your
> >> property. In that case, you can be sure that the reconfiguration won't
> be
> >> applied during the @Validate method execution.
> >>
> >> Regards,
> >>
> >> Clement
> >>
> >>>
> >>> /Bengt
> >>>
> >>>
> >>> 2011/11/8 Clement Escoffier <[email protected]>
> >>>
> >>>> Hi,
> >>>>
> >>>> Sorry for this pretty late reply…
> >>>>
> >>>> On 28.10.2011, at 11:05, Bengt Rodehav wrote:
> >>>>
> >>>>> Hello Clement,
> >>>>>
> >>>>> I have used the @Updated annotation (haven't tried the @Property on a
> >>>> method
> >>>>> though). The problem is that the @Updated method is called while I'm
> in
> >>>> the
> >>>>> midst of executing the @Validate method (which uses the property that
> >> is
> >>>>> being changed). I guess this must be done on separate threads
> (haven't
> >>>>> checked).
> >>>>
> >>>> Yes, the @Updated method is with the config admin thread, while
> >> @Validate
> >>>> is called by the iPOJO processing thread.
> >>>>
> >>>>>
> >>>>> Having updates of the configuration taking place while executing an
> >> iPOJO
> >>>>> callback (like the @Validated method) doesn't really make sense to
> me.
> >>>> For
> >>>>> me, it means that I use the old value (8093) in my @Validate method
> >>>> instead
> >>>>> of the new value (9991). I know that OSGi is a very dynamic
> environment
> >>>> and
> >>>>> the configuration can change at any time. Therefore I do reinitialize
> >> my
> >>>>> iPOJO when certain values change. The problem is that I'm only
> informed
> >>>> once
> >>>>> about configuration changes (@Updated) and if that happens when I'm
> in
> >>>> the
> >>>>> @Validated method I miss the opportunity.
> >>>>>
> >>>>> I'm probably approaching this the wrong way but do you know what best
> >>>>> practice is for the following:
> >>>>>
> >>>>> - Having a configuration property with a default value
> >>>>> - Using the configuration property to initialize the iPOJO
> >>>>> - Doing the initialization when the iPOJO becomes valid and
> >>>> re-initializing
> >>>>> whenever the property changes
> >>>>> - It must be guaranteed that the re-initialization is never done
> until
> >>>> the
> >>>>> first initialization has been completed (in the @Validate method)
> and I
> >>>> must
> >>>>> not "miss" any re-initialization.
> >>>>>
> >>>>
> >>>> If you want to be sure you get only one value, you should use a
> >>>> ManagedServiceFactory instead of a ManagedService. Then you configure
> >> the
> >>>> instance with the new value (if not set will use the default value).
> By
> >>>> using a ManagedServiceFactory configuration, iPOJO will creates the
> >>>> instance (so no need of @Instance) with the right configuration.
> >>>>
> >>>> Regards,
> >>>>
> >>>> Clement
> >>>>
> >>>>
> >>>>> /Bengt
> >>>>>
> >>>>>
> >>>>> 2011/10/28 Clement Escoffier <[email protected]>
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>>
> >>>>>> On 27.10.2011, at 23:35, Bengt Rodehav wrote:
> >>>>>>
> >>>>>>> I'm using iPOJO and have problems with default property values.
> >>>> Consider
> >>>>>> the
> >>>>>>> following:
> >>>>>>>
> >>>>>>> *  @Property(name = "url", mandatory = true, value = "
> >>>>>>> http://localhost:8093/service";)*
> >>>>>>> *  private String mUrl;*
> >>>>>>>
> >>>>>>> If I use config admin (with fileinstall) to provide an override to
> >> the
> >>>>>> "url"
> >>>>>>> property (changing the port from 8093 to 9991), then the following
> >>>>>> happens:
> >>>>>>>
> >>>>>>> 1. My @Update method is called. The port is 8093.
> >>>>>>> 2. My @Validate method is called. It does some initialization that
> >> can
> >>>>>> take
> >>>>>>> a second or two. On entering the @Validate method the port is 8093.
> >>>>>>> 3. My @Update method is called again. The port is now 9991 which
> >> means
> >>>>>> that
> >>>>>>> this is the value from config admin. Note that my @Validate method
> is
> >>>> not
> >>>>>>> done at this point.
> >>>>>>> 4. My @Validate method returns. At this point the port is 9991.
> >>>> However,
> >>>>>> the
> >>>>>>> initialization code in the @Validate method used the port 8093 not
> >> 9991
> >>>>>> that
> >>>>>>> I wanted to use.
> >>>>>>>
> >>>>>>> I expected the port 9991 to be used since I had overridden the
> >> default
> >>>>>> port
> >>>>>>> (8093). I'm not sure why this is happening. How can I guarantee
> that
> >>>> the
> >>>>>>> overridden port is used instead of the default port?
> >>>>>>>
> >>>>>>> Note that since the update to port 9991 takes place while I'm in my
> >>>>>>> @Validate method I missed the update and I won't be informed about
> it
> >>>>>> again.
> >>>>>>
> >>>>>> If you want to be notified after a reconfiguration, you can use
> >>>> @Property
> >>>>>> on a method (called when the value is injected) or use the @Updated
> >>>> called
> >>>>>> when a reconfiguration occurred (and when the reconfiguration is
> >>>> completed).
> >>>>>>
> >>>>>> @Validate is called only once (or after an invalidation).
> >>>>>>
> >>>>>> Regards,
> >>>>>>
> >>>>>> Clement
> >>>>>>
> >>>>>>>
> >>>>>>> /Bengt
> >>>>>>
> >>>>>>
> >>>>>>
> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: [email protected]
> >>>>>> For additional commands, e-mail: [email protected]
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: [email protected]
> >>>> For additional commands, e-mail: [email protected]
> >>>>
> >>>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to