[
https://issues.apache.org/jira/browse/FELIX-4417?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15312928#comment-15312928
]
David Jencks commented on FELIX-4417:
-------------------------------------
In r1746618 I improved the circular reference logging and fixed at least one
bug introduced in the previous change, where a bogus circular reference was
"found" when the activate method changed the service properties, resulting in a
match and getService call.
> Circular references detected but not resolved if one of the references in the
> cycle has optional cardinality
> ------------------------------------------------------------------------------------------------------------
>
> Key: FELIX-4417
> URL: https://issues.apache.org/jira/browse/FELIX-4417
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Affects Versions: scr-1.8.2
> Reporter: Victor Antonovich
> Assignee: David Jencks
> Fix For: scr-2.0.4
>
> Attachments: CircularReferenceTest-trunk.patch,
> CircularReferenceTest.zip
>
>
> Looks like current Apache Felix SCR implementation doesn't conform fully to
> Declarative Services Specification, which says
> (http://www.osgi.org/download/r4v43/osgi.cmpn-4.3.0.pdf, 112.3.7):
> "Circular references must be detected by SCR when it attempts to satisfy
> component configurations and SCR must fail to satisfy the references involved
> in the cycle and log an error message with the Log Service, if present.
> However, if one of the references in the cycle has optional cardinality SCR
> must break the cycle. The reference with the optional cardinality can be
> satisfied and bound to zero target services. Therefore the cycle is broken
> and the other references may be satisfied."
> In case of two components, A and B, where A is delayed with 1..1 static
> reference to B, and B is immediate with 0..n dynamic reference to A, Felix
> SCR should:
> 1) activate B with dynamic reference to A satisfied and bound to zero services
> 2) activate A with satisfied static reference to B
> 3) bind dynamic reference to B in component A
> But it seems current Felix SCR implementation can't handle this kind of
> circular dependency correctly and is failing with message "Circular reference
> detected".
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)