Avertissement ResourceResolver non fermé à l’adresse com.day.cq.search.impl.builder.QueryBuilderImpl

Découvrez comment résoudre l’avertissement ResourceResolver non fermé à l’adresse com.day.cq.search.impl.builder.QueryBuilderImpl.

Description description

Environnement

AEM 6.5

Problème/Symptômes

Il existe un avertissement de session non fermée dans les journaux provenant de la classe QueryBuilderImpl : 11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread]



11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread] org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl Unclosed ResourceResolver a été créé ici :



java.lang.Exception: acktrace



at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl$ResolverReference.< init> (CommonResourceResolverFactoryImpl.java:521)



at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.register(CommonResourceResolverFactoryImpl.java:218)



at.org ache.sling.resourceresolver.impl.ResourceResolverImpl.< init> (ResourceResolverImpl.java:101)



at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.< init> (ResourceResolverImpl.java:94)



at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:263)



at apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolver(CommonResourceResolverFactoryImpl.java:173)



at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver olver(ResourceResolverFactoryImpl.java:105)



à l’adresse com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(QueryBuilderImpl.java:210)



à l’adresse com.day.cq.search.impl.builder.QueryImpl.getResourceResolver QueryImpl.java:231)



à com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)



à com.day.cq.search.writer.SimpleHitWriter.writeSimpleJson(SimpleHitWriter.java:54)



à com.day.cq.se arch.writer.SimpleHitWriter.write(SimpleHitWriter.java:41)



at kesch.impl.servlets.QueryBuilderJsonServlet.writeHits(QueryBuilderJsonServlet.java:165)



at à l’adresse à l’adresse à l’adresse à l’adresse suivante : QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)



à l’adresse de l’administrateur de l’application de l’éditeur de requêtesarch.impl.servlets.QueryBuilderJsonServlet.java:73)



at.org.apache.sling.sling.java i.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)



at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:140)



at.org ache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:346)



at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)



at .apache.sling.engine.impl.requestData.service(RequestData.java:552)



at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44)

Résolution resolution

Sur les sites d’AEM en direct, il est recommandé que les URL /bin/querybuilder soient bloquées par le Dispatcher.

Ces URL peuvent être utilisées en toute sécurité sur les instances d’auteur (face au réseau interne), mais sur les sites actifs, il est possible d’ouvrir le système à la divulgation des données.

La solution de contournement de ce bogue est d’éviter d’utiliser le servlet /bin/querybuilder et d’utiliser à la place l’ API QueryBuilder.

Après avoir appelé l’API, fermez manuellement le ResourceResolver après avoir traité le résultat de la requête.

Recherchez l'exemple de code ici. Par exemple, voici des résolveurs de ressources avec fuite de code :


Requête de requête = queryBuilder.createQuery(…, session);
Résultat de recherche = query.getResult();
for (Accès : result.getHits())) {
// do some processing
}

Code de contournement :



// Solution de contournement : fermez le résolveur de ressources internes
Itérator< Resource> resources = result.getResources();
if (resources.hasNext()) {
resources.next().getResourceResolver().close();))

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f