private void refreshCachedValues()

in src/main/java/org/apache/sling/capabilities/jcr/SearchSource.java [104:135]


    private void refreshCachedValues(ResourceResolver unused) {

        if(System.currentTimeMillis() < similaritySearchCacheExpires) {
            log.debug("Using cached similaritySearchActive value");
            return;
        }

        similaritySearchCacheExpires = System.currentTimeMillis() + (cacheLifetimeSeconds * 1000L);

        synchronized(this) {
            Session session = null;
            try {
                // TODO for now we need a service user as in general users do not have
                // access to /oak:index where the information that we need is found.
                // This information should be provided by Oak in a different way such as
                // JCR Repository descriptors or OSGi service properties on the Repository
                // object.
                session = repository.loginService(SUBSERVICE_NAME, null);
                final QueryManager qm = session.getWorkspace().getQueryManager();
                final QueryResult qr = qm.createQuery(similarityIndexQuery, Query.XPATH).execute();
                similaritySearchActiveResult = String.valueOf(qr.getNodes().hasNext());
            } catch(RepositoryException rex) {
                similaritySearchActiveResult = rex.toString();
            } finally {
                if(session != null) {
                    session.logout();
                }
            }
        }

        log.debug("Recomputed {}={} using query {}", SSA_PROP_NAME, similaritySearchActiveResult, similarityIndexQuery);
    }