Uploaded image for project: 'Sling'
  1. Sling
  2. SLING-5665

SlingScriptHelper.getServices(Class, String) should return the highest matching service ranking first

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: Scripting Core 2.0.36, API 2.11.0
    • Component/s: None
    • Labels:
      None

      Description

      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:

      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.

      This should be translated into,

      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.

      .

      Both the javadoc of the SlingScriptHelper as well as the implementation in ScriptHelper should be adjusted accordingly.

        Attachments

        1. SLING-5665-v01.patch
          2 kB
          Konrad Windszus
        2. SLING-5665-test.patch
          4 kB
          Bertrand Delacretaz

          Issue Links

            Activity

              People

              • Assignee:
                kwin Konrad Windszus
                Reporter:
                kwin Konrad Windszus
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: