我们是否需要关闭资源解析器和会话?

Oli*_*ver 1 aem aem-6

我从ResourceResolverFactory获取ResourceResolver对象,即我正在创建此resourceResolver,我正在适应Session.

Session session = resourceResolver.adaptTo(Session.class);
Run Code Online (Sandbox Code Playgroud)

我是否需要关闭两者,解析器和会话或关闭一个就足够了?

finally {
    if (session != null && session.isLive()) {
        session.logout();
    }

    if (resourceResolver != null && resourceResolver.isLive()) {
        resourceResolver.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

这个问题是关于"我们应该关闭两者"而不是首先关闭的问题

Jen*_*ens 9

当您调用方法时,ResourceResolver将关闭底层证券.SessionResourceResolver.close()

如果您使用较新版本的Sling,我会建议您在使用try-with-resource时使用该构造ResourceResolver:

try (final ResourceResolver resolver = this.getResourceResolver()) {
    [... use resolver here ...]
}
Run Code Online (Sandbox Code Playgroud)

由于ResourceResolver实现了AutoClosable它可以使用的接口try-with-resource.这将始终关闭ResourceResolver,您将不必处理异常等.

请注意,您只能使用ResourceResolver您创建的s 执行此操作.如果您使用ResourceResolver从中获得的Resource,例如,您不应该关闭它.被认为是最佳实践,只有创建ResourceResolver它的人应该关闭它.