felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sean Bright (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FELIX-5139) SCR logs errors for reference but works as expected
Date Sat, 19 Dec 2015 23:28:46 GMT

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

Sean Bright commented on FELIX-5139:
------------------------------------

{noformat}
Field fooServices in component class [...] has unsupported type java.util.Set. It must be
one of java.util.Collection or java.util.List.
{noformat}

The compendium specification (section 112.3.3) indicates that a subtype of {{Collection}}
is allowed, so this may be a legitimate bug.

> 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)

Mime
View raw message