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

David Jencks commented on FELIX-4417:
-------------------------------------

Markus: The scr spec requires that the service be registered, and then (if 
immediate) the implementation object be created.  Sorry the eclipse 
implementation isn't spec compliant.  Felix used to have this order, and that 
just means that different circular dependency cases don't work.

I haven't had time to investigate this particular case in detail to see exactly 
why it fails whereas so many others succeed.

Enrique: There is a very effective workaround that will in my experience 
improve the design of your service dependencies and certainly make it more 
reliable: don't have any circular dependencies in the service reference graph.  
If this path is not open to you, looking at the existing circular dependency 
test, it looks like making either both components immediate or both delayed 
will also work.



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

Reply via email to