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

Matthew Sykes commented on FELIX-1754:
--------------------------------------

Thank your for your comments.  The behavior I'm reporting was observed when 
using the current (as of mid-afternoon today) Felix SCR and Framework.  The 
same behavior was also observed when using the Felix SCR with Equinox 3.5.

I'm not trying to suggest that the patch I sent was complete, only that the 
current behavior doesn't seem appropriate.  Making the minor change from 
getServiceReferences to getAllServiceReferences resolved my issue by removing 
the arbitrary filtering done by the framework to ensure that the using bundle 
has access to *all* classes that the target service was registered with.

If you feel that adding a check to verify assignability is appropriate during 
reference resolution, that seems reasonable and correct - provided the check is 
made using the interface declared on the reference and not for *all* class 
names that the target service was registered with.  This behavior is 
particularly important when using graphs of DS components as a component can 
only offer a single service declared with multiple object names.


> Usage of BundleContext.getServiceReferences results in failure to activate 
> components
> -------------------------------------------------------------------------------------
>
>                 Key: FELIX-1754
>                 URL: https://issues.apache.org/jira/browse/FELIX-1754
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-1.2.0
>            Reporter: Matthew Sykes
>         Attachments: felix-1754.diff
>
>
> I'm attempting to move some code from Equinox to Felix that makes use of the 
> declarative services 1.1 runtime.  Many of the components in our bundles 
> declare multiple 'provide' elements in the service declaration .  In general 
> these services consist of a standardized interface in one package and 
> extensions to that interface in another.  Depending on the requirements of 
> the code using the component, other bundles will declare their components 
> with references to either the standardized interface or the extended 
> interface.
> The issue I'm seeing is that the Felix SCR fails to activate some components 
> because it's failing to resolve references to the service provided by another 
> component.  It turns out that the SCR is using 
> BundleContext.getServiceReferences instead of 
> BundleContext.getAllServiceReferences to locate candidate services when 
> resolving references.  Unfortunately, the getServiceReference flavor requires 
> that the using bundle have access to all class names under which the target 
> service was registered - not just the interface associated with the reference.
> Given the use-case I've described and the behavior of Equinox, I believe the 
> Felix SCR should be using BundleContext.getAllServiceReferences(..) to 
> resolve references and rely on the bundle creator to define the correct 
> imports.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to