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