Aviso de ResourceResolver não fechado em com.day.cq.search.impl.builder.QueryBuilderImpl
Saiba como resolver o aviso não fechado de ResourceResolver em com.day.cq.search.impl.builder.QueryBuilderImpl.
Descrição description
Ambiente
AEM 6.5
Problema/Sintomas
Há um aviso de sessão não fechada nos logs originados da classe QueryBuilderImpl: 11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread]
11.01.2018 01:03:18.878 *INFO* [
Thread Finalizador do Apache Sling Resource Resolver]
org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl Unclosed ResourceResolver foi criado aqui:
java.lang.Exception: Abrindo Stacktrace
em org.apache.sling.resourceresolver.impl.CommonResourceResolverFactory Impl$ResolverReference.<
init>
(CommonResourceResolverFactoryImpl.java:521)
em org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.register(CommonResourceResolverFactoryImpl.java:218)
em org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<
init>
(ResourceResolverImpl.java:101)
em org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<
init>
(ResourceResolverImpl.java:94)
em org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:263)
em org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolver(CommonResourceResolverFactoryImpl.java 173)
em org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.java:105)
em com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(QueryBuilderImpl.java:210)
em com.day.cq.search.impl.builder.QueryImpl.getResourceResolver(QueryImpl.java 231)
em com.day.cq.search.impl.result.HitImpl.getResource(HitImpl.java:108)
em com.day.cq.search.writer.SimpleHitWriter.writeSimpleJson(SimpleHitWriter.java:54)
em com.day.cq.search.writer.SimpleHitWriter.write(SimpleHitWriter.java:41)
em com.day.cq.search.impl.servlets.QueryBuilderJsonServlet writeHits(QueryBuilderJsonServlet.java:165)
em com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java:113)
em com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.doGet(QueryBuilderJsonServlet.java:73)
em org.apache.sling.sling i.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)
em org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:140)
em org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethods Servlet.java:346)
em org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:378)
em org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552)
em org.apache.sling.engine.impl.filter.SlingComponentFilterChain.Sling (SlingComponentFilterChain.java:44)
Resolução resolution
Em sites AEM ativos, é recomendável que as URLs /bin/querybuilder sejam bloqueadas pelo dispatcher.
Esses URLs podem ser usados com segurança em instâncias de autor (voltadas para a rede interna), mas em sites ativos, têm o potencial de abrir o sistema para a divulgação de dados.
A solução alternativa para esse erro é evitar o uso do servlet /bin/querybuilder e, em vez disso, usar a API QueryBuilder.
Depois de chamar a API, feche manualmente o ResourceResolver após processar o resultado da consulta.
Encontre o código de exemplo aqui. Por exemplo, aqui estão os resolvedores de recursos de vazamento de código:
Consulta = queryBuilder.createQuery(…, session);
Resultado de SearchResult = query.getResult();
for (Ocorrência: result.getHits()) {
// fazer algum processamento
}
Código de solução alternativa:
// solução alternativa: fechar resolvedor de recurso interno
Iterador<
Recursos>
recursos = result.getResources();
if (resources.hasNext()) {
resources.next().getResourceResolver().close();
}