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

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