#java #jcr #jackrabbit #jackrabbit-oak
#java #jcr #jackrabbit #jackrabbit-дуб
Вопрос:
Я хотел бы получить доступ к javax.jcr.version.История версий удаленного узла для чтения метаданных и изменения меток или, возможно, его восстановления. Как я могу это сделать? JCR VersionManager предоставляет методы getBaseVersion(java.lang.String absPath)
и getVersionHistory(java.lang.String absPath)
, которые выдают PathNotFoundException
, когда узел в absPath был удален, хотя данные все еще находятся в /jcr:system/jcr:versionStorage .
Я использую jackrabbit-oak 1.6.1, если это уместно. Большое вам спасибо!
Ответ №1:
После удаления узла с версиями данные о ревизии все еще находятся в /jcr:system/jcr:versionStorage
, если у вас достаточно информации об узле, вы можете выполнить поиск по его версиям, nt:frozenNode
узлам —
--jcr sql2
SELECT * FROM [nt:frozenNode] as n WHERE ISDESCENDANTNODE ([/jcr:system/jcr:versionStorage]) and n.[jcr:title] LIKE "name%"
узел версии может быть приведен к javax.jcr.version.Version
;
Version version = (Version) frozenNode.getParent();
и восстановлен с помощью VersionManager.restore()
—
VersionManager versionManager = session.getWorkspace().getVersionManager();
versionManager.restore(path, version, true);
Ответ №2:
AFAIU, если узел, управляемый версиями, удален, доступ к его истории версий на основе исходного пути больше невозможен.
Это означает, что вам придется отслеживать эту информацию до удаления узла.
Комментарии:
1. Так что я даже не могу восстановить его, как только он будет удален? Если это возможно, и если я хочу изменить метки в версиях, мне нужно восстановить его, изменить метки и снова удалить? 8-}
2. Я думаю , что это правда (см. docs.adobe.com/content/docs/en/spec/jcr/2.0 /… для получения дополнительной информации)
3. Я думаю, хитрость заключается в том, чтобы найти соответствующий узел
nt:versionHistory
илиnt:frozenNode
в/jcr:system/jcr:versionStorage
, оттуда вы сможете восстановить. это возможно в AEM, который использует oak с некоторым пользовательским impl, не могу сказать наверняка о vanilla jackrabbit oak.4. Да, вам нужно найти узел истории версий. Это сложно, когда узел, управляемый версией, был удален. Если он у вас есть, вы можете получить информацию о версии, но AFAIU, вы не можете использовать
restore
метод, поскольку для этого требуется узел, управляемый версией.5.
nt:versionHistory
иnt:frozenNode
могут быть приведены кVersionHistory
и версии соответственно, которые реализуют методы восстановления, см. Модульные тесты для справки здесь и здесь