You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Oliver Lietz (JIRA)" <ji...@apache.org> on 2016/07/09 17:01:11 UTC

[jira] [Closed] (SLING-5665) SlingScriptHelper.getServices(Class, String) should return the highest matching service ranking first

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

Oliver Lietz closed SLING-5665.
-------------------------------

> SlingScriptHelper.getServices(Class, String) should return the highest matching service ranking first
> -----------------------------------------------------------------------------------------------------
>
>                 Key: SLING-5665
>                 URL: https://issues.apache.org/jira/browse/SLING-5665
>             Project: Sling
>          Issue Type: Improvement
>    Affects Versions: Scripting Core 2.0.36, API 2.11.0
>            Reporter: Konrad Windszus
>            Assignee: Konrad Windszus
>             Fix For: Scripting Core 2.0.38, API 2.12.0
>
>         Attachments: SLING-5665-test.patch, SLING-5665-v01.patch
>
>
> Unfortunately only the method {{BundleContext.getServiceReference(Class)}} considers the service ranking. The method {{BundleContext.getServiceReferences(Class, String)}} just returns a Collection in no specific order. Since the latter is used in https://github.com/apache/sling/blob/c9e59667d8f9cd698bc33a51f3e6a22e85d4a952/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/ScriptHelper.java#L224 one cannot rely on the order of this (although some code even in Sling does that, e.g. SLING-5664).
> I think it makes sense to always consider the service ranking in the array order, as it is specified for {{BundleContext.getServiceReference}}. There it says:
> {quote}
>  If multiple such services exist, the service with the highest ranking (as specified in its Constants.SERVICE_RANKING property) is returned.
> If there is a tie in ranking, the service with the lowest service ID (as specified in its Constants.SERVICE_ID property); that is, the service that was registered first is returned. 
> {quote}
> This should be translated into,  
> {quote}
> The array is sorted by service ranking (i.e. the service with the highest ranking is returned first. If there is a tie in ranking, the service with the lowest service ID (as specified in its Constants.SERVICE_ID property); that is, the service that was registered first is returned first. 
> {quote}.
> Both the javadoc of the {{SlingScriptHelper}} as well as the implementation in {{ScriptHelper}} should be adjusted accordingly.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)