AEM Guide

Cos'è un ResourceResolver di Sling?

Come il ResourceResolver di Sling mappa i contenuti JCR in Resource, perché va chiuso e come si generano i leak in AEM.

slingjcrresourceresolver

Un ResourceResolver è l’API di Apache Sling per risolvere un percorso (o una richiesta) in una Resource. Si appoggia su una Session JCR ed è il modo principale con cui il codice AEM legge e scrive contenuti.

Perché va chiuso

Ogni ResourceResolver ottenuto da un ResourceResolverFactory racchiude una sessione JCR attiva. Se non lo chiudi, la sessione sottostante — e le risorse che mantiene (lock, cache, listener) — resta viva finché il garbage collector non se ne accorge, il che su un’istanza author o publish sotto carico può significare migliaia di sessioni perse e, alla lunga, un OutOfMemoryError.

try (ResourceResolver resolver = resolverFactory.getServiceResourceResolver(params)) {
    Resource page = resolver.getResource("/content/we-retail/us/en");
    // lavora con la resource
} // resolver.close() viene chiamato automaticamente

Acquisisci sempre un ResourceResolver all’interno di un blocco try-with-resources (o un finally equivalente). È la causa più comune di leak di risorse nel codice custom di AEM.

Dove capita più spesso