Aem 在CQ5中的日志中检测到未关闭的会话

Aem 在CQ5中的日志中检测到未关闭的会话,aem,jcr,Aem,Jcr,在error.log中检测到未关闭的会话警告。我已经打开和关闭了finally块中的所有会话。但我还是得到了警告。由于大量未关闭的会话,这使得author实例速度非常慢。下面是错误日志 04.06.2015 02:45:54.921 *WARN* [Finalizer] org.apache.jackrabbit.core.SessionImpl Unclosed session detected. The session was opened here: java.lang.Exceptio

在error.log中检测到未关闭的会话警告。我已经打开和关闭了finally块中的所有会话。但我还是得到了警告。由于大量未关闭的会话,这使得author实例速度非常慢。下面是错误日志

04.06.2015 02:45:54.921 *WARN* [Finalizer] org.apache.jackrabbit.core.SessionImpl Unclosed session detected. The session was opened here:  java.lang.Exception: Stack Trace
        at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:222)
        at org.apache.jackrabbit.core.XASessionImpl.<init>(XASessionImpl.java:117)
        at com.day.crx.core.CRXSessionImpl.<init>(CRXSessionImpl.java:69)
        at com.day.crx.core.CRXRepositoryImpl.createSessionInstance(CRXRepositoryImpl.java:935)
        at org.apache.jackrabbit.core.RepositoryImpl.createSession(RepositoryImpl.java:959)
        at org.apache.jackrabbit.core.SessionFactory.createAdminSession(SessionFactory.java:42)
        at com.day.crx.sling.server.impl.SlingRepositoryWrapper.loginAdministrative(SlingRepositoryWrapper.java:76)
        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory.getResourceProviderInternal(JcrResourceProviderFactory.java:136)
        at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory.getAdministrativeResourceProvider(JcrResourceProviderFactory.java:115)
        at org.apache.sling.resourceresolver.impl.tree.ResourceProviderFactoryHandler.login(ResourceProviderFactoryHandler.java:162)
        at org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry.loginToRequiredFactories(RootResourceProviderEntry.java:95)
        at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getResourceResolverInternal(ResourceResolverFactoryImpl.java:95)
        at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getAdministrativeResourceResolver(ResourceResolverFactoryImpl.java:69)
        at org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.getResourceTypeResourceResolver(ResourceResolverContext.java:192)
        at org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.getParentResourceType(ResourceResolverContext.java:216)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getParentResourceType(ResourceResolverImpl.java:1136)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getParentResourceType(ResourceResolverImpl.java:1126)
        at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.isResourceType(ResourceResolverImpl.java:1151)
        at org.apache.sling.api.resource.ResourceUtil.isA(ResourceUtil.java:466)
        at com.adobe.cq.social.storage.index.AbstractBaseIndexHandler.checkResourceType(AbstractBaseIndexHandler.java:111)
04.06.2015 02:45:54.921*检测到警告*[Finalizer]org.apache.jackrabbit.core.SessionImpl未关闭的会话。会话在此处打开:java.lang.Exception:堆栈跟踪
位于org.apache.jackrabbit.core.SessionImpl.(SessionImpl.java:222)
位于org.apache.jackrabbit.core.XASessionImpl.(XASessionImpl.java:117)
位于com.day.crx.core.CRXSessionImpl。(CRXSessionImpl.java:69)
位于com.day.crx.core.CRXRepositoryImpl.createSessionInstance(CRXRepositoryImpl.java:935)
位于org.apache.jackrabbit.core.RepositoryImpl.createSession(RepositoryImpl.java:959)
位于org.apache.jackrabbit.core.SessionFactory.createAdminSession(SessionFactory.java:42)
在com.day.crx.sling.server.impl.SlingRepositoryWrapper.loginAdministrative(SlingRepositoryWrapper.java:76)上
位于org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory.getResourceProviderInternal(JcrResourceProviderFactory.java:136)
位于org.apache.sling.jcr.resource.internal.helper.jcr.jrresourceProviderFactory.getAdministrativeResourceProviderProvider(jrresourceProviderFactory.java:115)
位于org.apache.sling.resourceresolver.impl.tree.ResourceProviderFactoryHandler.login(ResourceProviderFactoryHandler.java:162)
位于org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry.LoginToRequiredFactorys(RootResourceProviderEntry.java:95)
位于org.apache.sling.resourcesolver.impl.resourcesolverfactorympl.getresourcesolverternal(resourcesolverfactorympl.java:95)
位于org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getAdministrativeResourceResolver(ResourceResolverFactoryImpl.java:69)
位于org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.getResourceTypeResourceResolver(ResourceResolverContext.java:192)
位于org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.getParentResourceType(ResourceResolverContext.java:216)
位于org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getParentResourceType(ResourceResolverImpl.java:1136)
位于org.apache.sling.resourceresolver.impl.ResourceResolverImpl.getParentResourceType(ResourceResolverImpl.java:1126)
位于org.apache.sling.resourceresolver.impl.ResourceResolverImpl.isResourceType(ResourceResolverImpl.java:1151)
位于org.apache.sling.api.resource.ResourceUtil.isA(ResourceUtil.java:466)
位于com.adobe.cq.social.storage.index.AbstractBaseIndexHandler.checkResourceType(AbstractBaseIndexHandler.java:111)
这是我们收到此警告的代码段

private List<String>  rollOutPages(Collection<Page> pages) throws Exception
{
  final ResourceResolver adminResourceResolver=resourceResolverFactory.getAdministrativeResourceResolver(null);
        List<String> rolledOutPages = new ArrayList<>();
        try {
            //adminResourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
            for (Page page : pages) {
                final Collection<LiveRelationship> liveRelationships = relationShipManager.getLiveRelationships(page, null, null, false);
                for (LiveRelationship relationship : liveRelationships) {
                    rolloutManager.rollout(adminResourceResolver, relationship, false);
                    rolledOutPages.add(relationship.getTargetPath());
                }

            }
            adminResourceResolver.adaptTo(Session.class).save();
            adminResourceResolver.adaptTo(Session.class).logout();
            adminResourceResolver.close();
            return rolledOutPages;
        }
        catch (WCMException e) {
            adminResourceResolver.adaptTo(Session.class).save();
            adminResourceResolver.adaptTo(Session.class).logout();
            adminResourceResolver.close();
            LOG.error("Unable to create administrative resource resolver", e);
            throw new AbortException("Exception during rollout of pages",e.getMessage());
        }
        catch (Exception e)
        {
            adminResourceResolver.adaptTo(Session.class).save();
            adminResourceResolver.adaptTo(Session.class).logout();
            adminResourceResolver.close();
            LOG.error("Exception during rollout of pages", e);
            throw new AbortException("Exception during rollout of pages",e.getMessage());
        }
        finally {
            if(adminResourceResolver.isLive()||adminResourceResolver != null){
                adminResourceResolver.close();
            }
        }

    }
私有列表卷展页(集合页)引发异常
{
最终ResourceResolver adminResourceResolver=resourceResolverFactory.getAdministrativeResourceResolver(null);
List rolledOutPages=新建ArrayList();
试一试{
//adminResourceResolver=resourceResolverFactory.getAdministrativeResourceResolver(null);
用于(第页:页){
最终集合LiverRelationships=relationShipManager.GetLiverRelationships(第页,null,null,false);
for(LiveRelationship关系:liveRelationships){
卷展栏(adminResourceResolver,关系,false);
添加(relationship.getTargetPath());
}
}
adminResourceResolver.adapto(Session.class).save();
adminResourceResolver.adapto(Session.class).logout();
adminResourceResolver.close();
返回滚出的页面;
}
捕获(WCMEException e){
adminResourceResolver.adapto(Session.class).save();
adminResourceResolver.adapto(Session.class).logout();
adminResourceResolver.close();
日志错误(“无法创建管理资源解析程序”,e);
抛出新的AbortException(“页面滚动期间的异常”,例如getMessage());
}
捕获(例外e)
{
adminResourceResolver.adapto(Session.class).save();
adminResourceResolver.adapto(Session.class).logout();
adminResourceResolver.close();
LOG.error(“页面滚动期间异常”,e);
抛出新的AbortException(“页面滚动期间的异常”,例如getMessage());
}
最后{
if(adminResourceResolver.isLive()| | adminResourceResolver!=null){
adminResourceResolver.close();
}
}
}

我已经结束了最后一个街区的会议。仍然收到这个警告。有谁能帮我理解我缺少了什么吗?

我看到的是您正在关闭ResourceResolver,而不是您在调用该ResourceResolver上的
Adapto(Session.class)
时创建的会话。在下面的代码中,我改变了这一点,因此除了关闭admin ResourceResolver之外,还会在会话中调用注销,并且我还合并了一些重复:

private List<String>  rollOutPages(Collection<Page> pages) throws Exception
{
        ResourceResolver adminResourceResolver;
        List<String> rolledOutPages = new ArrayList<>();
        try {
            adminResourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
            for (Page page : pages) {
                final Collection<LiveRelationship> liveRelationships = relationShipManager.getLiveRelationships(page, null, null, false);
                for (LiveRelationship relationship : liveRelationships) {
                    rolloutManager.rollout(adminResourceResolver, relationship, false);
                    rolledOutPages.add(relationship.getTargetPath());
                }

            }
            Session session;
            try{
                session = adminResourceResolver.adaptTo(Session.class);
                session.save();
            }
            finally{
                session.logout();
            }
            return rolledOutPages;
        }
        catch (WCMException e) {
            LOG.error("Unable to create administrative resource resolver", e);
            throw new AbortException("Exception during rollout of pages",e.getMessage());
        }
        catch (Exception e)
        {
            LOG.error("Exception during rollout of pages", e);
            throw new AbortException("Exception during rollout of pages",e.getMessage());
        }
        finally {
            if(adminResourceResolver != null && adminResourceResolver.isLive()){
                adminResourceResolver.close();
            }
        }

    }
私有列表卷展页(集合页)引发异常
{
ResourceResolver adminResourceResolver;
List rolledOutPages=新建ArrayList();
试一试{
adminResourceResolver=resourceResolverFactory.getAdministrativeResourceResolver(null);
用于(第页:页){
最终集合LiverRelationships=relationShipManager.GetLiverRelationships(第页,null,null,false);
for(LiveRelationship关系:liveRelationships){
卷展栏(adminResourceResolver,关系,false);
rolledOutPages.add(relat