何时在Sling中显式关闭ResourceResolver

时间:2016-02-23 20:55:11

标签: sling

我已在this博客上阅读了有关如何正确使用resourceResolver的信息。作者引用

  

如果您打开Sling ResourceResolver的JCR会话,您也是   负责关闭它。另一方面:如果你通过了   ResourceResolver或Session对象,不要调用logout()或close()   在它上面。

我无法理解这个概念,可能是因为在这种情况下没有代码示例。

据我所知,我可以通过servlet中的request.getResourceResolver()获取ResourceResolver对象,在OSGi组件中使用@Reference SCR注释,使用jsp的隐式resourceResolver对象,在jsp中使用sling.getService() ,还可以通过适应ResourceResolver对象。

在获取resourceResolver对象的所有方法中,我应该关闭哪些以及与这些对象相关联的会话是什么?

1 个答案:

答案 0 :(得分:3)

将其视为文件资源。

  • 如果你打开它,你有责任关闭它
  • 如果您使用对文件的引用,那么关闭它不是您的责任

因此,您的代码应该打开&在同一范围内关闭。

如果您获得resourceResolver FROM资源,则无法打开解析程序,也无需关闭它。

在博客示例中,他们从session = repo.loginAdministrative()生成会话(Repository不再使用此方法);因此负责在同一范围内调用session.logout()(使用finally {...}块)。