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();
}

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