felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matthew Sykes (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-1754) Usage of BundleContext.getServiceReferences results in failure to activate components
Date Wed, 14 Oct 2009 00:17:31 GMT

    [ 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.

View raw message