This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12738 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit ffb1432c7cdfa52819a1ee6a03195f8cf6ff5402 Author: Julian Reschke <[email protected]> AuthorDate: Sun Apr 6 11:02:50 2025 +0100 ResourceResolver is not closed by AliasHandler --- .../impl/mapping/AliasHandler.java | 85 +++++++++++----------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java index d83c7135..f268d88a 100644 --- a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java +++ b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/AliasHandler.java @@ -281,56 +281,59 @@ class AliasHandler { * configured alias locations having the sling:alias property */ private Map<String, Map<String, Collection<String>>> loadAliases( - List<String> conflictingAliases, List<String> invalidAliases) throws LoginException { - - final ResourceResolver resolver = - factory.getServiceResourceResolver(factory.getServiceUserAuthenticationInfo("mapping")); + List<String> conflictingAliases, List<String> invalidAliases) { final Map<String, Map<String, Collection<String>>> map = new ConcurrentHashMap<>(); - final String baseQueryString = generateAliasQuery(); - Iterator<Resource> it; - try { - final String queryStringWithSort = - baseQueryString + " AND FIRST([sling:alias]) >= '%s' ORDER BY FIRST([sling:alias])"; - it = new PagedQueryIterator("alias", "sling:alias", resolver, queryStringWithSort, 2000); - } catch (QuerySyntaxException ex) { - log.debug("sort with first() not supported, falling back to base query", ex); - it = queryUnpaged(baseQueryString, resolver); - } catch (UnsupportedOperationException ex) { - log.debug("query failed as unsupported, retrying without paging/sorting", ex); - it = queryUnpaged(baseQueryString, resolver); - } + try (final ResourceResolver resolver = + factory.getServiceResourceResolver(factory.getServiceUserAuthenticationInfo("mapping"))) { + final String baseQueryString = generateAliasQuery(); + + Iterator<Resource> it; + try { + final String queryStringWithSort = + baseQueryString + " AND FIRST([sling:alias]) >= '%s' ORDER BY FIRST([sling:alias])"; + it = new PagedQueryIterator("alias", "sling:alias", resolver, queryStringWithSort, 2000); + } catch (QuerySyntaxException ex) { + log.debug("sort with first() not supported, falling back to base query", ex); + it = queryUnpaged(baseQueryString, resolver); + } catch (UnsupportedOperationException ex) { + log.debug("query failed as unsupported, retrying without paging/sorting", ex); + it = queryUnpaged(baseQueryString, resolver); + } - log.debug("alias initialization - start"); - long count = 0; - long processStart = System.nanoTime(); - while (it.hasNext()) { - count += 1; - loadAlias(it.next(), map, conflictingAliases, invalidAliases); - } - long processElapsed = System.nanoTime() - processStart; - long resourcePerSecond = (count * TimeUnit.SECONDS.toNanos(1) / (processElapsed == 0 ? 1 : processElapsed)); + log.debug("alias initialization - start"); + long count = 0; + long processStart = System.nanoTime(); + while (it.hasNext()) { + count += 1; + loadAlias(it.next(), map, conflictingAliases, invalidAliases); + } + long processElapsed = System.nanoTime() - processStart; + long resourcePerSecond = (count * TimeUnit.SECONDS.toNanos(1) / (processElapsed == 0 ? 1 : processElapsed)); - String diagnostics = ""; - if (it instanceof PagedQueryIterator) { - PagedQueryIterator pit = (PagedQueryIterator) it; + String diagnostics = ""; + if (it instanceof PagedQueryIterator) { + PagedQueryIterator pit = (PagedQueryIterator) it; - if (!pit.getWarning().isEmpty()) { - log.warn(pit.getWarning()); - } + if (!pit.getWarning().isEmpty()) { + log.warn(pit.getWarning()); + } - diagnostics = pit.getStatistics(); - } + diagnostics = pit.getStatistics(); + } - log.info( - "alias initialization - completed, processed {} resources with sling:alias properties in {}ms (~{} resource/s){}", - count, - TimeUnit.NANOSECONDS.toMillis(processElapsed), - resourcePerSecond, - diagnostics); + log.info( + "alias initialization - completed, processed {} resources with sling:alias properties in {}ms (~{} resource/s){}", + count, + TimeUnit.NANOSECONDS.toMillis(processElapsed), + resourcePerSecond, + diagnostics); - this.aliasResourcesOnStartup.set(count); + this.aliasResourcesOnStartup.set(count); + } catch (LoginException ex) { + log.error("Alias init failed", ex); + } return map; }
