Thanks a lot, That’s good to know. Dan. On 2 Nov 2013, at 16:03, Carsten Ziegeler <[email protected]> wrote:
> Hi Dan, > > yes you can use the OSGi annotations with the scr plugin, you need to add > this dependency to your project: > <groupId>org.apache.felix</groupId> > <artifactId>org.apache.felix.scr.ds-annotations</artifactId> > <version>1.2.4</version> > > Carsten > > > 2013/11/2 Daniel McGreal <[email protected]> > >> Hi Carsten, >> Thanks a lot for your reply. >> >> Are you saying that one can use the OSGi annotations with the >> Maven-SCR-Plugin? I thought I tried this initially, without success - but >> thinking about it, I may have been misled because maven complained I didn’t >> have the “AnnotationProcessor” (or similar) when I didn’t have the >> scr.annotations bundle as a dependency - maybe I just assumed that having >> included the annotations bundle, those were the annotations I should be >> using. >> >> If this is the case, no need for an feature request I think. >> >> Best, Dan. >> >> On 2 Nov 2013, at 15:12, Carsten Ziegeler <[email protected]> wrote: >> >>> Hi, >>> >>> as Robert wrote, the scr annotations from the Apache Felix project >> predate >>> the annotations from the spec. Regardless of which annotations you use, >> the >>> result is compliant to the DS specification: a descriptor XML is >> generated >>> containing the references and for each reference the methods for bind and >>> unbind are listed and these methods must exist in the contained class. >>> While the Reference annotations from the OSGi spec is more pure in the >>> sense that you annotate the bind method, the one from Apache Felix is >> more >>> convenient at least for unnary references as you just annotate the field >>> and the methods are generated for you. >>> If you want to mimic the same behaviour, you have to use a Reference >>> annotation on the class as explained by Robert as well. >>> We could add support for annotation a method like the OSGi annotations >> do, >>> you might want to create a feature request issue for this >>> >>> Regards >>> Carsten >>> >>> >>> 2013/11/2 Robert Munteanu <[email protected]> >>> >>>> On Sat, Nov 2, 2013 at 4:04 PM, Daniel McGreal <[email protected]> >> wrote: >>>>> Thanks again Robert, >>>>> >>>>>> I'm not sure about the reason behind it, but I think that the >>>>>> Felix-specific SCR annotations predate the OSGi spec for annotations. >>>>> >>>>> >>>>> That occurred to me, but the naming was so similar that I ignored it. >>>> SCR has been very inspirational then! >>>>> In that case, would it be an idea to extend the annotation’s target to >>>> methods as well as fields? >>>> >>>> Maybe. Hopefully SCR devs can chime in regarding this design decision. >>>> >>>>> >>>>>> Hm, have you tried setting the property annotation on the class, >>>>>> rather than a field? >>>>> >>>>> >>>>> In my case, the value must be computed and retrieved from an external >>>> source (the first time) but can then be cached and expected not to >> change, >>>> which is why I have a service to provide it. I wonder how I could >> achieve >>>> that with configuration? >>>> >>>> >>>> What I mean was writing something like ( not tested ) >>>> >>>> @Reference(name="myValue", interfaceReference = MyValue.class) >>>> @Component >>>> public class MyComp { >>>> >>>> protected void bindMyValue(MyValue val) { /* whatever */ } >>>> } >>>> >>>> The only advantage of declaring a Reference on a field is that you >>>> don't have to declare the name and interfaceReference properties, >>>> which are inferred from the field. For more details, see [1]. >>>> >>>> Robert >>>> >>>> [1]: >>>> >> http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#reference >>>> >>>>> >>>>> Many thanks, >>>>> Dan. >>>>> >>>>> On 2 Nov 2013, at 13:57, Robert Munteanu <[email protected]> wrote: >>>>> >>>>>> On Sat, Nov 2, 2013 at 3:50 PM, Daniel McGreal <[email protected]> >>>> wrote: >>>>>>> Hi Robert, >>>>>>> >>>>>>> Thanks for your reply. I was not actually aware the plugin generated >>>> the methods, that’s very helpful! >>>>>>> >>>>>>> I have implemented the bind method in such a manner, but am forced to >>>> have a pointless (and potentially destructively misleading) field that I >>>> can’t prevent other people from using and therefore have to document >> that >>>> it’s not to be used or put effort into writing the class to ensure it’s >>>> null and thread safe on the reference - a task that would be implicit if >>>> the field never existed. To illustrate, when all is well in my class I >> have >>>> to have a warning that the field is unused, whereas what I need is a >>>> warning if it is! >>>>>> >>>>>> Hm, have you tried setting the property annotation on the class, >>>>>> rather than a field? You might need to use a holder @Properties >>>>>> annotation if you have more than one annotation. >>>>>> >>>>>>> >>>>>>> I am curious as to the rationale of it being a field annotation >> rather >>>> than a method (or method + field), as it must have been a conscious >> choice >>>> to deviate from the way the OSGi spec does it. >>>>>> >>>>>> I'm not sure about the reason behind it, but I think that the >>>>>> Felix-specific SCR annotations predate the OSGi spec for annotations. >>>>>> >>>>>> Robert >>>>>> >>>>>>> >>>>>>> Best, Dan. >>>>>>> >>>>>>> >>>>>>> On 2 Nov 2013, at 13:43, Robert Munteanu <[email protected]> wrote: >>>>>>> >>>>>>>> Hi Dan, >>>>>>>> >>>>>>>> On Sat, Nov 2, 2013 at 3:12 PM, Daniel McGreal <[email protected]> >>>> wrote: >>>>>>>>> Hi Felix users, >>>>>>>>> I wonder if anyone knows why the Felix @Reference annotations are >>>> valid on fields, but not methods, whereas the opposite is true for the >> OSGi >>>> standard @Reference annotation. >>>>>>>>> I would very much like to have a service bound, which I don’t keep >> a >>>> reference to in the rest of my class (so that I can guarantee that code >> in >>>> the rest of the class doesn’t depend directly on the reference). For >>>> example: >>>>>>>>> >>>>>>>>> int value; >>>>>>>>> private void bindValueGetter(ValueGetter s){ >>>>>>>>> value = s.getValue(); >>>>>>>>> } >>>>>>>>> >>>>>>>>> With the annotation on the field, I am forced to have a reference >> to >>>> the ValueGetter, which might mislead programmers into using it - without >>>> the reference there I can just keep the cached values when the service >>>> arrives the first time and not have to document, etc that it might be >> null. >>>>>>>> >>>>>>>> The maven-scr-plugin ( and I think the ant task as well ) generates >> a >>>>>>>> 'bindValueGetter' method automatically if you don't have it in your >>>>>>>> class. If you implement it yourself, you can control its behaviour, >>>>>>>> just like in your snippet above. >>>>>>>> >>>>>>>> Robert >>>>>>>> >>>>>>>>> >>>>>>>>> Thanks, Dan. >>>>>>>>> >> --------------------------------------------------------------------- >>>>>>>>> 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] >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [email protected] >>>> For additional commands, e-mail: [email protected] >>>> >>>> >>> >>> >>> -- >>> Carsten Ziegeler >>> [email protected] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > -- > Carsten Ziegeler > [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]

