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;
     }

Reply via email to