Konrad Windszus created SLING-5665:
--------------------------------------

             Summary: 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: API 2.11.0, Scripting Core 2.0.36
            Reporter: Konrad Windszus


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 
should be adjusted accordingly.



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

Reply via email to