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)