This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch 1.x
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git

commit ad347da990e0054fa80ff712f7c9cec3d806d7e0
Author: Julian Reschke <[email protected]>
AuthorDate: Tue Apr 1 15:10:40 2025 +0100

    SLING-12701: Resource Resolver: MapEntries - move alias handling into inner 
class
---
 .../resourceresolver/impl/mapping/MapEntries.java  | 806 +++++++++++----------
 .../mapping/AbstractMappingMapEntriesTest.java     |   4 +-
 .../impl/mapping/AliasMapEntriesTest.java          |  30 +-
 .../impl/mapping/EtcMappingMapEntriesTest.java     |  12 +-
 .../impl/mapping/MapEntriesTest.java               |   6 +-
 .../mapping/StringInterpolationMapEntriesTest.java |   4 +-
 .../impl/mapping/VanityPathMapEntriesTest.java     |   2 +-
 7 files changed, 462 insertions(+), 402 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
index 37029a62..9397f487 100644
--- 
a/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
+++ 
b/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
@@ -72,8 +72,6 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
 
     private static final String JCR_CONTENT = "jcr:content";
 
-    private static final String JCR_CONTENT_PREFIX = JCR_CONTENT + "/";
-
     private static final String JCR_CONTENT_SUFFIX = "/" + JCR_CONTENT;
 
     private static final String PROP_REG_EXP = "sling:match";
@@ -115,25 +113,14 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
 
     private Collection<MapEntry> mapMaps;
 
-    /**
-     * The key of the map is the parent path, while the value is a map with 
the the resource name as key and the actual aliases as values)
-     */
-    private Map<String, Map<String, Collection<String>>> aliasMapsMap;
-
-    private final AtomicLong aliasResourcesOnStartup;
-    private final AtomicLong detectedConflictingAliases;
-    private final AtomicLong detectedInvalidAliases;
-
-    // keep track of some defunct aliases for diagnostics (thus size-limited)
-    private static final int MAX_REPORT_DEFUNCT_ALIASES = 50;
-
     private final ReentrantLock initializing = new ReentrantLock();
 
     private final StringInterpolationProvider stringInterpolationProvider;
 
     private final boolean useOptimizeAliasResolution;
 
-    final VanityPathHandler vph;
+    AliasHandler ah;
+    VanityPathHandler vph;
 
     public MapEntries(
             final MapConfigurationProvider factory,
@@ -149,14 +136,11 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
 
         this.resolveMapsMap = new ConcurrentHashMap<>(Map.of(GLOBAL_LIST_KEY, 
List.of()));
         this.mapMaps = Collections.<MapEntry>emptyList();
-        this.aliasMapsMap = new ConcurrentHashMap<>();
         this.stringInterpolationProvider = stringInterpolationProvider;
 
-        this.aliasResourcesOnStartup = new AtomicLong(0);
-        this.detectedConflictingAliases = new AtomicLong(0);
-        this.detectedInvalidAliases = new AtomicLong(0);
+        this.ah = new AliasHandler(this.factory, this.initializing, 
this::doUpdateConfiguration, this::sendChangeEvent);
 
-        this.useOptimizeAliasResolution = initializeAliases();
+        this.useOptimizeAliasResolution = ah.initializeAliases();
 
         this.registration = registerResourceChangeListener(bundleContext);
 
@@ -166,10 +150,10 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
         this.metrics = metrics;
         if (metrics.isPresent()) {
             // aliases
-            
this.metrics.get().setNumberOfDetectedConflictingAliasesSupplier(detectedConflictingAliases::get);
-            
this.metrics.get().setNumberOfDetectedInvalidAliasesSupplier(detectedInvalidAliases::get);
-            
this.metrics.get().setNumberOfResourcesWithAliasedChildrenSupplier(() -> (long) 
aliasMapsMap.size());
-            
this.metrics.get().setNumberOfResourcesWithAliasesOnStartupSupplier(aliasResourcesOnStartup::get);
+            
this.metrics.get().setNumberOfDetectedConflictingAliasesSupplier(ah.detectedConflictingAliases::get);
+            
this.metrics.get().setNumberOfDetectedInvalidAliasesSupplier(ah.detectedInvalidAliases::get);
+            
this.metrics.get().setNumberOfResourcesWithAliasedChildrenSupplier(() -> (long) 
ah.aliasMapsMap.size());
+            
this.metrics.get().setNumberOfResourcesWithAliasesOnStartupSupplier(ah.aliasResourcesOnStartup::get);
 
             // vanity paths
             
this.metrics.get().setNumberOfResourcesWithVanityPathsOnStartupSupplier(vph.vanityResourcesOnStartup::get);
@@ -206,7 +190,7 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
                 boolean changed = vph.doAddVanity(resource);
                 if (this.useOptimizeAliasResolution
                         && 
resource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
-                    changed |= doAddAlias(resource);
+                    changed |= ah.doAddAlias(resource);
                 }
                 return changed;
             }
@@ -240,7 +224,7 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
                         changed |= vph.doAddVanity(contentRsrc != null ? 
contentRsrc : resource);
                     }
                     if (this.useOptimizeAliasResolution) {
-                        changed |= doUpdateAlias(resource);
+                        changed |= ah.doUpdateAlias(resource);
                     }
 
                     return changed;
@@ -265,11 +249,12 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
         }
         if (this.useOptimizeAliasResolution) {
             final String pathPrefix = path + "/";
-            for (final String contentPath : this.aliasMapsMap.keySet()) {
+            for (final String contentPath : ah.aliasMapsMap.keySet()) {
                 if (path.startsWith(contentPath + "/")
                         || path.equals(contentPath)
                         || contentPath.startsWith(pathPrefix)) {
-                    changed |= removeAlias(contentPath, path, 
resolverRefreshed);
+                    changed |= ah.removeAlias(
+                            resolver, contentPath, path, () -> 
this.refreshResolverIfNecessary(resolverRefreshed));
                 }
             }
         }
@@ -299,6 +284,11 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
      */
     public void dispose() {
 
+        if (this.ah != null) {
+            ah.dispose();
+            ah = null;
+        }
+
         if (this.registration != null) {
             this.registration.unregister();
             this.registration = null;
@@ -384,6 +374,17 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
         return this.useOptimizeAliasResolution;
     }
 
+    @Override
+    public Map<String, List<String>> getVanityPathMappings() {
+        return vph.getVanityPathMappings();
+    }
+
+    @Override
+    public @NotNull Map<String, Collection<String>> getAliasMap(final String 
parentPath) {
+        Map<String, Collection<String>> aliasMapForParent = 
ah.aliasMapsMap.get(parentPath);
+        return aliasMapForParent != null ? aliasMapForParent : 
Collections.emptyMap();
+    }
+
     /**
      * Refresh the resource resolver if not already done
      * @param resolverRefreshed Boolean flag containing the state if the 
resolver
@@ -717,6 +718,11 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
         }
     }
 
+    @Override
+    public void logDisableAliasOptimization() {
+        this.ah.logDisableAliasOptimization(null);
+    }
+
     private MapEntry getMapEntry(final String url, final int status, final 
String... redirect) {
         return getMapEntry(url, status, 0, redirect);
     }
@@ -760,438 +766,490 @@ public class MapEntries implements MapEntriesHandler, 
ResourceChangeListener, Ex
 
     // Alias handling code
 
-    /**
-     * Actual initializer. Guards itself against concurrent use by using a
-     * ReentrantLock. Does nothing if the resource resolver has already been
-     * null-ed.
-     * @return true if the optimizedAliasResolution is enabled, false otherwise
-     */
-    protected boolean initializeAliases() {
+    class AliasHandler {
 
-        this.initializing.lock();
-        try {
-            // already disposed?
-            if (this.resolver == null || this.factory == null) {
-                return false;
-            }
+        private static final String JCR_CONTENT = "jcr:content";
 
-            List<String> conflictingAliases = new ArrayList<>();
-            List<String> invalidAliases = new ArrayList<>();
+        private static final String JCR_CONTENT_PREFIX = JCR_CONTENT + "/";
 
-            boolean isOptimizeAliasResolutionEnabled = 
this.factory.isOptimizeAliasResolutionEnabled();
+        private static final String JCR_CONTENT_SUFFIX = "/" + JCR_CONTENT;
 
-            // optimization made in SLING-2521
-            if (isOptimizeAliasResolutionEnabled) {
-                try {
-                    final Map<String, Map<String, Collection<String>>> 
loadedMap =
-                            this.loadAliases(resolver, conflictingAliases, 
invalidAliases);
-                    this.aliasMapsMap = loadedMap;
+        private MapConfigurationProvider factory;
 
-                    // warn if there are more than a few defunct aliases
-                    if (conflictingAliases.size() >= 
MAX_REPORT_DEFUNCT_ALIASES) {
-                        log.warn(
-                                "There are {} conflicting aliases; excerpt: 
{}",
-                                conflictingAliases.size(),
-                                conflictingAliases);
-                    } else if (!conflictingAliases.isEmpty()) {
-                        log.warn("There are {} conflicting aliases: {}", 
conflictingAliases.size(), conflictingAliases);
-                    }
-                    if (invalidAliases.size() >= MAX_REPORT_DEFUNCT_ALIASES) {
-                        log.warn("There are {} invalid aliases; excerpt: {}", 
invalidAliases.size(), invalidAliases);
-                    } else if (!invalidAliases.isEmpty()) {
-                        log.warn("There are {} invalid aliases: {}", 
invalidAliases.size(), invalidAliases);
-                    }
-                } catch (final Exception e) {
+        private final ReentrantLock initializing;
+
+        private final Logger log = LoggerFactory.getLogger(AliasHandler.class);
 
-                    logDisableAliasOptimization(e);
+        // keep track of some defunct aliases for diagnostics (thus 
size-limited)
+        private static final int MAX_REPORT_DEFUNCT_ALIASES = 50;
 
-                    // disable optimize alias resolution
-                    isOptimizeAliasResolutionEnabled = false;
+        private Runnable doUpdateConfiguration;
+        private Runnable sendChangeEvent;
+
+        /**
+         * The key of the map is the parent path, while the value is a map 
with the the resource name as key and the actual aliases as values)
+         */
+        private Map<String, Map<String, Collection<String>>> aliasMapsMap;
+
+        final AtomicLong aliasResourcesOnStartup;
+        final AtomicLong detectedConflictingAliases;
+        final AtomicLong detectedInvalidAliases;
+
+        public AliasHandler(
+                MapConfigurationProvider factory,
+                ReentrantLock initializing,
+                Runnable doUpdateConfiguration,
+                Runnable sendChangeEvent) {
+            this.factory = factory;
+            this.initializing = initializing;
+            this.aliasMapsMap = new ConcurrentHashMap<>();
+            this.doUpdateConfiguration = doUpdateConfiguration;
+            this.sendChangeEvent = sendChangeEvent;
+
+            this.aliasResourcesOnStartup = new AtomicLong(0);
+            this.detectedConflictingAliases = new AtomicLong(0);
+            this.detectedInvalidAliases = new AtomicLong(0);
+        }
+
+        public void dispose() {
+            this.factory = null;
+        }
+
+        /**
+         * Actual initializer. Guards itself against concurrent use by using a
+         * ReentrantLock. Does nothing if the resource resolver has already 
been
+         * null-ed.
+         * @return true if the optimizedAliasResolution is enabled, false 
otherwise
+         */
+        protected boolean initializeAliases() {
+
+            this.initializing.lock();
+            try {
+                // already disposed?
+                if (this.factory == null) {
+                    return false;
                 }
-            }
 
-            doUpdateConfiguration();
+                List<String> conflictingAliases = new ArrayList<>();
+                List<String> invalidAliases = new ArrayList<>();
+
+                boolean isOptimizeAliasResolutionEnabled = 
this.factory.isOptimizeAliasResolutionEnabled();
+
+                // optimization made in SLING-2521
+                if (isOptimizeAliasResolutionEnabled) {
+                    try {
+                        final Map<String, Map<String, Collection<String>>> 
loadedMap =
+                                this.loadAliases(conflictingAliases, 
invalidAliases);
+                        this.aliasMapsMap = loadedMap;
+
+                        // warn if there are more than a few defunct aliases
+                        if (conflictingAliases.size() >= 
MAX_REPORT_DEFUNCT_ALIASES) {
+                            log.warn(
+                                    "There are {} conflicting aliases; 
excerpt: {}",
+                                    conflictingAliases.size(),
+                                    conflictingAliases);
+                        } else if (!conflictingAliases.isEmpty()) {
+                            log.warn(
+                                    "There are {} conflicting aliases: {}",
+                                    conflictingAliases.size(),
+                                    conflictingAliases);
+                        }
+                        if (invalidAliases.size() >= 
MAX_REPORT_DEFUNCT_ALIASES) {
+                            log.warn(
+                                    "There are {} invalid aliases; excerpt: 
{}", invalidAliases.size(), invalidAliases);
+                        } else if (!invalidAliases.isEmpty()) {
+                            log.warn("There are {} invalid aliases: {}", 
invalidAliases.size(), invalidAliases);
+                        }
+                    } catch (final Exception e) {
 
-            sendChangeEvent();
+                        logDisableAliasOptimization(e);
+
+                        // disable optimize alias resolution
+                        isOptimizeAliasResolutionEnabled = false;
+                    }
+                }
 
-            return isOptimizeAliasResolutionEnabled;
+                doUpdateConfiguration.run();
+                sendChangeEvent.run();
 
-        } finally {
+                return isOptimizeAliasResolutionEnabled;
 
-            this.initializing.unlock();
+            } finally {
+
+                this.initializing.unlock();
+            }
         }
-    }
 
-    private boolean doAddAlias(final Resource resource) {
-        return loadAlias(resource, this.aliasMapsMap, null, null);
-    }
+        private boolean doAddAlias(final Resource resource) {
+            return loadAlias(resource, this.aliasMapsMap, null, null);
+        }
 
-    /**
-     * Remove all aliases for the content path
-     * @param contentPath The content path
-     * @param path Optional sub path of the vanity path
-     * @return {@code true} if a change happened
-     */
-    private boolean removeAlias(final String contentPath, final String path, 
final AtomicBoolean resolverRefreshed) {
-        // if path is specified we first need to find out if it is
-        // a direct child of vanity path but not jcr:content, or a jcr:content 
child of a direct child
-        // otherwise we can discard the event
-        boolean handle = true;
-        final String resourcePath;
-        if (path != null && path.length() > contentPath.length()) {
-            final String subPath = path.substring(contentPath.length() + 1);
-            final int firstSlash = subPath.indexOf('/');
-            if (firstSlash == -1) {
-                if (subPath.equals(JCR_CONTENT)) {
-                    handle = false;
-                }
-                resourcePath = path;
-            } else if (subPath.lastIndexOf('/') == firstSlash) {
-                if (subPath.startsWith(JCR_CONTENT_PREFIX) || 
!subPath.endsWith(JCR_CONTENT_SUFFIX)) {
+        /**
+         * Remove all aliases for the content path
+         * @param contentPath The content path
+         * @param path Optional sub path of the vanity path
+         * @return {@code true} if a change happened
+         */
+        private boolean removeAlias(
+                ResourceResolver resolver, final String contentPath, final 
String path, final Runnable notifyOfChange) {
+            // if path is specified we first need to find out if it is
+            // a direct child of vanity path but not jcr:content, or a 
jcr:content child of a direct child
+            // otherwise we can discard the event
+            boolean handle = true;
+            final String resourcePath;
+            if (path != null && path.length() > contentPath.length()) {
+                final String subPath = path.substring(contentPath.length() + 
1);
+                final int firstSlash = subPath.indexOf('/');
+                if (firstSlash == -1) {
+                    if (subPath.equals(JCR_CONTENT)) {
+                        handle = false;
+                    }
+                    resourcePath = path;
+                } else if (subPath.lastIndexOf('/') == firstSlash) {
+                    if (subPath.startsWith(JCR_CONTENT_PREFIX) || 
!subPath.endsWith(JCR_CONTENT_SUFFIX)) {
+                        handle = false;
+                    }
+                    resourcePath = ResourceUtil.getParent(path);
+                } else {
                     handle = false;
+                    resourcePath = null;
                 }
-                resourcePath = ResourceUtil.getParent(path);
             } else {
-                handle = false;
-                resourcePath = null;
+                resourcePath = contentPath;
+            }
+            if (!handle) {
+                return false;
             }
-        } else {
-            resourcePath = contentPath;
-        }
-        if (!handle) {
-            return false;
-        }
-
-        this.initializing.lock();
-        try {
-            final Map<String, Collection<String>> aliasMapEntry = 
aliasMapsMap.get(contentPath);
-            if (aliasMapEntry != null) {
-                this.refreshResolverIfNecessary(resolverRefreshed);
 
-                String prefix = contentPath.endsWith("/") ? contentPath : 
contentPath + "/";
-                if (aliasMapEntry.entrySet().removeIf(e -> (prefix + 
e.getKey()).startsWith(resourcePath))
-                        && (aliasMapEntry.isEmpty())) {
-                    this.aliasMapsMap.remove(contentPath);
-                }
+            this.initializing.lock();
+            try {
+                final Map<String, Collection<String>> aliasMapEntry = 
aliasMapsMap.get(contentPath);
+                if (aliasMapEntry != null) {
+                    notifyOfChange.run();
+
+                    String prefix = contentPath.endsWith("/") ? contentPath : 
contentPath + "/";
+                    if (aliasMapEntry.entrySet().removeIf(e -> (prefix + 
e.getKey()).startsWith(resourcePath))
+                            && (aliasMapEntry.isEmpty())) {
+                        this.aliasMapsMap.remove(contentPath);
+                    }
 
-                Resource containingResource = this.resolver != null ? 
this.resolver.getResource(resourcePath) : null;
+                    Resource containingResource = resolver != null ? 
resolver.getResource(resourcePath) : null;
 
-                if (containingResource != null) {
-                    if 
(containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) 
{
-                        doAddAlias(containingResource);
-                    }
-                    final Resource child = 
containingResource.getChild(JCR_CONTENT);
-                    if (child != null && 
child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
-                        doAddAlias(child);
+                    if (containingResource != null) {
+                        if 
(containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) 
{
+                            doAddAlias(containingResource);
+                        }
+                        final Resource child = 
containingResource.getChild(JCR_CONTENT);
+                        if (child != null && 
child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
+                            doAddAlias(child);
+                        }
                     }
                 }
+                return aliasMapEntry != null;
+            } finally {
+                this.initializing.unlock();
             }
-            return aliasMapEntry != null;
-        } finally {
-            this.initializing.unlock();
         }
-    }
 
-    /**
-     * Update alias from a resource
-     * @param resource The resource
-     * @return {@code true} if any change
-     */
-    private boolean doUpdateAlias(final Resource resource) {
+        /**
+         * Update alias from a resource
+         * @param resource The resource
+         * @return {@code true} if any change
+         */
+        private boolean doUpdateAlias(final Resource resource) {
 
-        // resource containing the alias
-        final Resource containingResource = getResourceToBeAliased(resource);
+            // resource containing the alias
+            final Resource containingResource = 
getResourceToBeAliased(resource);
 
-        if (containingResource != null) {
-            final String containingResourceName = containingResource.getName();
-            final String parentPath = 
ResourceUtil.getParent(containingResource.getPath());
+            if (containingResource != null) {
+                final String containingResourceName = 
containingResource.getName();
+                final String parentPath = 
ResourceUtil.getParent(containingResource.getPath());
 
-            final Map<String, Collection<String>> aliasMapEntry =
-                    parentPath == null ? null : aliasMapsMap.get(parentPath);
-            if (aliasMapEntry != null) {
-                aliasMapEntry.remove(containingResourceName);
-                if (aliasMapEntry.isEmpty()) {
-                    this.aliasMapsMap.remove(parentPath);
+                final Map<String, Collection<String>> aliasMapEntry =
+                        parentPath == null ? null : 
aliasMapsMap.get(parentPath);
+                if (aliasMapEntry != null) {
+                    aliasMapEntry.remove(containingResourceName);
+                    if (aliasMapEntry.isEmpty()) {
+                        this.aliasMapsMap.remove(parentPath);
+                    }
                 }
-            }
 
-            boolean changed = aliasMapEntry != null;
+                boolean changed = aliasMapEntry != null;
 
-            if 
(containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) 
{
-                changed |= doAddAlias(containingResource);
-            }
-            final Resource child = containingResource.getChild(JCR_CONTENT);
-            if (child != null && 
child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
-                changed |= doAddAlias(child);
+                if 
(containingResource.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) 
{
+                    changed |= doAddAlias(containingResource);
+                }
+                final Resource child = 
containingResource.getChild(JCR_CONTENT);
+                if (child != null && 
child.getValueMap().containsKey(ResourceResolverImpl.PROP_ALIAS)) {
+                    changed |= doAddAlias(child);
+                }
+
+                return changed;
+            } else {
+                log.warn("containingResource is null for alias on {}, 
skipping.", resource.getPath());
             }
 
-            return changed;
-        } else {
-            log.warn("containingResource is null for alias on {}, skipping.", 
resource.getPath());
+            return false;
         }
 
-        return false;
-    }
+        public @NotNull Map<String, Collection<String>> getAliasMap(final 
String parentPath) {
+            Map<String, Collection<String>> aliasMapForParent = 
aliasMapsMap.get(parentPath);
+            return aliasMapForParent != null ? aliasMapForParent : 
Collections.emptyMap();
+        }
 
-    @Override
-    public @NotNull Map<String, Collection<String>> getAliasMap(final String 
parentPath) {
-        Map<String, Collection<String>> aliasMapForParent = 
aliasMapsMap.get(parentPath);
-        return aliasMapForParent != null ? aliasMapForParent : 
Collections.emptyMap();
-    }
+        /**
+         * Load aliases - Search for all nodes (except under /jcr:system) below
+         * configured alias locations having the sling:alias property
+         */
+        private Map<String, Map<String, Collection<String>>> loadAliases(
+                List<String> conflictingAliases, List<String> invalidAliases) 
throws LoginException {
 
-    @Override
-    public Map<String, List<String>> getVanityPathMappings() {
-        return vph.getVanityPathMappings();
-    }
+            final ResourceResolver resolver =
+                    
factory.getServiceResourceResolver(factory.getServiceUserAuthenticationInfo("mapping"));
 
-    /**
-     * Load aliases - Search for all nodes (except under /jcr:system) below
-     * configured alias locations having the sling:alias property
-     */
-    private Map<String, Map<String, Collection<String>>> loadAliases(
-            final ResourceResolver resolver, List<String> conflictingAliases, 
List<String> invalidAliases) {
+            final Map<String, Map<String, Collection<String>>> map = new 
ConcurrentHashMap<>();
+            final String baseQueryString = generateAliasQuery();
 
-        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("alias", baseQueryString);
+            } catch (UnsupportedOperationException ex) {
+                log.debug("query failed as unsupported, retrying without 
paging/sorting", ex);
+                it = queryUnpaged("alias", baseQueryString);
+            }
 
-        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("alias", baseQueryString);
-        } catch (UnsupportedOperationException ex) {
-            log.debug("query failed as unsupported, retrying without 
paging/sorting", ex);
-            it = queryUnpaged("alias", baseQueryString);
-        }
+            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);
 
-        return map;
-    }
+            return map;
+        }
 
-    /*
-     * generate alias query based on configured alias locations
-     */
-    private String generateAliasQuery() {
-        final Set<String> allowedLocations = 
this.factory.getAllowedAliasLocations();
+        /*
+         * generate alias query based on configured alias locations
+         */
+        private String generateAliasQuery() {
+            final Set<String> allowedLocations = 
this.factory.getAllowedAliasLocations();
 
-        StringBuilder baseQuery = new StringBuilder("SELECT [sling:alias] FROM 
[nt:base] WHERE");
+            StringBuilder baseQuery = new StringBuilder("SELECT [sling:alias] 
FROM [nt:base] WHERE");
 
-        if (allowedLocations.isEmpty()) {
-            baseQuery.append(" ").append(QueryBuildHelper.excludeSystemPath());
-        } else {
-            Iterator<String> pathIterator = allowedLocations.iterator();
-            baseQuery.append(" (");
-            String sep = "";
-            while (pathIterator.hasNext()) {
-                String prefix = pathIterator.next();
-                baseQuery
-                        .append(sep)
-                        .append("isdescendantnode('")
-                        .append(QueryBuildHelper.escapeString(prefix))
-                        .append("')");
-                sep = " OR ";
+            if (allowedLocations.isEmpty()) {
+                baseQuery.append(" 
").append(QueryBuildHelper.excludeSystemPath());
+            } else {
+                Iterator<String> pathIterator = allowedLocations.iterator();
+                baseQuery.append(" (");
+                String sep = "";
+                while (pathIterator.hasNext()) {
+                    String prefix = pathIterator.next();
+                    baseQuery
+                            .append(sep)
+                            .append("isdescendantnode('")
+                            .append(QueryBuildHelper.escapeString(prefix))
+                            .append("')");
+                    sep = " OR ";
+                }
+                baseQuery.append(")");
             }
-            baseQuery.append(")");
-        }
-
-        baseQuery.append(" AND [sling:alias] IS NOT NULL");
-        return baseQuery.toString();
-    }
 
-    /**
-     * Load alias given a resource
-     */
-    private boolean loadAlias(
-            final Resource resource,
-            Map<String, Map<String, Collection<String>>> map,
-            List<String> conflictingAliases,
-            List<String> invalidAliases) {
+            baseQuery.append(" AND [sling:alias] IS NOT NULL");
+            return baseQuery.toString();
+        }
 
-        // resource containing the alias
-        final Resource containingResource = getResourceToBeAliased(resource);
+        /**
+         * Load alias given a resource
+         */
+        private boolean loadAlias(
+                final Resource resource,
+                Map<String, Map<String, Collection<String>>> map,
+                List<String> conflictingAliases,
+                List<String> invalidAliases) {
 
-        if (containingResource == null) {
-            log.warn("containingResource is null for alias on {}, skipping.", 
resource.getPath());
-            return false;
-        } else {
-            final Resource parent = containingResource.getParent();
+            // resource containing the alias
+            final Resource containingResource = 
getResourceToBeAliased(resource);
 
-            if (parent == null) {
-                log.warn(
-                        "{} is null for alias on {}, skipping.",
-                        containingResource == resource ? "parent" : 
"grandparent",
-                        resource.getPath());
+            if (containingResource == null) {
+                log.warn("containingResource is null for alias on {}, 
skipping.", resource.getPath());
                 return false;
             } else {
-                final String[] aliasArray = 
resource.getValueMap().get(ResourceResolverImpl.PROP_ALIAS, String[].class);
-                if (aliasArray == null) {
+                final Resource parent = containingResource.getParent();
+
+                if (parent == null) {
+                    log.warn(
+                            "{} is null for alias on {}, skipping.",
+                            containingResource == resource ? "parent" : 
"grandparent",
+                            resource.getPath());
                     return false;
                 } else {
-                    return loadAliasFromArray(
-                            aliasArray,
-                            map,
-                            conflictingAliases,
-                            invalidAliases,
-                            containingResource.getName(),
-                            parent.getPath());
+                    final String[] aliasArray =
+                            
resource.getValueMap().get(ResourceResolverImpl.PROP_ALIAS, String[].class);
+                    if (aliasArray == null) {
+                        return false;
+                    } else {
+                        return loadAliasFromArray(
+                                aliasArray,
+                                map,
+                                conflictingAliases,
+                                invalidAliases,
+                                containingResource.getName(),
+                                parent.getPath());
+                    }
                 }
             }
         }
-    }
 
-    /**
-     * Load alias given a an alias array, return success flag.
-     */
-    private boolean loadAliasFromArray(
-            final String[] aliasArray,
-            Map<String, Map<String, Collection<String>>> map,
-            List<String> conflictingAliases,
-            List<String> invalidAliases,
-            final String resourceName,
-            final String parentPath) {
-
-        boolean hasAlias = false;
-
-        log.debug("Found alias, total size {}", aliasArray.length);
-
-        // the order matters here, the first alias in the array must come first
-        for (final String alias : aliasArray) {
-            if (isAliasInvalid(alias)) {
-                long invalids = detectedInvalidAliases.incrementAndGet();
-                log.warn(
-                        "Encountered invalid alias '{}' under parent path '{}' 
(total so far: {}). Refusing to use it.",
-                        alias,
-                        parentPath,
-                        invalids);
-                if (invalidAliases != null && invalids < 
MAX_REPORT_DEFUNCT_ALIASES) {
-                    invalidAliases.add((String.format("'%s'/'%s'", parentPath, 
alias)));
-                }
-            } else {
-                Map<String, Collection<String>> parentMap =
-                        map.computeIfAbsent(parentPath, key -> new 
ConcurrentHashMap<>());
-                Optional<String> siblingResourceNameWithDuplicateAlias = 
parentMap.entrySet().stream()
-                        .filter(entry -> !entry.getKey().equals(resourceName)) 
// ignore entry for the current resource
-                        .filter(entry -> entry.getValue().contains(alias))
-                        .findFirst()
-                        .map(Map.Entry::getKey);
-                if (siblingResourceNameWithDuplicateAlias.isPresent()) {
-                    long conflicting = 
detectedConflictingAliases.incrementAndGet();
+        /**
+         * Load alias given a an alias array, return success flag.
+         */
+        private boolean loadAliasFromArray(
+                final String[] aliasArray,
+                Map<String, Map<String, Collection<String>>> map,
+                List<String> conflictingAliases,
+                List<String> invalidAliases,
+                final String resourceName,
+                final String parentPath) {
+
+            boolean hasAlias = false;
+
+            log.debug("Found alias, total size {}", aliasArray.length);
+
+            // the order matters here, the first alias in the array must come 
first
+            for (final String alias : aliasArray) {
+                if (isAliasInvalid(alias)) {
+                    long invalids = detectedInvalidAliases.incrementAndGet();
                     log.warn(
-                            "Encountered duplicate alias '{}' under parent 
path '{}'. Refusing to replace current target '{}' with '{}' (total duplicated 
aliases so far: {}).",
+                            "Encountered invalid alias '{}' under parent path 
'{}' (total so far: {}). Refusing to use it.",
                             alias,
                             parentPath,
-                            siblingResourceNameWithDuplicateAlias.get(),
-                            resourceName,
-                            conflicting);
-                    if (conflictingAliases != null && conflicting < 
MAX_REPORT_DEFUNCT_ALIASES) {
-                        conflictingAliases.add((String.format(
-                                "'%s': '%s'/'%s' vs '%s'/'%s'",
-                                parentPath, resourceName, alias, 
siblingResourceNameWithDuplicateAlias.get(), alias)));
+                            invalids);
+                    if (invalidAliases != null && invalids < 
MAX_REPORT_DEFUNCT_ALIASES) {
+                        invalidAliases.add((String.format("'%s'/'%s'", 
parentPath, alias)));
                     }
                 } else {
-                    Collection<String> existingAliases =
-                            parentMap.computeIfAbsent(resourceName, name -> 
new CopyOnWriteArrayList<>());
-                    existingAliases.add(alias);
-                    hasAlias = true;
+                    Map<String, Collection<String>> parentMap =
+                            map.computeIfAbsent(parentPath, key -> new 
ConcurrentHashMap<>());
+                    Optional<String> siblingResourceNameWithDuplicateAlias = 
parentMap.entrySet().stream()
+                            .filter(entry ->
+                                    !entry.getKey().equals(resourceName)) // 
ignore entry for the current resource
+                            .filter(entry -> entry.getValue().contains(alias))
+                            .findFirst()
+                            .map(Map.Entry::getKey);
+                    if (siblingResourceNameWithDuplicateAlias.isPresent()) {
+                        long conflicting = 
detectedConflictingAliases.incrementAndGet();
+                        log.warn(
+                                "Encountered duplicate alias '{}' under parent 
path '{}'. Refusing to replace current target '{}' with '{}' (total duplicated 
aliases so far: {}).",
+                                alias,
+                                parentPath,
+                                siblingResourceNameWithDuplicateAlias.get(),
+                                resourceName,
+                                conflicting);
+                        if (conflictingAliases != null && conflicting < 
MAX_REPORT_DEFUNCT_ALIASES) {
+                            conflictingAliases.add((String.format(
+                                    "'%s': '%s'/'%s' vs '%s'/'%s'",
+                                    parentPath,
+                                    resourceName,
+                                    alias,
+                                    
siblingResourceNameWithDuplicateAlias.get(),
+                                    alias)));
+                        }
+                    } else {
+                        Collection<String> existingAliases =
+                                parentMap.computeIfAbsent(resourceName, name 
-> new CopyOnWriteArrayList<>());
+                        existingAliases.add(alias);
+                        hasAlias = true;
+                    }
                 }
             }
-        }
 
-        return hasAlias;
-    }
+            return hasAlias;
+        }
 
-    /**
-     * Given a resource, check whether the name is "jcr:content", in which 
case return the parent resource
-     * @param resource resource to check
-     * @return parent of jcr:content resource (may be null), otherwise the 
resource itself
-     */
-    @Nullable
-    private Resource getResourceToBeAliased(Resource resource) {
-        if (JCR_CONTENT.equals(resource.getName())) {
-            return resource.getParent();
-        } else {
-            return resource;
+        /**
+         * Given a resource, check whether the name is "jcr:content", in which 
case return the parent resource
+         * @param resource resource to check
+         * @return parent of jcr:content resource (may be null), otherwise the 
resource itself
+         */
+        @Nullable
+        private Resource getResourceToBeAliased(Resource resource) {
+            if (JCR_CONTENT.equals(resource.getName())) {
+                return resource.getParent();
+            } else {
+                return resource;
+            }
         }
-    }
 
-    /**
-     * Check alias syntax
-     */
-    private static boolean isAliasInvalid(String alias) {
-        boolean invalid = alias.equals("..") || alias.equals(".") || 
alias.isEmpty();
-        if (!invalid) {
-            for (final char c : alias.toCharArray()) {
-                // invalid if / or # or a ?
-                if (c == '/' || c == '#' || c == '?') {
-                    invalid = true;
-                    break;
+        /**
+         * Check alias syntax
+         */
+        private boolean isAliasInvalid(String alias) {
+            boolean invalid = alias.equals("..") || alias.equals(".") || 
alias.isEmpty();
+            if (!invalid) {
+                for (final char c : alias.toCharArray()) {
+                    // invalid if / or # or a ?
+                    if (c == '/' || c == '#' || c == '?') {
+                        invalid = true;
+                        break;
+                    }
                 }
             }
+            return invalid;
         }
-        return invalid;
-    }
 
-    private Iterator<Resource> queryUnpaged(String subject, String query) {
-        log.debug("start {} query: {}", subject, query);
-        long queryStart = System.nanoTime();
-        final Iterator<Resource> it = resolver.findResources(query, 
"JCR-SQL2");
-        long queryElapsed = System.nanoTime() - queryStart;
-        log.debug("end {} query; elapsed {}ms", subject, 
TimeUnit.NANOSECONDS.toMillis(queryElapsed));
-        return it;
-    }
+        private Iterator<Resource> queryUnpaged(String subject, String query) {
+            log.debug("start {} query: {}", subject, query);
+            long queryStart = System.nanoTime();
+            final Iterator<Resource> it = resolver.findResources(query, 
"JCR-SQL2");
+            long queryElapsed = System.nanoTime() - queryStart;
+            log.debug("end {} query; elapsed {}ms", subject, 
TimeUnit.NANOSECONDS.toMillis(queryElapsed));
+            return it;
+        }
 
-    private final AtomicLong lastTimeLogged = new AtomicLong(-1);
+        private final AtomicLong lastTimeLogged = new AtomicLong(-1);
 
-    private final long LOGGING_ERROR_PERIOD = 1000 * 60 * 5;
+        private final long LOGGING_ERROR_PERIOD = 1000 * 60 * 5;
 
-    @Override
-    public void logDisableAliasOptimization() {
-        this.logDisableAliasOptimization(null);
-    }
-
-    private void logDisableAliasOptimization(final Exception e) {
-        if (e != null) {
-            log.error(
-                    "Unexpected problem during initialization of optimize 
alias resolution. Therefore disabling optimize alias resolution. Please fix the 
problem.",
-                    e);
-        } else {
-            final long now = System.currentTimeMillis();
-            if (now - lastTimeLogged.getAndSet(now) > LOGGING_ERROR_PERIOD) {
+        private void logDisableAliasOptimization(final Exception e) {
+            if (e != null) {
                 log.error(
-                        "A problem occured during initialization of optimize 
alias resolution. Optimize alias resolution is disabled. Check the logs for the 
reported problem.",
+                        "Unexpected problem during initialization of optimize 
alias resolution. Therefore disabling optimize alias resolution. Please fix the 
problem.",
                         e);
+            } else {
+                final long now = System.currentTimeMillis();
+                if (now - lastTimeLogged.getAndSet(now) > 
LOGGING_ERROR_PERIOD) {
+                    log.error(
+                            "A problem occured during initialization of 
optimize alias resolution. Optimize alias resolution is disabled. Check the 
logs for the reported problem.",
+                            e);
+                }
             }
         }
     }
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AbstractMappingMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AbstractMappingMapEntriesTest.java
index b5cb274f..9472e0c3 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AbstractMappingMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AbstractMappingMapEntriesTest.java
@@ -123,9 +123,9 @@ public abstract class AbstractMappingMapEntriesTest {
         mapEntries = new MapEntries(
                 resourceResolverFactory, bundleContext, eventAdmin, 
stringInterpolationProvider, metrics);
 
-        final Field aliasMapField = 
MapEntries.class.getDeclaredField("aliasMapsMap");
+        final Field aliasMapField = 
MapEntries.AliasHandler.class.getDeclaredField("aliasMapsMap");
         aliasMapField.setAccessible(true);
-        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries);
+        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries.ah);
     }
 
     List<MapConfigurationProvider.VanityPathConfig> getVanityPathConfigs() {
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
index 9534d14b..d6bd49fb 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java
@@ -114,17 +114,19 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         mapEntries = new MapEntries(
                 resourceResolverFactory, bundleContext, eventAdmin, 
stringInterpolationProvider, metrics);
 
-        final Field aliasMapField = 
MapEntries.class.getDeclaredField("aliasMapsMap");
+        final Field aliasMapField = 
MapEntries.AliasHandler.class.getDeclaredField("aliasMapsMap");
         aliasMapField.setAccessible(true);
-        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries);
+        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries.ah);
 
-        final Field detectedInvalidAliasesField = 
MapEntries.class.getDeclaredField("detectedInvalidAliases");
+        final Field detectedInvalidAliasesField =
+                
MapEntries.AliasHandler.class.getDeclaredField("detectedInvalidAliases");
         detectedInvalidAliasesField.setAccessible(true);
-        this.detectedInvalidAliases = (AtomicLong) 
detectedInvalidAliasesField.get(mapEntries);
+        this.detectedInvalidAliases = (AtomicLong) 
detectedInvalidAliasesField.get(mapEntries.ah);
 
-        final Field detectedConflictingAliasesField = 
MapEntries.class.getDeclaredField("detectedConflictingAliases");
+        final Field detectedConflictingAliasesField =
+                
MapEntries.AliasHandler.class.getDeclaredField("detectedConflictingAliases");
         detectedConflictingAliasesField.setAccessible(true);
-        this.detectedConflictingAliases = (AtomicLong) 
detectedConflictingAliasesField.get(mapEntries);
+        this.detectedConflictingAliases = (AtomicLong) 
detectedConflictingAliasesField.get(mapEntries.ah);
     }
 
     @Override
@@ -165,7 +167,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
     private void internal_test_simple_alias_support(boolean onJcrContent) {
         prepareMapEntriesForAlias(onJcrContent, false, "alias");
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
         assertTrue(aliasMap.containsKey("child"));
@@ -184,7 +186,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
 
     private void internal_test_simple_multi_alias_support(boolean 
onJcrContent) {
         prepareMapEntriesForAlias(onJcrContent, false, "foo", "bar");
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
         assertTrue(aliasMap.containsKey("child"));
@@ -194,7 +196,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     @Test
     public void 
internal_test_simple_alias_support_throwing_unsupported_operation_exception_exception()
 {
         prepareMapEntriesForAlias(false, false, 
UnsupportedOperationException.class, "foo", "bar");
-        assertFalse(mapEntries.initializeAliases());
+        assertFalse(mapEntries.ah.initializeAliases());
     }
 
     @Test
@@ -211,7 +213,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     public void test_simple_multi_alias_support_with_null_parent() {
         // see SLING-12383
         prepareMapEntriesForAlias(true, true, "foo", "bar");
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
         assertFalse(aliasMap.containsKey("child"));
@@ -221,7 +223,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     public void test_simple_multi_alias_support_with_blank_and_invalid() {
         // invalid aliases filtered out
         prepareMapEntriesForAlias(false, false, "", "foo", ".", "bar", "x/y", 
"qux", " ");
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
         assertTrue(aliasMap.containsKey("child"));
@@ -234,7 +236,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         List<String> invalidAliases = List.of(".", "..", "foo/bar", "# foo", 
"");
         for (String invalidAlias : invalidAliases) {
             prepareMapEntriesForAlias(false, false, invalidAlias);
-            mapEntries.initializeAliases();
+            mapEntries.ah.initializeAliases();
             Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
             assertEquals(Collections.emptyMap(), aliasMap);
         }
@@ -307,7 +309,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
                     }
                 });
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
 
         Map<String, Collection<String>> aliasMap = 
mapEntries.getAliasMap("/parent");
         assertNotNull(aliasMap);
@@ -1168,7 +1170,7 @@ public class AliasMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     @Test
     public void test_initAliasesAfterDispose() {
         mapEntries.dispose();
-        boolean enabled = mapEntries.initializeAliases();
+        boolean enabled = mapEntries.ah.initializeAliases();
         assertFalse("return value (isOptimizeAliasResolutionEnabled) should be 
false", enabled);
     }
 }
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/EtcMappingMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/EtcMappingMapEntriesTest.java
index 225159eb..87f68cd5 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/EtcMappingMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/EtcMappingMapEntriesTest.java
@@ -67,7 +67,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     public void root_node_to_content_mapping() throws Exception {
         setupEtcMapResource("localhost.8080", http, PROP_REDIRECT_EXTERNAL, 
"/content/simple-node");
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new ExpectedEtcMapping("^http/localhost.8080/", 
"/content/simple-node/");
         expectedEtcMapping.assertEtcMap("Etc Mapping for simple node", 
mapEntries.getResolveMaps());
@@ -78,7 +78,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         setupEtcMapResource(
                 "test-node", http, PROP_REG_EXP, "localhost.8080/", 
PROP_REDIRECT_EXTERNAL, "/content/simple-match/");
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new ExpectedEtcMapping("^http/localhost.8080/", 
"/content/simple-match/");
         expectedEtcMapping.assertEtcMap("Etc Mapping for simple match", 
mapEntries.getResolveMaps());
@@ -91,7 +91,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     public void internal_to_external_node_mapping() throws Exception {
         setupEtcMapResource("example.com.80", http, PROP_REDIRECT_EXTERNAL, 
"http://www.example.com/";);
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new ExpectedEtcMapping("^http/example.com.80/", 
"http://www.example.com/";);
         expectedEtcMapping.assertEtcMap(
@@ -102,7 +102,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
     public void internal_root_to_content_node_mapping() throws Exception {
         setupEtcMapResource("www.example.com.80", http, 
PROP_REDIRECT_INTERNAL, "/example");
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new 
ExpectedEtcMapping().addEtcMapEntry("^http/www.example.com.80/", true, 
"/example/");
         expectedEtcMapping.assertEtcMap("Etc Mapping for internal root to 
content", mapEntries.getResolveMaps());
@@ -118,7 +118,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
                 PROP_REDIRECT_EXTERNAL,
                 "http://www.example.com/";);
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping = new ExpectedEtcMapping()
                 .addEtcMapEntry("^http/.+\\.example\\.com\\.80", false, 
"http://www.example.com/";);
         expectedEtcMapping.assertEtcMap("Etc Mapping for host redirect match 
mapping", mapEntries.getResolveMaps());
@@ -132,7 +132,7 @@ public class EtcMappingMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         setupEtcMapResource("gateway", localhost, PROP_REDIRECT_INTERNAL, 
"http://gbiv.com";);
         setupEtcMapResource("(stories)", localhost, PROP_REDIRECT_INTERNAL, 
"/anecdotes/$1");
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping = new ExpectedEtcMapping()
                 .addEtcMapEntry("^http/localhost\\.\\d*", true, "/content")
                 .addEtcMapEntry("^http/localhost\\.\\d*/cgi-bin/", true, 
"/scripts/")
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
index e44e93cf..4f650f45 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/MapEntriesTest.java
@@ -110,9 +110,9 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
         mapEntries = new MapEntries(
                 resourceResolverFactory, bundleContext, eventAdmin, 
stringInterpolationProvider, metrics);
 
-        final Field aliasMapField = 
MapEntries.class.getDeclaredField("aliasMapsMap");
+        final Field aliasMapField = 
MapEntries.AliasHandler.class.getDeclaredField("aliasMapsMap");
         aliasMapField.setAccessible(true);
-        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries);
+        this.aliasMap = (Map<String, Map<String, String>>) 
aliasMapField.get(mapEntries.ah);
     }
 
     @Override
@@ -215,6 +215,6 @@ public class MapEntriesTest extends 
AbstractMappingMapEntriesTest {
                     return Collections.emptyIterator();
                 });
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
     }
 }
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
index d9964e6c..633f0a21 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/StringInterpolationMapEntriesTest.java
@@ -41,7 +41,7 @@ public class StringInterpolationMapEntriesTest extends 
AbstractMappingMapEntries
                 stringInterpolationProviderConfiguration,
                 new String[] {"siv.one=test-simple-node"});
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new ExpectedEtcMapping("^http/test-simple-node/", 
"/content/simple-node/");
         expectedEtcMapping.assertEtcMap("String Interpolation for simple 
match", mapEntries.getResolveMaps());
@@ -62,7 +62,7 @@ public class StringInterpolationMapEntriesTest extends 
AbstractMappingMapEntries
                 stringInterpolationProviderConfiguration,
                 new String[] {"siv.one=test-simple-match"});
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
         ExpectedEtcMapping expectedEtcMapping =
                 new ExpectedEtcMapping("^http/test-simple-match/", 
"/content/simple-match/");
         expectedEtcMapping.assertEtcMap("String Interpolation for simple 
match", mapEntries.getResolveMaps());
diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
index 5dbfed78..fa03f4ce 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/VanityPathMapEntriesTest.java
@@ -1279,7 +1279,7 @@ public class VanityPathMapEntriesTest extends 
AbstractMappingMapEntriesTest {
         mapEntries = new MapEntries(
                 resourceResolverFactory, bundleContext, eventAdmin, 
stringInterpolationProvider, metrics);
 
-        mapEntries.initializeAliases();
+        mapEntries.ah.initializeAliases();
     }
 
     @Test

Reply via email to