AEM Guide

¿Qué es un ResourceResolver de Sling?

Cómo el ResourceResolver de Sling mapea contenido JCR a Resources, por qué hay que cerrarlo, y cómo se producen las fugas en AEM.

slingjcrresourceresolver

Un ResourceResolver es la API de Apache Sling para resolver una ruta (o una petición) en un Resource. Se apoya sobre una Session de JCR y es la forma principal en la que el código de AEM lee y escribe contenido.

Por qué hay que cerrarlo

Todo ResourceResolver obtenido de un ResourceResolverFactory envuelve una sesión JCR viva. Si no lo cierras, la sesión subyacente — y los recursos que mantiene (locks, cachés, listeners) — sigue viva hasta que el recolector de basura la detecta, lo que en una instancia de author o publish con tráfico puede significar miles de sesiones filtradas y, con el tiempo, un OutOfMemoryError.

try (ResourceResolver resolver = resolverFactory.getServiceResourceResolver(params)) {
    Resource page = resolver.getResource("/content/we-retail/us/en");
    // trabajar con el resource
} // resolver.close() se llama automáticamente

Adquiere siempre un ResourceResolver dentro de un bloque try-with-resources (o un finally equivalente). Esta es la causa más común de fugas de recursos en código custom de AEM.

Dónde suele aparecer