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 閉じられていない ResourceResolver が次の場所で作成されました:



java.lang.Exception: Stacktrace



at.apache.sling.resourceresolver.impl.impl.CommonResourceResolver.Resolver を開 Impl.CommonFactoryResolverImpl$Resolver 参照。< 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:1 73)



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 (Java:23 1)



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 (Query) BuilderJsonServlet.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 org.apache.sling.api.servlets.SlingSafeMethodsServlet.Service slingSafeMethodsServlet.java:270)



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



at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service (SlingSafeMethodsServlet.java:346)



at org.apache.sling.sling.api.servlapi.servlets.servlets.servlets.SlingSlingSafeMethods Servlet.service (SlingSafeMethodsServlet.java:378)



at org.apache.sling.engine.impl.request.RequestData.service (RequestData.java:552)



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

解決策 resolution

ライブのAEM サイトでは、/bin/querybuilder URL を Dispatcher でブロックすることをお勧めします。

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

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

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

サンプルコードは ​ こちらで確認してください。 例えば、次のコードはリソースリゾルバーを漏洩しています。


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

回避策コード:



//回避策:内部リソースリゾルバー
Iterator< Resource> resources = result.getResources ();
if (resources.hasNext ()) {
resources.next ().getResourceResolver ().close ();
} を閉じます

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