You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Pierre De Rop (JIRA)" <ji...@apache.org> on 2017/02/06 14:58:41 UTC

[jira] [Resolved] (FELIX-5516) Allow to not dereference services internally

     [ https://issues.apache.org/jira/browse/FELIX-5516?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Pierre De Rop resolved FELIX-5516.
----------------------------------
    Resolution: Fixed

fixed in revision 1651957

> Allow to not dereference services internally
> --------------------------------------------
>
>                 Key: FELIX-5516
>                 URL: https://issues.apache.org/jira/browse/FELIX-5516
>             Project: Felix
>          Issue Type: New Feature
>          Components: Dependency Manager, Dependency Manager Lambda
>    Affects Versions: dependencymanager-2.0.1
>            Reporter: Pierre De Rop
>            Assignee: Pierre De Rop
>            Priority: Minor
>             Fix For: org.apache.felix.dependencymanager-r9
>
>
> by default, DM always dereference Service References. But sometimes you simply don't want that. You just want to be injected with a ServiceReference, and depending on the
> service properties, then you may want to dereference yourself the service. Or if you want to use ServiceObjects API, then you want to take control and you don't want that DM
> always systematically dereference the service dependencies.
> It is possible to auto-detect if a service dependency callback only needs a ServiceReference, but internally this would require a lot of modification, especially in the sate machine.
> For now, the safest and simplest thing to do is simply to add a "dereference(boolean)" method in the ServiceDepenrency interface, which will allow the users to configure whether or not
> the service reference should or should not be automatically dereferenced by DM:
> {code}
> public interface ServiceDependency {
>     ...
>     
>     /**
>      * Configures whether or not this dependency should internally obtain the service object for all tracked service references.
>      * 
>      * By default, DM internally dereferences all discovered service references (using 
>      * <code>BundleContext.getService(ServiceReference ref)</code> methods. 
>      * However, sometimes, your callback only needs the ServiceReference, and then you don't want to dereference the service.
>      * So, in this case you can use the <code>dereference(false)</code> method in order to tell to DM 
>      * that it should never internally dereference the service dependency internally. 
>      */
>     public ServiceDependency dereference(boolean dereferenceServiceInternally);
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)