[ 
https://issues.apache.org/jira/browse/FELIX-5139?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15056178#comment-15056178
 ] 

Oliver Lietz commented on FELIX-5139:
-------------------------------------

Thanks, [~cziegeler]. Can you point me to some code or documentation which 
shows why and how _both_ are used?
Moving the annotation to the bind method makes the {{bind}} attribute obsolete 
(and {{unbind}} also if naming follows the convention of set/unset, 
bind/unbind, add/remove).

> SCR logs errors for reference but works as expected
> ---------------------------------------------------
>
>                 Key: FELIX-5139
>                 URL: https://issues.apache.org/jira/browse/FELIX-5139
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR), Maven Bundle Plugin
>    Affects Versions: scr-2.0.2, maven-bundle-plugin-3.0.1
>            Reporter: Oliver Lietz
>
> When annotating a field like below with {{bind}} and {{unbind}} I don't 
> expect SCR to act on the field directly but using named {{bind}} and 
> {{unbind}} methods instead (which is the case indeed).
> {noformat}
>     @Reference(
>         service = FooService.class,
>         cardinality = ReferenceCardinality.AT_LEAST_ONE,
>         policy = ReferencePolicy.DYNAMIC,
>         bind = "addFooService",
>         unbind = "removeFooService"
>     )
>     private final Set<FooService> fooServices = new 
> LinkedHashSet<FooService>();
>     protected synchronized void addFooService(final FooService fooService) {
>         fooServices.add(fooService);
>         // operate on fooServices
>     }
>     protected synchronized void removeFooService(final FooService fooService) 
> {
>         fooServices.remove(fooService);
>         // operate on fooServices
>     }
> {noformat}
> Nevertheless SCR logs errors at runtime when binding services:
> {noformat}
> [...] | ERROR | xFrameworkWiring | [...] | [[...]] Field fooServices in 
> component class [...] must be declared volatile to handle a dynamic reference
> [...] | ERROR | xFrameworkWiring | [...] | [[...]] Field fooServices in 
> component class [...] has unsupported type java.util.Set. It must be one of 
> java.util.Collection or java.util.List.
> [...] | ERROR | xFrameworkWiring | [...] | [[...]] Field fooServices in 
> component class [...] must not be declared as final
> {noformat}
> The reference in SCR Component descriptor contains the attribute {{field}} 
> (which is likely the cause for the errors):
> {noformat}
> <reference name="fooServices" cardinality="1..n" policy="dynamic" 
> interface="FooService" bind="addFooService" unbind="removeFooService" 
> field="fooServices"/>
> {noformat}
> If the combination of reference attributes as above is illegal, Maven Bundle 
> Plugin should log the errors at compile time instead and break the build.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to