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: Opening 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) org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolver (ResourceResolverFactoryImpl.java:105)



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



at com.day.cq.search.impl.builder.QueryResourceResolver (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)



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



at com.day.cq.search.impl.servlet.QueryBuilderJsonServlet.doGet (QueryBuilderJsonServlet.2}{json2}{java} org.apache.sling.api.servlets.SlingSafeMethodsServlet.mayService (SlingSafeMethodsServlet.java:270)



at org.apache.sling.api.servlets.SlingAllMethodsServlet.java:140)



at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service (SlingSafeMethodsServlet.92}



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.SlingComponentFilterChain.render (SlingComponentFilterChain.java:44)

:73



:346

解決策 resolution

ライブ AEM サイトでは、/bin/querybuilder URLがDispatcherによってブロックされることをお勧めします。

これらのURLは、(内部ネットワークに面した)オーサーインスタンスで安全に使用できますが、ライブサイトでは、システムを開いてデータを公開する可能性があります。

このバグの回避策は、 /bin/querybuilder サーブレットの使用を避け、代わりに QueryBuilder API を使用することです。

APIを呼び出した後、クエリ結果を処理した後、ResourceResolver を手動で閉じます。

サンプルコード はこちらをご覧ください。例えば、コード漏洩のリソース リゾルバーは次のとおりです。

Query query = queryBuilder.createQuery (。…, session);
SearchResult = query.getResult ();
for (ヒット ヒット ヒット : result.getHits ()) {
//do処理
}

回避策コード:


//回避策:内部リソース リゾルバーを閉じる
イテレータ < リソース > リソース = result.getResources ();
if (resources.hasNext ()) {
resources.next ().getResourceResolver ().close ();
}

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