com.day.cq.search.impl.builder.QueryBuilderImpl에서 ResourceResolver 경고가 닫히지 않음

com.day.cq.search.impl.builder.QueryBuilderImpl에서 닫히지 않은 ResourceResolver 경고를 해결하는 방법에 대해 알아봅니다.

설명 description

환경

AEM 6.5

문제/증상

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를 여기서 만들었습니다.



java.lang.Exception: 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.resolver.resolver.impl.getResourceResolver ResolverFactoryImpl.java:105)



at com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(QueryBuilderImpl.java:210)



at com.day.cq.search.impl.builder.QueryImpl.getResourceResolver(QueryImpl.java:231)



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



at com.day.cq.search.writer.SimpleHitWriter.writeSimpleJson(SimpleHitWriter.java:5com.day.cq.se:54){9){9 at .writer.SimpleHitWriter.write(SimpleHitWriter.java:41)



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



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



com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.doGet(QueryBuilderJsonServlet.java:73)



at org.apache.sling .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.service(SlingSafeServlet.service)



at org.apache.sling.sling.sling.api.servlet.servlet.SafeSafeSafeMethodsServletSafeServletSafeSafeServletSafeSafeServletService 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)

해결 방법 resolution

라이브 AEM 사이트에서는 /bin/querybuilder URL이 Dispatcher에 의해 차단되는 것이 좋습니다.

이러한 URL은 (내부 네트워크를 마주하는) 작성자 인스턴스에서 안전하게 사용할 수 있지만 라이브 사이트에서는 시스템을 열어 데이터를 공개할 수 있습니다.

이 버그에 대한 해결 방법은 /bin/querybuilder 서블릿을 사용하지 않고 대신 QueryBuilder API 를 사용하는 것입니다.

API를 호출한 후 쿼리 결과를 처리한 후 ResourceResolver 을(를) 수동으로 닫으십시오.

여기에서 샘플 코드 을(를) 찾으십시오. 예를 들어 코드 누출 리소스 확인자는 다음과 같습니다.


쿼리 쿼리 = queryBuilder.createQuery(…, session);
SearchResult = query.getResult();
for (히트 : result.getHits()) {
/// do 일부 처리
}

해결 방법 코드:



// 해결 방법: internal resource resolver
반복자< Resource> resources = result.getResources();
if (resources.hasNext() {
resources.next().getResourceResolver().close();
}

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