AEM 6.5.12 - Querybuilder unclosed resourceresolver in logs
Hi all,
I have been referring to the adobe link in the link https://helpx.adobe.com/au/experience-manager/kb/Unclosed-ResourceResolver-warnng-at-com-day-cq-search-impl-builder-QueryBuilderImpl.html and the ref https://kiransg.com/2022/03/26/unclosed-resource-resolver-complete-guide-aem/
since i noticed that we have tons of unclosedresource resolvers in the code we migrated to 65. While i managed to close most, the question becomes, of the unclosed resource resolver that comes up if the hits is empty. if the hits is not empty , this works fine.
The service resolver is obtained within autocloseable try block via resourceresolverfactory obtained using getSlingscriptHelper
key difference- its in wcmusepojo class
ResourceResolverFactory factory = getSlingScriptHelper().
getService(ResourceResolverFactory.class);
try(open service resolver in closeable try BLOCK){
ResourceResolver leakingResourceResolverReference = null;
try {
Session session = resourceResolver.adaptTo(Session.class);
Map<String, String> map = new HashMap<>();
//map put goes here
Query query = queryBuilder.createQuery(PredicateGroup.create(map), session);
SearchResult result = query.getResult();
for (Hit hit : result.getHits()) {
if(leakingResourceResolverReference == null) {
leakingResourceResolverReference = hit.getResource().getResourceResolver();
}
//business logic
}
} catch(Exception e) {
log.info("error::{}",e.getMessage());
} finally {
if(leakingResourceResolverReference != null){
leakingResourceResolverReference.close();
}
}
}
@joerghoh @Feike_Visser1