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.jjjjavl ava:173)
en org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.java:105)
en com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(QueryBuilderImpl.java:210)
en com.day.cq.search.impl.builder.QueryImpl.getResourceResolver(QueryImpl.getImpl java:231)
en com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)
en com.day.cq.search.writer.SimpleHitWriter.writeSimpleJson(SimpleHitWriter.java:54)
en com.day.cq.search.writer.SimpleHitWriter.write(SimpleHitWriter.java:41)
at com.day.cq.search.impl.servlets.QueryBuilderJson Servlet.writeHits(QueryBuilderJsonServlet.java:165)
en com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)
en com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.doGet(QueryBuilderJsonServlet.java:73)
en org.apache.sling.api 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.java:346)
at 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)
Resolución resolution
AEM En sitios de Live, 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();
}