Varning om ostängd ResourceResolver på com.day.cq.search.impl.builder.QueryBuilderImpl
Lär dig hur du löser varningen om ostängd ResourceResolver på com.day.cq.search.impl.builder.QueryBuilderImpl.
Beskrivning description
Miljö
AEM 6.5
Problem/symtom
Det finns en sessionsvarning som inte är stängd i loggar från klassen QueryBuilderImpl: 11.01.2018 01:03:18.878 *INFO* [ Apache Sling Resource Resolver Finalizer Thread]
11.01.2018 01:03: 18.878 *INFO* [ Slutredigeringstråd för Apache Sling Resource Resolver ] org.apache.sling.resourceResolver.impl.CommonResourceResolverFactoryImpl Unclosed ResourceResolver skapades här:
java.lang.Exception: Öppnar stacktrace
på org.apache.sling.resourceResesolver.impl.CommonResourceResolverFactoryImpl$ResolverReference.< init> (CommonResourceResolverFactoryImpl.java:521)
at org.apache.sling.resourceResolver.impl.CommonResourceResolverFactoryImpl.register(CommonResourceResolverFactoryImpl.java:218)
at org.apache.sling.resourceResesolver.impl.ResourceResolverImpl.< init> (ResourceResolverImpl.java:101)
vid org.apache.sling.resourceresolver.impl.ResourceResolverImpl.< init> (ResourceResolverImpl.java:94)
at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:263)
at ort g.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolver(CommonResourceResolverFactoryImpl.java:173)
at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.get ResourceResolver(ResourceResolverFactoryImpl.java:105)
på com.day.cq.search.impl.builder.QueryBuilderImpl.createResourceResolver(QueryBuilderImpl.java:210)
på com.day.cq.search.impl.builder.QueryImpl.getResourceResResResResResurs olver(QueryImpl.java:231)
på 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)
at orr g.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService(SlingSafeMethodsServlet.java:270)
at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.let 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.requestData.service(RequestData.java:552)
at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentComponent) entFilterChain.java:44)
Upplösning resolution
På live-AEM webbplatser rekommenderar vi att URL:er för /bin/querybuilder blockeras av dispatchern.
Dessa URL:er kan användas på ett säkert sätt på (interna nätverksanslutna) författarinstanser, men på aktiva webbplatser kan systemet öppnas för datadetektion.
Du kan lösa problemet genom att undvika att använda serverleten /bin/querybuilder och i stället använda QueryBuilder API .
När du har anropat API:t stänger du ResourceResolver manuellt efter att frågeresultatet har bearbetats.
Här hittar du exempelkoden . Här är till exempel resurslösare som läcker kod:
Fråga = queryBuilder.createQuery(…, session);
SearchResult result = query.getResult();
for (träff : result.getHits()) {
// do lite bearbetning
}
Lösning:
// tillfällig lösning: stäng intern resurslösare
Iterator< Resource> resources = result.getResources();
if (resources.hasNext()) {
resources.next().getResourceResolver().close();
}