Nicht geschlossener ResourceResolver-Warnhinweis unter com.day.cq.search.impl.builder.QueryBuilderImpl

Erfahren Sie unter com.day.cq.search.impl.builder.QueryBuilderImpl, wie Sie die nicht geschlossene ResourceResolver-Warnung beheben können.

Beschreibung description

Umgebung

AEM 6.5

Problem/Symptome

In Protokollen, die von der QueryBuilderImpl-Klasse stammen, gibt es eine nicht beendete Sitzungswarnung: 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 Nicht geschlossener ResourceResolver wurde hier erstellt:



java.lang.Exception: Öffnen von 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.resourceResolver.impl.ResourceResolverFactoryImpl.getResourceResolver(ResourceResolverFactoryImpl.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:54)at com.day.cq.search.writer.SimpleHitWriter.write(SimpleHitWriter.java:41)



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



com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.handleQuery(QueryBuilderJsonServlet.java



)at com.day.cq.search.impl.servlets.QueryBuilderJsonServlet.doGet(QueryBuilderJsonServlet.java:113)at org.apapache.sling.api.servlets.SlingMethodsServlet.MayService(SlingMethodsServlet.java



)at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.java:73)at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java



)at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.java:270)at org.apache.sling.engine.impl.request.RequestData.service(Request Data.java



)at org.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:140)



:346



:378



:552



:44

Lösung resolution

Auf Live-AEM-Sites wird empfohlen, dass /bin/QueryBuilderURLs vom Dispatcher blockiert werden.

Diese URLs können sicher in (auf das interne Netzwerk gerichteten) Autoreninstanzen verwendet werden, aber auf Live-Sites kann das System für die Offenlegung von Daten geöffnet werden.

Die Problemumgehung für diesen Fehler besteht darin, das Servlet /bin/querybuilder zu vermeiden und stattdessen die QueryBuilder API) .

Schließen Sie nach dem Aufruf der API ResourceResolver nach der Verarbeitung des Abfrageergebnisses manuell.

Den Beispielcode finden Sie hier. Hier finden Sie beispielsweise Code, der Ressourcen-Resolver verliert:

Query = queryBuilder.createQuery(…, session);
SearchResult = query.getResult();
for (Treffer : result.getHits()) {
// do einige Verarbeitungen
}

Problemumgehungscode:


// Workaround: close internal resource resolver
iterator< resource> resources = result.getResources();
if (resources.hasNext())) {
resources.next().getResourceResolver().close();
}

recommendation-more-help
experience-cloud-kcs-help-kbarticles