Advertencia de ResourceResolver no cerrada en com.day.cq.search.impl.builder.QueryBuilderImpl

Obtenga información sobre cómo resolver la advertencia de ResourceResolver no cerrada en com.day.cq.search.impl.builder.QueryBuilderImpl.

Descripción description

Entorno

AEM 6.5

Problema/Síntomas

Hay una advertencia de sesión no cerrada en los registros que se originan de la clase QueryBuilderImpl: 11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread]


11.01.2018 01:03:18.878 *INFO* [ Hilo Finalizador de Apache Sling Resource Resolver] org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl Se creó ResourceResolver aquí:



java.lang.Exception: Abriendo Stacktrace



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.apache.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 org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolver(CommonResourceResolverFactoryImpl.java:173)



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



at com.day.cq.seImpl.impl.impl.builder.QueryBuilderImpl.createResourceResolver{QueryName}{com.day.cq.se} com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)



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



at com.day.cq.search.writer.SimpleHitWriter.write(SimpleHitWriter.java:41)



at com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.writeHits(QueryBuilderJsonServlet.java:165)



at com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)



at com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.doGet(QueryBuilderJsonServlet.java:73) org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)



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



at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet){2Servlet} org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)



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



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

:210



:231







:346

Resolución resolution

En sitios AEM activos, se recomienda que Dispatcher bloquee las direcciones URL /bin/querybuilder.

Estas URL se pueden utilizar de forma segura en instancias de autor (orientadas a la red interna), pero en sitios activos, tiene el potencial de abrir el sistema a la divulgación de datos.

La solución para este error es evitar usar el servlet /bin/querybuilder y usar en su lugar la API de QueryBuilder.

Después de llamar a la API, cierre manualmente ResourceResolver después de procesar el resultado de la consulta.

Busque el código de ejemplo ​ aquí. Por ejemplo, aquí están los solucionadores de recursos que pierden código:

Consulta query = queryBuilder.createQuery(…, session);
Resultado de la búsqueda = query.getResult();
for (Visita individual : result.getHits()) {
/ hacer algún procesamiento


Código de solución:


// solución alternativa: cerrar resolución de recursos internos
Iterator< Resource> resources = result.getResources();
if (resources.hasNext()) {
resources.next().getResourceResolver().close();
}

recommendation-more-help
experience-cloud-kcs-help-kbarticles