Oliver Lietz created FELIX-5139:
-----------------------------------

             Summary: 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: maven-bundle-plugin-3.0.1, scr-2.0.2
            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