Нужно ли закрывать Resolver Resolver и Session?
Я получаю ResourceResolver Object от ResourceResolverFactory, т.е. я создаю этот resourceResolver, и я адаптируюсь к Session.
Session session = resourceResolver.adaptTo(Session.class);
Нужно ли закрыть оба, резольвера и сеанса или закрытия будет достаточно?
finally {
if (session != null && session.isLive()) {
session.logout();
}
if (resourceResolver != null && resourceResolver.isLive()) {
resourceResolver.close();
}
}
Этот вопрос о том, "должны ли мы закрывать оба", а не о том, что закрыть первым
2 ответа
ResourceResolver
закроет базовый Session
когда вы звоните ResourceResolver.close()
метод.
Если вы используете более новые версии Sling, я бы посоветовал вам использовать try-with-resource
построить, когда вы используете ResourceResolver
:
try (final ResourceResolver resolver = this.getResourceResolver()) {
[... use resolver here ...]
}
поскольку ResourceResolver
реализует AutoClosable
интерфейс может быть использован с try-with-resource
, Это всегда закроет ResourceResolver
и вам не придется иметь дело с исключениями и т. д.
Остерегайтесь, что вы можете сделать это только с ResourceResolver
с, что вы создали. Если вы используете ResourceResolver
что вы получаете от Resource
например, вы не должны закрывать его. Лучшей практикой считается, что только тот, кто создал ResourceResolver
должен закрыть это.
Закрытие одного закроет их обоих. Если вы зарегистрируете сообщение или отладите сообщение, вы увидите, что не вводите второй оператор if.