我已阅读 this关于如何正确使用resourceResolver的博客。作者引用
If you open a JCR session of a Sling ResourceResolver, you are also responsible for closing it. On the other hand: If you get passed a ResourceResolver or a Session object, do not call logout() or close() on it.
我无法理解这个概念,可能是因为在这种情况下没有代码示例。
据我所知,我可以通过servlet中的request.getResourceResolver()、在OSGi组件中使用@Reference SCR注释、jsp的隐式resourceResolver对象、在jsp中使用sling.getService()以及通过适配ResourceResolver对象。
在获取resourceResolver对象的所有方式中,我应该关闭哪些方式以及与每个对象关联的 session 是什么?
最佳答案
将其视为文件资源。
- 如果您打开它,您有责任将其关闭
- 如果您使用对该文件的引用,则您没有责任关闭它
因此,您的代码应该在同一范围内打开和关闭。
如果您从资源获取resourceResolver
,则您没有打开解析器,也不需要关闭它。
在博客的示例中,他们从 session = repo.loginAdministrative()
生成一个 session (Repository 不再有此方法);因此负责在同一范围内调用 session.logout()
(使用 finally {...}
block )。
关于sling - 何时显式关闭 Sling 中的 ResourceResolver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35587970/