Apache Sling JCR Capabilities

Clone this repo:
  1. 190a587 Adding sonarqube badges as per SLING-9682 by Dan Klco · 4 weeks ago master
  2. c249208 Updating badges for org-apache-sling-capabilities-jcr by Radu Cotescu · 4 weeks ago
  3. 8acd13b SLING-9237 Update Pax Exam to 4.13.3 by Oliver Lietz · 6 months ago
  4. 3bae363 SLING-9236 Update to Sling Bundle Parent 38 by Oliver Lietz · 6 months ago
  5. fc7c32a SLING-9122 Update Pax Exam to 4.13.2 by Oliver Lietz · 7 months ago

Apache Sling

Build Status Test Status Coverage Sonarcloud Status JavaDoc Maven Central License

Sling Capabilities - JCR sources

This module is part of the Apache Sling project.

It provides information about the JCR repository to the Sling Capabilities module.

It is implemented separately to avoid making the core module dependent on JCR APIs.

Usage

For now, this module‘s SearchSource provides just one capability that indicates whether the Oak similarity search feature is available. Here’s typical JSON output of the CapabilitiesServlet when this source is active:

{
  "org.apache.sling.capabilities": {
    "data": {
      "org.apache.sling.jcr.search": {
        "similarity.search.active": "false"
      }
    }
  }
}

To compute this value, the SearchSource needs to make a JCR query to find out whether similarity search is available - that is the case if there is at least one Oak index configuration which has @useInSimilarity = true.

That query is configurable in the SearchSource component, with a default value that should work for common cases.

The cache lifetime of that value in the SearchSource component is also configurable, with a default of 60 seconds. The component caches the query result for that amount of time to avoid making too many queries.

To execute this query, the SearchSource uses a Service User that needs read access under /oak:index.

The following feature model excerpt can be used to set that up. It also creates a /var/capabilities/public path that every user can read. Resources with the sling/capabilities resource type can be created under that path to provide access to the capabilities. See the Capabilities module documentation for more information.

"configurations": {
    "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~cq-capabilities-jcr": {
      "user.mapping": [
        "org.apache.sling.capabilities.jcr:search=[capabilities-search]"
      ]
    },
    "org.apache.sling.capabilities.internal.CapabilitiesServlet": {
      "resourcePathPatterns" : "/var/capabilities/.*"
    }
  },
  "repoinit:TEXT|true": [
    "create service user capabilities-search",
    "",
    "set ACL for capabilities-search",
    "allow jcr:read on /oak:index",
    "end",
    "",
    "create path /var/capabilities/public(nt:unstructured)",
    "",
    "set ACL on /var/capabilities/public",
    "allow jcr:read for everyone",
    "end"
]