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]

